몇몇 필드를 제외하면 반드시 알 필요는 없다고 생각하지만, 한 번쯤은 머리에 넣어두면 좋을 그런 느낌?
TCP 헤더 구성
각 필드
Sourse & Destinaion Port Number
- 각각 16비트
- 발신지 포트 주소와 목적지 포트 주소다.
- 양쪽의 프로세스를 식별
- IP 주소 + 포트 번호 = 소켓(포트) 주소
Sequence Number
- 32bit
- 바이트 단위로 구분, 순서화되는 번호
- TCP에서 흐름 제어를 하거나 신뢰성 보장, 연결 및 해제에 사용
- 순서 가능 범위
- 32비트이므로 2의 32승(4,294,967,295)
- 임의 값으로 시작하여 최대값(4,294,967,295) 이후에는 0으로 시작
- 초기 시퀀스 넘버
- ISN(Initial Sequence Number)라고 부름
- 난수 발생기로 ISN을 생성
- 난수 발생기 : 매 4 ㎲ 마다 1씩 증가하는 12 비트 카운터에 의해 구현
- TCP는 양방향이기 때문에 방향마다 ISN 번호가 다르다.
Acknowledgement Number
- 32bit
- 응답에 기대하는 Ack 번호 = 상대에게 보낸 Seq 번호 + 1
헤더 길이 필드
플래그 비트들
- 6bit(각각 URG, ACK, PSH, RST, SYN, FIN)
- TCP 패킷 전달에 관련되어 TCP 회선, 데이터 관리 제어 등에 쓰임
- 흐름 제어, 연결 생성, 연결 해제, 연결 리셋, 데이터 전송 모드...
윈도우 크기
- 16bit
- 흐름 제어를 위해 사용
- 상대방에게 자신의 수신 버퍼 여유용량 크기를 지속적으로 통보(패킷을 보낼 때마다, 매번 업데이트)
Checksum
- 16bit
- 에러 검출에 사용
- 송신측에서, 전송할 모든 데이터를 16 비트 워드 단위로 구분하고,
- 1의 보수를 취하고, 그 합에 대한 결과를 전송하면,
- 수신측에서, 같은 합을 해보아서 오류를 검출하는 방식
Urgent pointer
- 16bit
- TCP 패킷에 포함된 긴급 데이터의 마지막 순서번호(Seq)
옵션
- 최대 40바이트
TCP MSS 옵션
을 협상하거나, 주어진 윈도우 크기보다 더 크게 사용
하거나 선택확인응답
을 하거나 타임스탬프 옵션
정의 등