안녕하세요!
할배즈..입니다.
오늘은 TCP 패킷에 대해 알아보겠습니다.
TCP란?
TCP(Transmission Control Protocol)는 인터넷에서 가장 널리 사용되는 전송 계층 프로토콜 중 하나로, 신뢰성 있는 데이터 전송을 보장합니다. 이 글을 통해 TCP 패킷의 구조와 작동 원리를 이해하면, 네트워크 통신의 이해도를 높일 수 있습니다.
TCP 패킷의 구조
TCP 패킷은 헤더와 데이터로 구성되어 있습니다. 헤더는 패킷의 메타데이터를 담고 있으며, 데이터 부분은 실제로 전송하려는 정보를 포함하고 있습니다.
TCP 헤더
Source Port와 Destination Port: 각각 송신자와 수신자의 포트 번호를 나타냅니다. 이 번호를 통해 패킷이 어디에서 오고, 어디로 가는지를 식별합니다.
Sequence Number와 Acknowledgement Number: TCP는 데이터를 순차적으로 전송하며, 이를 위해 각 패킷에 순서 번호를 부여합니다. Sequence Number는 보낸 데이터의 순서를 나타내고, Acknowledgement Number는 수신자가 다음에 받기를 기대하는 데이터의 순서 번호를 나타냅니다.
Data Offset: TCP 헤더의 크기를 나타냅니다. 이 필드를 통해 데이터 부분이 어디서 시작하는지를 알 수 있습니다.
Control Flags: TCP 연결의 설정과 관리에 사용되는 플래그들입니다. 예를 들어, SYN 플래그는 연결 설정을 위해 사용되고, FIN 플래그는 연결 종료를 위해 사용됩니다.
Window Size: 수신자가 현재 받을 수 있는 데이터의 양을 나타냅니다. 이를 통해 송신자는 수신자의 혼잡 상황을 파악하고, 데이터 전송 속도를 조절할 수 있습니다.
TCP 데이터
TCP 데이터는 헤더 뒤에 위치하며, 실제로 전송하고자 하는 정보를 담고 있습니다. 데이터의 크기는 TCP 헤더의 Data Offset 필드를 통해 알 수 있습니다.
TCP 패킷의 작동 원리
TCP 패킷은 TCP 연결 설정, 데이터 전송, 연결 종료 등의 과정에서 사용됩니다
TCP 연결 설정
TCP 연결은 3-way handshake 과정을 통해 설정됩니다. 이 과정에서는 SYN, SYN-ACK, ACK 플래그를 가진 TCP 패킷이 사용됩니다.
1. 송신자는 SYN 플래그가 설정된 TCP 패킷을 수신자에게 보냅니다. 이 패킷은 "연결을 설정하고 싶다"는 송신자의 의도를 나타냅니다.
2. 수신자는 SYN-ACK 플래그가 설정된 TCP 패킷을 송신자에게 보냅니다. 이 패킷은 "연결 요청을 받았고, 연결을 수락한다"는 수신자의 의도를 나타냅니다.
3. 송신자는 ACK 플래그가 설정된 TCP 패킷을 수신자에게 보냅니다. 이 패킷은 "연결 수락을 확인했다"는 송신자의 의도를 나타냅니다.
이렇게 3-way handshake가 완료되면, TCP 연결이 설정되고 데이터 전송이 가능해집니다.
TCP 연결 종료
TCP 연결 종료는 4-way handshake 과정을 통해 이루어집니다. 이 과정에서는 FIN, ACK 플래그를 가진 TCP 패킷이 사용됩니다.
1. 송신자는 FIN 플래그가 설정된 TCP 패킷을 수신자에게 보냅니다. 이 패킷은 "더 이상 보낼 데이터가 없으므로 연결을 종료하고 싶다"는 송신자의 의도를 나타냅니다.
2. 수신자는 ACK 플래그가 설정된 TCP 패킷을 송신자에게 보냅니다. 이 패킷은 "연결 종료 요청을 받았다"는 수신자의 의도를 나타냅니다.
3. 수신자는 FIN 플래그가 설정된 TCP 패킷을 송신자에게 보냅니다. 이 패킷은 "나 역시 더 이상 보낼 데이터가 없으므로 연결을 종료하고 싶다"는 수신자의 의도를 나타냅니다.
4. 송신자는 ACK 플래그가 설정된 TCP 패킷을 수신자에게 보냅니다. 이 패킷은 "연결 종료를 확인했다"는 송신자의 의도를 나타냅니다.
이렇게 4-way handshake가 완료되면, TCP 연결이 종료되고 더 이상의 데이터 전송이 불가능해집니다.
TCP 패킷은 인터넷에서 데이터를 신뢰성 있게 전송하는 데 필수적인 요소입니다. TCP 헤더의 다양한 필드들은 패킷의 출발지와 목적지, 데이터의 순서, 연결의 상태 등을 관리하며, 이를 통해 패킷 손실 없이 데이터를 전송할 수 있습니다.
감사합니다
'Network' 카테고리의 다른 글
TCP와 UDP의 차이(2) (0) | 2023.11.03 |
---|---|
TCP와 UDP의 차이(1) (1) | 2023.11.03 |
3계층 구조 (3-Tier) (0) | 2023.10.27 |
3-way Handshake & 4-way Handshake (1) | 2023.10.19 |
[Network] WireShark로 tcpdump 파일 패킷 분석하기 (1) | 2023.09.18 |
댓글