기본 헤더 : 20bytes
옵션 사용시 헤더의 최대 크기 : 60bytes (헤더의 길이: 20 ~ 60 bytes)
IP 주소 + 포트 번호 = 소켓 번호 (양쪽 호스트 내 종단 프로세스 식별)
- 발신지 포트(Source Port, 16 bits)
송신 호스트 응용프로세스가 사용하는 번호
- 목적지 포트(Destnation Port, 16 bits)
수신 호스트 응용프로세스가 사용하는 번호
- 순차 번호(Sequence Number)
- TCP 각 세그먼트의 첫번째 바이트에 부여되는 번호.
- 신뢰성 있는 데이터 전송을 위해 모든 바이트마다 일련 번호 부착.
- 32bits 필드로 실제 데이터 첫 번째 바이트에 부여된 번호. 32 bits 이므로 최대 4기가(2^32) 바이트 크기의 송신 데이터에 순서화된 일련번호를 붙일수 있음
- 초기 순차번호(ISN, Initial Sequence Number)
- TCP 연결설정 동안 난수발생기를 이용하여 초기순서번호(ISN)를 생성
- TCP 양방향이므로 각 방향 마다 다른 ISN 번호가 사용됨.
- 응답 확인 번호(Acknowledgement number, 32 bits)
- 수신한 세그먼트의 확인 응답을 위한 32bits 필드
- 세그먼트에 실린 데이터의 마지막 바이트의 순차 번호에 1을 더한 값.
- 수신하기를 기대하는 다음 바이트 번호 = (마지막 수신 성공 순서번호 + 1)
- 헤더 길이(Header Length, 4 bits)
- TCP 헤더 길이를 나타내는 4bits 필드.
- 4바이트(32 비트) 단위로 표시. 따라서, TCP 헤더 길이는 총 60 바이트 이하
- 헤더의 길이가 20-60 이므로 5-12 사이의 값.
- TCP 제어 플래그(TCP Control Flag, 6 bits)
각 필드 흐름제어, 종료, 데이터 전송 모드용 6bit 구성.
- URN : 긴급 플래그(Urgent pointer), 긴급한 처리를 요하는 것을 알림.
- 송신측 상위계층이 긴급 데이터라고 하면, 긴급비트를 1로 설정하고 순서에 상관없이 먼저 송신됨, 긴급 데이터의 마지막 바이트 위치가 Urgent pointer로 가리켜짐
- ACK : 응답(Acknowledgement) 플래그, 응답패킷에 모두 1로 세팅됨.
- 1로 세팅되면, 확인번호 유효함을 뜻함
- 0로 세팅되면, 확인번호 미포함(즉, 32비트 크기의 확인응답번호 필드 무시됨)- SYN 세그먼트 전송 이후 세그먼트에는 항상 이 비트가 1로 세팅이 됨.
- PSH : Push 플래그, 실제 데이터의 전송이 일어나고 있음을 표시.
- 가능한한 빨리 응용프로그램에 버퍼링된 데이터를 즉시 전달할것. 수신측은 버퍼가 찰 때까지 기다리지 않고 수신 즉시 어플리케이션에 전달.- 서버측에서는 더이상 전송할 데이터가 없음을 나타내기도 함.
- RST : Reset 플래그, 비정상적인 종료를 위한 플래그.
- 연결확립(ESTABLISHED)된 회선에 강제 리셋 요청.
- SYN : 연결(Synchronize)요청 플래그, 정상적인 연결을 요청할 때 사용되는 플래그.
- TCP 연결 설정 초기화를 위한 순서번호의 동기화
연결요청: SYN=1, ACK=0
연결허락: SYN=1, ACK=1
연결설정: ACK=1
- FIN : Finish 플래그, 정상적인 연결의 종료에 사용되는 플래그
- 송신기가 데이터 보내기를 끝마침
종결요청: FIN=1
종결응답: FIN=1, ACK=1
- 윈도우 크기(Window size, 16 bits)
- 응답 확인을 받기 전에 보낼 수 있는 데이터의 양을 뜻함.
- 윈도우 크기가 16bit이므로 최대 65535 Bytes(2^16)까지임.
- 흐름제어를 위해 사용하는 16비트 필드이며 TCP 흐름제어를 위해 통신의 상대편에게 자신의 버퍼 여유용량 크기를 지- 속적으로 통보하여 주는 기능을 함.
- 수신측에 의해 능동적으로 흐름제어를 수행하게 됨.
- 검사합(Checksum, 16 bits)
- 각 TCP 세그먼트 변형 여부 확인
- IP와 달리 전체 세그먼트의 변형 여부를 나타낸다.
- 실제 헤더 이외에도 발신, 수신 IP 주소 및 프로토콜 ID등을 추가하여 체크섬을 계산함.
체크섬 계상 대상: (가상 헤더 + 실제 헤더 + 데이터 + 패딩)
가상 헤더: 발신 IP + 수신 IP + zero(8bits) + 프로토콜 ID + UDP/TCP 길이
실제 헤더: 실제 TCP/UDP 헤더
- 긴급포인터(Urgent Pointer, 16 bits)
- 세그먼트가 긴급 데이터를 포함하고 있을 때.
- 제어 플래그가 1로 설정시 16비트 필드값과 순차번호를 더하면 긴급 데이터 바이트 번호, 위치를 얻을 수 있음.
- TCP 세그먼트에 포함된 긴급 데이터의 마지막 바이트에 대한 일련번호.
- 현재 일련번호(sequence number)로 부터 긴급 데이터까지의 바이트 오프셋(offset).
- 해당 세그먼트의 일련번호에 urgent point 값을 더해 긴급 데이터의 끝을 알수 있음.
- 옵션(Options)
- 최대 40바이트까지 옵션 데이터 포함 가능.
- TCP MSS 옵션을 협상하거나, 타임스탬프 옵션 정의 등
'Security > Network Security' 카테고리의 다른 글
Port 번호 체계 (0) | 2017.10.19 |
---|---|
UDP 패킷 분석 (0) | 2017.10.19 |
MTU ( Maximum Transfer Unit, 최대 전송 단위 ) (0) | 2017.10.18 |
IP Header 분석 (0) | 2017.10.18 |
ICMP 패킷 분석 (0) | 2017.10.18 |