본문 바로가기

Computer Network study

TCP (Transmission Control Protocol)

TCP?

Transmission Control Protocol (TCP)는 인터넷 프로토콜 스위트의 핵심 프로토콜 중 하나로, 신뢰성 있는, 연결 지향적인 스트림 전송 서비스를 제공한다. TCP는 웹 브라우징, 이메일 전송, 파일 전송 등과 같은 많은 인터넷 응용 프로그램에서 사용된다.

TCP의 주요 특징과 작동 방식

1. 연결 지향적: TCP는 데이터 전송을 시작하기 전에 송신자와 수신자 간에 연결을 설정한다. 이를 위해 "3-way handshake"라는 과정을 사용한다.

2. 신뢰성 있는 전송: TCP는 데이터의 손실, 중복, 순서 변경 등을 처리하여 신뢰성 있는 데이터 전송을 보장한다. 이를 위해 확인 응답 (ACK), 재전송, 순서 제어 등의 메커니즘을 사용한다.

3. 흐름 제어: TCP는 송신자와 수신자 간의 데이터 전송 속도를 조절하여 네트워크의 혼잡을 방지하고 효율성을 높인다. 이를 위해 슬라이딩 윈도우 알고리즘을 사용한다.

4. 혼잡 제어: TCP는 네트워크 내의 혼잡 상황을 감지하고 조절하여 효율적인 데이터 전송을 유지한다. 혼잡 제어 알고리즘은 네트워크의 성능을 최적화하는 데 중요한 역할을 한다.

5. 데이터 스트림 지향: TCP는 바이트 지향적인 스트림 전송을 제공한다. 이는 데이터를 연속적인 바이트 스트림으로 취급하며, 경계가 없다.

6. 종료 절차: 데이터 전송이 완료되면, TCP "4-way handshake"를 사용하여 연결을 안전하게 종료한다.

7. 전송 순서 보장: TCP는 데이터의 순서를 보장합니다. 만약 패킷이 순서대로 도착하지 않으면, TCP는 올바른 순서로 재배열한다.

TCP는 신뢰성과 순서 보장이 중요한 응용 프로그램에 적합하다. 그러나 이러한 기능들은 추가적인 오버헤드를 발생시켜, User Datagram Protocol (UDP)와 같은 더 단순한 프로토콜에 비해 상대적으로 느릴 수 있다.

 

3 way handshake ?

3-way handshake TCP (Transmission Control Protocol)에서 연결을 설정하는 과정이다. 과정은 클라이언트와 서버 간에 신뢰성 있는 연결을 초기화하고, 양쪽이 서로에게 데이터를 전송할 준비가 되었음을 확인하는 사용된다.

3-way handshake 단계

1. SYN (Synchronize):

클라이언트서버: 클라이언트는 서버에 연결을 요청하기 위해 SYN 패킷을 전송한다. 패킷은 초기 시퀀스 번호를 포함하며, 클라이언트가 데이터 전송을 시작할 준비가 되었음을 알린다.

상태: 클라이언트는 SYN-SENT 상태로 전환된다.

2. SYN-ACK (Synchronize-Acknowledgment):

서버클라이언트: 서버는 클라이언트의 요청을 수락하고, SYN-ACK 패킷을 클라이언트에게 전송한다. 패킷은 서버의 초기 시퀀스 번호와 클라이언트의 SYN 요청에 대한 응답을 포함한다.

상태: 서버는 SYN-RECEIVED 상태로 전환된다.

3. ACK (Acknowledgment):

클라이언트서버: 클라이언트는 서버의 SYN-ACK 패킷을 확인하고, ACK 패킷을 서버에게 전송한다. 패킷은 서버가 데이터 전송을 시작할 준비가 되었음을 확인한다.

상태: 클라이언트와 서버 모두 ESTABLISHED 상태로 전환되며, 이제 양방향 데이터 전송이 가능해진다.

3-way handshake TCP 연결의 신뢰성과 효율성을 보장하는 중요한 메커니즘이다. 과정을 통해 양쪽 시스템은 서로의 존재를 확인하고, 초기 시퀀스 번호를 교환하며, 데이터 전송을 위한 파라미터를 조정한다.

 

4 way handshake ?

4-way handshake TCP (Transmission Control Protocol) 연결을 종료하는 과정이다. 연결을 안전하게 닫기 위해 이 단계가 필요하며, 데이터 전송이 완료되었음을 양쪽 시스템이 서로에게 알리는 데 사용된다.

4-way handshake의 네 단계

1. FIN (Finish):

종료를 원하는 측상대 측: 연결을 종료하고자 하는 측 (일반적으로 클라이언트) FIN 패킷을 상대측에게 전송한다. 이 패킷은 "더 이상 보낼 데이터가 없으며 연결을 닫고 싶다"는 의미이다.

상태: 종료를 원하는 측은 FIN-WAIT-1 상태로 전환된다.

2. ACK (Acknowledgment):

상대측종료를 원하는 측: 상대 측은 FIN 패킷을 받고 ACK 패킷으로 응답한다. 이는 "FIN 패킷을 받았으며, 아직 준비되지 않았으니 잠시 기다려 달라"는 의미이다.

상태: 종료를 원하는 측은 FIN-WAIT-2 상태로 전환되며, 상대 측은 CLOSE-WAIT 상태로 전환된다.

3. FIN (Finish):

상대측종료를 원하는 측: 상대 측이 준비되면 자신의 FIN 패킷을 종료를 원하는 측에게 전송한다. 이는 "이제 나도 연결을 닫을 준비가 되었다"는 의미이다.

상태: 상대 측은 LAST-ACK 상태로 전환된다.

4. ACK (Acknowledgment):

종료를 원하는 측 → 상대 측: 종료를 원하는 측은 상대측의패킷에 대한 ACK 패킷을 전송한다. 이는 "연결을 닫을 준비가 되었으며, 이제 연결을 닫을 것이다"는 의미이다.

상태: 양쪽 모두 연결을 닫고, 해당 소켓은 CLOSED 상태로 전환된다.

4-way handshake는 연결을 안전하게 종료하고, 양쪽 시스템이 연결 종료에 동의했음을 확인하는 데 중요하다. 이 과정은 양쪽이 데이터 전송을 완료했으며, 더 이상 전송할 데이터가 없음을 보장하므로, 연결을 안전하게 닫을 수 있게 해 준다.

728x90