티스토리 뷰

👩🏻‍💻개발공부/네트워크

TCP

리미32 2025. 1. 23. 23:53
728x90

TCP (Transmission Control Protocol)

TCP는 인터넷에서 데이터를 신뢰성 있게 전달하기 위해 사용되는 프로토콜입니다. TCP는 연결 지향적이며, 데이터를 세그먼트 단위로 나누어 전송하고 이를 재조합하여 애플리케이션에 전달합니다. 주로 HTTP/HTTPS, 이메일, 파일 전송 등 신뢰성이 중요한 애플리케이션에서 사용됩니다.

TCP의 주요 특징

  1. 신뢰성 있는 데이터 전송: 데이터 손실이나 오류 발생 시 재전송을 통해 신뢰성을 보장합니다.
  2. 순서 보장: 데이터가 전송된 순서대로 수신될 수 있도록 관리합니다.
  3. 흐름 제어(Flow Control): 송신자와 수신자 간의 데이터 전송 속도를 조절하여 데이터 손실을 방지합니다.
  4. 혼잡 제어(Congestion Control): 네트워크 혼잡을 감지하고 조절하여 안정적인 데이터 전송을 유지합니다.

3-Way Handshake

TCP는 연결을 설정하기 위해 3-Way Handshake라는 과정을 사용합니다. 이 과정은 신뢰성 있는 연결을 설정하기 위한 초기 단계입니다.

  1. SYN (Synchronize): 클라이언트가 서버에 연결 요청을 보냅니다.
  2. SYN-ACK (Synchronize-Acknowledge): 서버는 요청을 수락하며, 클라이언트에게 응답합니다.
  3. ACK (Acknowledge): 클라이언트가 서버의 응답을 확인하고 연결을 완료합니다.

이 과정을 통해 클라이언트와 서버는 서로 데이터를 주고받을 준비가 되었음을 확인합니다.


4-Way Handshake

TCP 연결을 종료할 때는 4-Way Handshake를 사용합니다. 이 과정은 데이터를 신뢰성 있게 정리하고 연결을 종료하기 위해 사용됩니다.

  1. FIN: 클라이언트가 연결 종료를 요청합니다.
  2. ACK: 서버가 요청을 수락하고 확인 응답을 보냅니다.
  3. FIN: 서버도 연결 종료를 요청합니다.
  4. ACK: 클라이언트가 서버의 요청을 확인하고 연결 종료를 완료합니다.

4-Way Handshake는 양쪽 모두 안전하게 연결을 종료할 수 있도록 설계되었습니다.


TCP 빠른 재전송 (Fast Retransmit)

TCP는 패킷 손실을 감지하기 위해 중복 ACK(Acknowledgment)를 사용합니다. 특정 세그먼트가 손실되었을 때, 수신자는 손실된 세그먼트 이후의 데이터를 받을 때마다 동일한 ACK를 반복적으로 보냅니다.

  • Fast Retransmit는 중복 ACK가 3번 이상 수신되면 타이머가 만료되기 전에 해당 세그먼트를 즉시 재전송하는 기법입니다.
  • 이는 데이터 전송의 지연 시간을 줄이고, 네트워크의 효율성을 높이는 데 기여합니다.

Congestion Control (혼잡 제어)

혼잡 제어는 네트워크가 과부하 상태에 빠지지 않도록 데이터를 전송하는 속도를 조절하는 메커니즘입니다. TCP는 다음과 같은 주요 알고리즘을 사용하여 혼잡을 제어합니다.

  1. Slow Start: 초기에는 작은 윈도우 크기로 시작하고, 매 RTT마다 크기를 지수적으로 증가시킵니다.
  2. Congestion Avoidance: 네트워크 혼잡이 감지되면 윈도우 크기를 선형적으로 증가시킵니다.
  3. Fast Retransmit & Fast Recovery: 패킷 손실 시 혼잡 윈도우 크기를 절반으로 줄이고, 느리게 복구합니다.

TCP의 혼잡 제어는 네트워크 안정성과 성능을 유지하는 데 중요한 역할을 합니다.


Flow Control (흐름 제어)

흐름 제어는 송신자가 수신자의 처리 속도를 초과하지 않도록 데이터를 조절하는 메커니즘입니다. TCP는 **수신 윈도우(Receive Window)**를 통해 흐름 제어를 수행합니다.

  • Receive Window: 수신자가 처리할 수 있는 데이터의 양을 나타냅니다. 수신자는 이 값을 송신자에게 알려주어 데이터 전송 속도를 조절합니다.
  • 흐름 제어를 통해 데이터 손실 및 네트워크 병목 현상을 방지할 수 있습니다.
728x90

'👩🏻‍💻개발공부 > 네트워크' 카테고리의 다른 글

서브넷  (0) 2025.01.30
HTTP 프로토콜  (0) 2025.01.10
네트워크 스터디 1주차  (3) 2025.01.03
프로토콜  (0) 2025.01.03
네트워크가 데이터를 전송하는 방식 - 패킷 교환, 회선 교환  (0) 2025.01.03
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함