SH1R0_HACKER
TCP Header (TCP 헤더) 본문
< 참고 사이트 >
evan-moon.github.io/2019/11/10/header-of-tcp/
en.wikipedia.org/wiki/Transmission_Control_Protocol
TCP (Transmission Control Protocol)은 다른 컴퓨터와 데이터 통신을 하기 위한 규약(프로토콜)의 일종입니다.
OSI 7계층에서 4계층(Transport - 전송)에 속해 있습니다. 종단간(end to end)통신을 다루는 최하위 계층으로 종단간 신뢰성 있고 효율적인 데이터를 전송하며, 오류 검출 및 복구, 흐름제어, 중복검사 등을 수행합니다.
◆ Source Port : 출발지 포트 번호 (16비트)
◆ Destination Port : 목적지 포트 번호 (16비트)
◆ Sequence Number : 바이트 단위로 구분되어 순서화되는 번호
이를 통해 TCP에서는 신뢰성 (3wayHandshake) 및 흐름제어 (Sliding Window) 기능을 제공함
◆ Acknowledgment Number : 확인응답번호 / 승인번호
수신하기를 기대하는 다음 바이트 번호 = (마지막 수신 성공 순서번호 + 1)
◆ Offset : 헤더 길이 필드 (4비트)
TCP 헤더 길이를 4바이트(32비트) 단위로 표시한다.
◆ Reserved : 예약된 필드
미래를 위해 예약된 필드로, 모두 0으로 채워져야 한다.
◆ Flags (NS, CWR, ECE, URG, ACK, PSH, PST, SYN, FIN) : 비트 플래그
현재 세그먼트의 속성을 나타낸다.
기존에는 6개의 플래그만을 사용했지만, 혼잡제어 기능의 향상을 위해 Reserved 필드를 사용하여
NS, CWR, ECE 플래그가 추가되었다.
아래는 기존에 존재하던 6개의 플래그이다.
필드 |
의미 |
URG (Urgent Pointer - 긴급 포인터) |
필드에 값이 채워져 있음을 알리는 플래그. |
ACK (AcknAcknowledgment - 승인 번호) |
필드에 값이 채워져있음을 알리는 플래그. |
PSH (Push - 밀어넣기) |
수신 측에게 이 데이터를 최대한 빠르게 응용프로그램에게 전달해달라는 플래그이다. 이 플래그가 0이라면 수신 측은 자신의 버퍼가 다 채워질 때까지 기다린다. 즉, 이 플래그가 1이라면 이 세그먼트 이후에 더 이상 연결된 세그먼트가 없음을 의미하기도 한다. |
RST (Reset - 초기화) |
이미 연결이 확립되어 ESTABLISHED 상태인 상대방에게 연결을 강제로 리셋해달라는 요청의 의미이다. |
SYN (Synchronize - 동기화) |
상대방과 연결을 생성할 때, 시퀀스 번호의 동기화를 맞추기 위한 세그먼트임을 의미한다. |
FIN (Finish - 종료) |
상대방과 연결을 종료하고 싶다는 요청인 세그먼트임을 의미한다. |
Reserved (예약) 필드를 사용하여 새롭게 추가된 NS, CWR, ECE 플래그는 네트워크의 명시적 혼잡통보(Explicit Congestion Notification, ECN)을 위한 플래그이다.
ECN을 사용하지 않던 기존의 네트워크 혼잡 상황 인지 방법은 타임아웃을 이용한 방법이었다. 그러나 처리 속도에 민감한 어플리케이션에서는 이런 대기 시간 조차 아깝기 때문에, 송신자와 수신자에게 네트워크의 혼잡 상황을 명시적으로 알리기 위한 특별한 매커니즘이 필요하게 되었는데, 이것이 바로 ECN이다.
이때 CWR, ECE, ECT, CE 플래그를 사용하여 상대방에게 혼잡 상태를 알려줄 수 있는데, 이 중 CWR, ECE는 TCP 헤더에 존재하고 ECT, CE는 IP 헤더에 존재한다.
필드 |
의미 |
NS |
ECN에서 사용하는 CWR, ECE 필드가 실수나 악의적으로 은폐되는 경우를 방어하기 위해 RFC 3540에서 추가된 필드 |
ECE (ECN Echo) |
해당 필드가 1이면서, SYN 플래그가 1일 때는 ECN을 사용한다고 상대방에게 알리는 의미. SYN 플래그가 0이라면 네트워크가 혼잡하니 세그먼트 윈도우의 크기를 줄여달라는 요청의 의미이다. |
CWR |
이미 ECE 플래그를 받아서, 전송하는 세그먼트 윈도우의 크기를 줄였다는 의미이다. |
◆ Windows Size : 흐름제어를 위해 사용하는 16비트 필드
한번에 전송할 수 있는 데이터의 양을 의미하는 값을 담는다.
2^16 = 65,535 bytes = 64KB 만큼의 값을 표현할 수 있다.
◆ Checksum : 데이터를 송신하는 중에 발생할 수 있는 오류를 검출하기 위한 값
◆ Urgent Pointer : 긴급 포인터
URG 플래그가 1이라면 수신 측은 이 포인터가 가르키고 있는 데이터를 우선 처리한다.
전송하는 데이터 중에서 긴급히 전달해야 할 내용이 있을 경우에 사용한다.
긴급한 데이터는 다른 데이터에 비해 우선순위가 높아야 한다.
'Forensic (STUDY) > 네트워크' 카테고리의 다른 글
포트 스캔 (Port Scan) (0) | 2021.02.24 |
---|---|
TCP 연결 설정 및 해제 (3-way handshake, 4-way handshake) (0) | 2021.02.19 |
Wireshark 사용법 (0) | 2020.10.22 |