TCP는 두 장치 간에 핸드셰이킹(Handshaking) 연결을 통해 연결 지향형 전송을 한다. 데이터가 제대로 목적지에 전송되었는지 확인하기 위해서 순서를 부여하고, 잃어버린 패킷에 대해 자동으로 복원을 한다. 대부분의 파일 전송 프로토콜은 데이터가 오류 없이 제대로 전송되었는지 확인하기 위해 TCP를 사용한다. 여기서는 TCP 패킷의 구조에 대해서만 언급 하겠다.
[그림.1 TCP 헤더 구조]
1. Source Port / Destination Port
출발지와 목적지의 서비스 포트 번호 할당된 포트 목록은
http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xml에서 확인 할 수 있다.
2. Sequence Number
이 필드는 고유한 번호를 포함하며, TCP 세그먼트(Segment)를 식별한다. 여기서 세그먼트는 TCP를 이용하여 전송되는 데이터 단위를 말한다. 수신 측에서 이 번호를 이용하여 패킷을 재 조립하며, 번호는 각 패킷에 포함된 데이터의 Byte 수 만큼 증가한다.
3. Acknowledgement Number
이 필드는 패킷 전송 / 재 조립 시 사용되며, 수신된 Sequence Number에 대한 다음에 수신할 패킷의 순차 번호를 표시한다.
4. Header Length (Data Offset)
이 필드는 TCP헤더의 길이 값을 정의한다. 일반적으로 TCP 헤더의 길이는 20Byte 이며, TCP 헤더 길이를 확장할 경우 4Byte씩 증가한다. TCP 헤더의 길이는 TCP 헤더 옵션의 사용 유무에 따라 다양하게 변하기 때문에 이 필드가 필요하다.
5. Reserved
현재 사용 되고 있지 않는 필드이다.
6. Flags Field
TCP헤더에 사용되는 플래그는 URG / ACK / PSH / RST / SYN / FIN 이 있으며, 각 플래그는 다음과 같이 사용한다.
6-1. URG (긴급 비트)
좀처럼 보이지 않는 비트 이며, 긴급한 상황이 발생했을 경우 사용된다.
6-2. ACK (확인 응답 비트)
데이터가 정상적으로 전송되었음을 알리는 비트이다.
6-3. PSH (Push 비트)
TCP 버퍼는 버퍼에 패킷이 수신되면 개별적으로 바로 전송하는 것이 아니라 적절한 크기의 패킷 크기로 전송하기 위해 자신이 일정 크기까지 유지 시킨다. PSH 플래그는 TCP 세그먼트를 발신자/수신자 측면에서 버퍼에 유지 시키지 않고 바로 보낼 때 사용한다. 시간에 매우 민감하며, 사용자 중심의 어플리케이션의 경우 PSH 플래그를 설정한다.
6-4. RST (Reset 비트)
RST 비트를 설정하면, TCP패킷은 TCP연결을 재 설정 한다. 만약 어플리케이션이 종료가 되었지만, RST를 전송하지 않은 경우TCP연결은 그대로 유지가 된다. 어플리케이션에서 오류가 생긴 경우 통신 중간에 RST를 전송하여, TCP연결을 재 설정 할 수 있다.
6-5. SYN (동기화 비트)
SYN비트는 3-Way Handshaking과정을 제의하고자 할 때 사용되며, 3-Way Handshaking과정의 첫 번째 2개의 패킷에서 설정한다.
6-6. FIN (Finish 비트)
이 비트는 데이터 전송이 완료되어, 현재 세션을 종료하고자 할 때 사용한다.
7. Windows Size
이 필드는 TCP 수신 버퍼의 최대 버퍼 크기를 표시한다. Windows Size가 0으로 설정되면, 수신자가 사용 가능한 버퍼 공간이 없음을 나타내며 최대 값은 65,535이다.
8. Check Sum
TCP 헤더와 데이터의 무결성을 보장해 주는 값이다.
9. Urgent Point
이 필드는 URG 비트가 설정된 경우에만 사용되며, URG 비트가 설정 되면 수신자는 어디서부터 읽기를 다시 수행할지를 확인하기 위해 반드시 이 필드를 검사한다.
10. Option
추가적인 기능을 사용하고자 할 때 사용한다. 아래 표는 일반적으로 볼 수 있는 TCP 옵션들이다.
다른 TCP 옵션을 확인하고 싶다면, http://www.iana.org/assignments/tcp-parameters/tcp-parameters.xml의 TCP Option Kind Numbers 부분을 참고 하기 바란다.
Kind | Length | Meaning |
0 | - | End of Option List |
1 | - | No-Operation |
2 | 4 | Maximum Segment Size |
3 | 3 | WSOPT - Window Scale |
4 | 2 | SACK Permitted |
5 | N | SACK |
[표.1 Option 값]
'Analysis' 카테고리의 다른 글
기본적인 POP Packet 분석 (0) | 2013.01.30 |
---|---|
기본적인 FTP Packet 분석 (0) | 2013.01.30 |
기본적인 DHCP Packet 분석 (0) | 2013.01.30 |
기본적인 DNS Packet 분석 (2) | 2013.01.30 |
기본적인 UDP Packet 분석 (0) | 2013.01.30 |