TCP 헤더 형식
TCP Header 의 기본 길이 = 20 Byte
Port number 라는 개념은 TCP 에서 활용되므로 헤더에 Source port 와 Destination port 가 있음
Sequence number (필드 크기 : 32bit) : 전송 데이터의 시작 바이트 번호
Acknowledgement number (필드 크기 : 32비트) : 정상적으로 받은 마지막 바이트 다음에 기대하는 바이트 번호
클라이언트가 시작 시 Sequence Number = 1000 으로
1000~1049까지 총 50바이트 전송했다면,
서버는 Acknowledgement Number = 1050 으로 응답.
즉, "1050번 바이트부터 보내줘" 라는 의미이며,
이것이 "다음에 기대하는 바이트 번호"
Data Offset (필드 크기 : 4bit) : TCP 헤더의 길이 (4 byte word 단위)
Rev(Reserved) (필드 크기 : 3bit) : 미래 확장에 대비(일반적으로 0 으로 설정됨)
Control Flags (6~9개) (필드 크기 : 일반적으로 8bit, NS(Nonce Sum, optional) 플래그 포함 시 9bit) : TCP 상태 제어용 플래그 (ex. SYN, ACK, FIN, RST 등)
Window size (필드 크기 : 16bit) : Data 를 수신하는 측의 버퍼 크기
Checksum (필드 크기 : 16bit) : 에러 검출을 위한 값
Urgent Pointer (필드 크기 : 16bit) : 긴급 데이터 위치를 나타냄
Options + Padding (필드 크기 : 32bit)
Segment Data (Payload) (필드 크기 : 32bit) : TCP 가 실어 나르는 실제 application 데이터
TCP 헤더 구조체 정의
typedef struct TcpHeader {
unsigned short srcPort;
unsigned short dstPort;
unsigned int seq;
unsigned int ack;
unsigned char data; // data 필드를 정확히 알아야
// TCP 헤더의 정확한 offset 을 뽑아낼 수 있음
unsigned char flags;
unsigned short windowSize;
unsigned short checksum;
unsigned short urgent;
} TcpHeader;