Connection을 맺을 때 사용하는 포트(port)는 유한 범위 내에서 사용하고 시간이 지남에 따라 재사용된다. 따라서 두 통신 호스트가 과거에 사용된 포트 번호 쌍을 사용하는 가능성이 존재한다. 서버 측에서는 패킷의 SYN을 보고 패킷을 구분하게 되는데 난수가 아닌 순차적인 number가 전송된다면 이전의 connection으로부터 오는 패킷으로 인식할 수 있다.
이러한 문제가 발생할 가능성을 줄이기 위해서 난수로 ISN을 설정하는 것이다.
Acknowledgement Number
받고 싶은 다음 바이트 번호를 의미한다.
ex) 0 ~ 999, 1000 ~ 1999의 세그먼트를 받았을 때 ack# = 각각 1000, 2000
Header Length
TCP 헤더의 길이를 나타낸다.
Control bits
ACK(Acknowledgement)
패킷을 받았다는 응답을 할 때 사용한다.
Acknowledgement Number가 유효한지를 나타낸다.
최초 연결의 첫 번째 세그먼트를 제외한 모든 Segment의 ACK 비트는 1로 설정한다.
최초 연결의 첫 번째 Handshake 과정에서는 응답할 요청이 없기 때문이다.
SYN(Synchronize Sequence Number)
연결을 요청할 때 SYN bit를 사용한다.
연결을 요청하는 경우에 SYN bit를 1로 설정한다.
따라서, SYN bit = 1 이면 TCP 연결을 요청하는 과정인 것을 알 수 있다.
다른 모든 경우에는 SYN bit를 0으로 설정한다.
연결 요청에 응답하는 마지막 Handshake의 Segment에서도 SYN bit를 0으로 설정한다.
FIN(Finish)
세션 연결을 종료시킬 때 사용되며, 더 이상 전송할 데이터가 없음을 의미한다.
4-Way Handshake 과정에서 사용된다.
RST(Reset)
세션 연결을 종료 시킬 때 사용한다.
양방향에서 동시에 일어나는 중단 작업이다.
비 정상적인 세션 연결 끊기에 해당한다.
이 패킷을 보내는 곳이 현재 접속하고 있는 곳과 즉시 연결을 끊고자 할 때 사용한다.
PSH
수신자가 데이터를 상위 계층에 즉시 전달해야 함을 가리킨다.
URG
송신 측 상위 계층 개체가 ‘긴급’으로 표시하는 데이터임을 가리킨다.
긴급 데이터의 마지막 바이트의 위치는 URG Data Pointer에 의해 가리켜진다.
Receive Window
Flow Control에 사용된다.
Checksum
UDP와 동일하다.
Options
송신자와 수신자가 최대 세그먼트 크기(MSS)를 협상하거나 고속 네트워크에서 사용하기 위한 Window 확장 요소로 이용된다.
UDP는 헤더에 필드가 거의 없다. 따라서, 새로운 필드를 추가하기 쉽고, TCP보다 확장성이 높다. 이를 통해 QUIC(Quick UDP Internet Connection)를 만들었다.
시간단축
전송 계층은 UDP를 사용하여 TCP 3방향 핸드셰이크에서 하나의 1-RTT 지연을 줄인다.
최신 버전의 TLS 프로토콜 채택인 TLS 1.3은 클라이언트가 TLS 핸드셰이크가 완료되기 전에 애플리케이션 데이터를 보낼 수 있도록 하여 1-RTT 및 0-RTT를 모두 지원한다. QUIC 프로토콜을 사용하면 첫 번째 핸드셰이크 협상에 1-RTT가 걸리지만 이전에 연결된 클라이언트는 캐시된 정보를 사용하여 0-1 RTT만으로 TLS 연결을 복원할 수 있다.
신뢰성 확보
QUIC은 연결에서 여러 스트림을 다중화하는 개념을 도입했다. QUIC은 각 스트림에 대해 별도의 흐름 제어를 설계하고 구현함으로써 전체 연결에 영향을 미치는 HOL(head-of-line) 차단 문제를 해결했다.
참고
도서 : Computer Networking : A top-Down Approach by James F. Kurose, Keith W. Ross