보안 / AI / 프로그래밍
[0x433] 전송계층 ( OSI 4계층 ) - TCP 본문
[0x433] 전송계층 ( OSI 4계층 ) - TCP
DevKTW 2021. 2. 5. 00:38[0x433] 전송 계층
- 전송 계층은 TCP 프로토콜과 UDP 프로토콜을 주로 사용한다.
- TCP 프로토콜은 모든 데이터가 목적지까지 순서대로 도착하도록 보장한다.
- 패킷의 순서가 뒤바뀌어 오더라도 TCP 프로토콜은 패킷의 순서를 맞춘 후 상위 계층으로 올려 보낸다.
- 중간에 있는 패킷을 잃어버린다면, 목적지 호스트의 TCP 에서는 출발지 호스트가 손실된 패킷을 재전송 할 때까지
연결을 끊지 않고 기다린다.
- 이런 모든 기능은 TCP 플래그와 순서 번호로 값을 추적하므로 가능하다.
[0x433] 전송 계층 - TCP Header 내부 구조
# 저번 시간에 배웠던 IP Header 가 TCP Header 앞에 있는 것을 확인 할 수 있다.
ㅇ Source / Destination Port Number ( 각각 16bits )
- 출발지 / 목적지 의 포트번호를 나타낸다.
ㅇ Sequence Number ( 32 bits )
- 위에서 언급한 순서번호이다. 패킷을 순서화 하는 기능을 담당한다.
- 말그대로 패킷의 순서를 나타낸다.
ㅇ Acknowledgement Number ( 32 bits )
- 순서번호와 거의 비슷한 기능을 담당하는 승인번호이다.
ㅇ HLEN ( 4 bits )
- IP Header 의 IHL 과 동일한 기능으로, HLEN 은 4 바이트 단위로 TCP Header 의 크기를 나타낸다.
- 즉 [ HLEN * 4 = TCP Header ] 만큼의 크기가 된다.
- HLEN 이 가질 수 있는 값의 크기가 4 bits ( 10진수로는 0~15 ) 이므로, (2^4 - 1) * 4 = 60, 즉 TCP Header 의 최대 길 이는 60 Byte 임을 알 수 있다.
- 이 값을 통해서 데이터의 시작 위치를 알 수 있다. 그래서 Data Offset 이라고도 불린다.
ㅇ TCP Flags ( URG, ACK, PSH, RST, SYN, FIN )
- TCP 회선 및 데이터 관리 제어 기능을 하는 플래그 이다. 아래 표를 보면 "이런걸 나타내기 위해 있구나" 하고 이해가 될 것이다. ( 어찌보면 TCP Header의 상태, 설정값를 나타내는 느낌이랄까... )
- URG Flag :
- 송신측 상위 계층이 긴급 데이터라고 알려주면, URG 값이 1로 설정되면서, 순서에 상관없이 송신된다.
- ("나 이거 빨리 전달해줘야해, 이거 먼저 쑤셔 보내!".. 느낌)
- ACK Flag :
- (TCP Header 내부 구조에서) Ack Number 값이 세팅 되었음을 알린다. (= 패킷을 잘 받았다고 확인 메세지 보내기 )
- ACK Flag 값이 '1' 로 설정되면 Ack Number 가 포함되었음을, '0' 으로 설정되면 미포함되었음을 의미한다.
- TCP 연결 시작후 ( 3 Way HandShake 이후 ) 모든 세그먼트에는 항상 이 비트가 1로 세팅된다.
- PSH Flag :
- 버퍼링된 데이터를 가능한한 빨리 상위 계층 응용프로그램에게 전달할 것을 의미한다.
- 수신측은 버퍼가 찰 때까지 기다리지 않고 수신 즉시 버퍼링된 데이터를 응용프로그램에게 전달한다.
- (예를들어, 문자 대화할 떄 처럼 완결된 문장을 받도록 하지 않고, 통화하듯 바로 받도록 설정)
- RST Flag :
- 연결 확립 ( Established ) 된 회선에 강제 리셋 요청을 한다.
- 상황에 따라서 RST 값이 '1'인 패킷을 받은 수신측이 행동하는 방식이 다르다.
- 이에 대한 정보는 이 사이트를 참조하자.
- SYN Flag :
- TCP 연결 요청시 사용한다. ( 3 Way HandShake 에서 중요한 의미를 가진다.)
- 연결의 시작 부분에서 순서 번호를 동기화한다.
- FIN Flag :
- 송신기가 데이터 보내기를 끝마침을 알리는 Flag 이다.
ㅇ Window Size ( 16 bits )
- 원활한 TCP 통신을 위해서 송신자에게 자신의 수신 버퍼 여유용량 크기를 지속적으로 통보하는데 사용한다.
ㅇ CheckSum ( 16 bits )
- IP HEADER 와 마찬가지로 오류 검사에 사용된다.
ㅇ Urgent Pointer ( 16 bits )
- URG 패킷 데이터의 끝을 나타낸다. ( 어디까지가 긴급 메세지인가를 나타낸다. )
ㅇ Options and Padding ( 가변적 )
- IP Header 와 비슷하게 옵션 설정 필드와 4 Byte 배수의 Header 를 만들기 위한 Padding 필드이다.
[참고자료]
전송 제어 프로토콜 - 위키백과, 우리 모두의 백과사전 (wikipedia.org)
TCP Series #4: The TCP Receive Window and everything to know about it (accedian.com)
RFC 793 - Transmission Control Protocol (ietf.org)
TCP Header [정보통신기술용어해설] (ktword.co.kr)
TCP/IP를 통한 3가지 핸드세이크에 대한 설명 - Windows Server | Microsoft Docs
TCP Window Size, Checksum & Urgent Pointer - Section 5 (firewall.cx)
'Hacking :: The Art Of Exploitation > 0x400 :: 네트워킹' 카테고리의 다른 글
[0x432-0x433] [보충] TCP HEADER Window Size (1) | 2021.02.07 |
---|---|
[0x432-0x433] [보충] IP HEADER CheckSum 구하기 (0) | 2021.02.05 |
[0x432] 네트워크 계층 (OSI 3계층) / IP HEADER (0) | 2021.02.03 |
[0x431] 하위 계층 분석 - 데이터 링크 계층(OSI 2 계층) / MAC 주소 / ARP (0) | 2021.02.03 |
[0x423] 네트워크 바이트 순서 // 엔디언 (0) | 2021.01.23 |