■ TCP 프로토콜
전송 제어 프로토콜(Transmission Control Protocol, TCP)은 인터넷에 연결된 컴퓨터에서 실행되는 프로그램 간에 통신을 안정적으로, 순서대로, 에러없이 교환할 수 있게 한다. TCP 프로토콜은 연결 지향형 프로토콜로서 연결 후 데이터를 전송하는 프로토콜이다. 이 프로토콜은 잘 받았는지 응답을 받는다(확인한다). TCP의 안정성을 필요로 하지 않는 애플리케이션의 경우 일반적으로 TCP 대신 UDP 프로토콜을 사용한다. TCP는 UDP보다 안전하지만 느리다.
■ TCP 프로토콜 구조
일반적인 길이는 20바이트이지만 옵션이 붙으면 최대 60바이트까지 가능하다.
- Source Port : 출발지 포트 번호, 2바이트
- Destination Port : 목적지 포트 번호, 2바이트
- Sequence Number : 송신 데이터 순서 번호, 4바이트
- Acknowledgment Number : 상대방이 다음에 전송할 순서 번호, 4바이트
- Offset : 헤더의 길이를 의미, 4비트
- Reserved : 예약된 필드로 사용x, 6비트
- TCP Flags : (U A P R S F), TCP가 통신하면서 상대방과의 연결을 확인하는데 그 때 나타내는 값, 6비트
- Window : 수신버퍼의 여유 공간 크기를 의미, 2바이트
- Checksum : 헤더를 포함한 전체 세그먼트에 대한 오류를 검사하기 위한 필드, 2바이트
- Urgent Pointer : 세그먼트가 긴급 데이터를 포함하고 있는 경우 사용되는 필드로 긴급 데이터 위치값 있음, 2바이트
- TCP Options : 최대 40바이트
■ TCP 플래그
- U : URG, 긴급 데이터 설정
- A : ACK, 수신 확인 응답 설정
- P : PSH, 송수신 버퍼에 있는 데이터를 즉시 처리
- R : RST, 연결 중단(강제종료)
- S : SYN, 연결 설정
- F : FIN, 연결 종료
■ TCP를 이용한 통신과정
● 연결 수립 과정 (3Way Handshake)
TCP를 이용한 데이터 통신을 할 때 프로세스와 프로세스를 연결하기 위해 가장 먼저 수행되는 과정이 있다.
- 3Way Handshake
1. 클라이언트가 서버에게 요청 패킷을 보낸다.
2. 서버가 클라이언트의 요청을 받아들이는 패킷을 보낸다.
3. 클라이언트는 이를 최종적으로 수락하는 패킷을 보낸다.
● 데이터 송수신 과정
TCP를 이용해서 데이터를 통신할 때 단순히 TCP 패킷만을 캡슐화해서 통신하는 것이 아니라, 페이로드를 포함한 패킷을 주고 받을 때의 일정한 규칙이 있다.
1. 보낸 쪽에서 또 보낼 때는 SEQ 번호와 ACK 번호가 그대로다.
2. 받는 쪽에서 SEQ 번호는 받은 ACK 번호가 된다.
3. 받는 쪽에서 ACK 번호는 받은 SEQ 번호 + 데이터 크기
■ TCP 상태전이도
패킷을 주고 받으면서 Sequence, Acknowledge Number가 바뀌는데, 이것들 말고 TCP의 연결상태 또한 바뀐다.
- Listen 상태 : 포트 번호를 서버 쪽에서 프로그램이 사용하고 있는 상태(클라인어트가 요청하면 서버가 응답할 수 있는 상태)
- Established 상태 : 연결이 서로 수립된 상태
(1) 클라이언트에서 서버에 패킷 만들어서 보내면, 클라이언트는 ACTIVE OPEN이고 동시에 SYN SENT 상태가 된다. 서버는 일단 LISTENING 상태여야 받을 수 있고, 받으면 SYN_RECEIVED 상태가 된다.
(2) 서버가 패킷을 만들어서 클라이언트로 보내고, 이걸 받은 클라이언트는 ACT 패킷을 보내게 되면 클라이언트와 서버는 모두 ESTABLISHED 상태가 된다.
'프로그래밍 > 네트워크' 카테고리의 다른 글
[네트워크] OSI 모델 7계층_HTTP 프로토콜 (0) | 2024.06.25 |
---|---|
[네트워크] NAT와 포트포워딩 (0) | 2024.06.25 |
[네트워크] OSI 4계층 모델_TCP, UDP 프로토콜 (0) | 2024.06.24 |
[네트워크] OSI 모델 3계층_IP 프로토콜 (0) | 2024.06.24 |
[네트워크] OSI 모델 3계층_ARP 프로토콜 (0) | 2024.06.24 |