티스토리 뷰
TCP (Transmission Control Protocol)
TCP는 인터넷에서 데이터를 신뢰성 있게 전달하기 위해 사용되는 프로토콜입니다. TCP는 연결 지향적이며, 데이터를 세그먼트 단위로 나누어 전송하고 이를 재조합하여 애플리케이션에 전달합니다. 주로 HTTP/HTTPS, 이메일, 파일 전송 등 신뢰성이 중요한 애플리케이션에서 사용됩니다.
TCP의 주요 특징
- 신뢰성 있는 데이터 전송: 데이터 손실이나 오류 발생 시 재전송을 통해 신뢰성을 보장합니다.
- 순서 보장: 데이터가 전송된 순서대로 수신될 수 있도록 관리합니다.
- 흐름 제어(Flow Control): 송신자와 수신자 간의 데이터 전송 속도를 조절하여 데이터 손실을 방지합니다.
- 혼잡 제어(Congestion Control): 네트워크 혼잡을 감지하고 조절하여 안정적인 데이터 전송을 유지합니다.
3-Way Handshake
TCP는 연결을 설정하기 위해 3-Way Handshake라는 과정을 사용합니다. 이 과정은 신뢰성 있는 연결을 설정하기 위한 초기 단계입니다.
- SYN (Synchronize): 클라이언트가 서버에 연결 요청을 보냅니다.
- SYN-ACK (Synchronize-Acknowledge): 서버는 요청을 수락하며, 클라이언트에게 응답합니다.
- ACK (Acknowledge): 클라이언트가 서버의 응답을 확인하고 연결을 완료합니다.
이 과정을 통해 클라이언트와 서버는 서로 데이터를 주고받을 준비가 되었음을 확인합니다.
4-Way Handshake
TCP 연결을 종료할 때는 4-Way Handshake를 사용합니다. 이 과정은 데이터를 신뢰성 있게 정리하고 연결을 종료하기 위해 사용됩니다.
- FIN: 클라이언트가 연결 종료를 요청합니다.
- ACK: 서버가 요청을 수락하고 확인 응답을 보냅니다.
- FIN: 서버도 연결 종료를 요청합니다.
- ACK: 클라이언트가 서버의 요청을 확인하고 연결 종료를 완료합니다.
4-Way Handshake는 양쪽 모두 안전하게 연결을 종료할 수 있도록 설계되었습니다.
TCP 빠른 재전송 (Fast Retransmit)
TCP는 패킷 손실을 감지하기 위해 중복 ACK(Acknowledgment)를 사용합니다. 특정 세그먼트가 손실되었을 때, 수신자는 손실된 세그먼트 이후의 데이터를 받을 때마다 동일한 ACK를 반복적으로 보냅니다.
- Fast Retransmit는 중복 ACK가 3번 이상 수신되면 타이머가 만료되기 전에 해당 세그먼트를 즉시 재전송하는 기법입니다.
- 이는 데이터 전송의 지연 시간을 줄이고, 네트워크의 효율성을 높이는 데 기여합니다.
Congestion Control (혼잡 제어)
혼잡 제어는 네트워크가 과부하 상태에 빠지지 않도록 데이터를 전송하는 속도를 조절하는 메커니즘입니다. TCP는 다음과 같은 주요 알고리즘을 사용하여 혼잡을 제어합니다.
- Slow Start: 초기에는 작은 윈도우 크기로 시작하고, 매 RTT마다 크기를 지수적으로 증가시킵니다.
- Congestion Avoidance: 네트워크 혼잡이 감지되면 윈도우 크기를 선형적으로 증가시킵니다.
- Fast Retransmit & Fast Recovery: 패킷 손실 시 혼잡 윈도우 크기를 절반으로 줄이고, 느리게 복구합니다.
TCP의 혼잡 제어는 네트워크 안정성과 성능을 유지하는 데 중요한 역할을 합니다.
Flow Control (흐름 제어)
흐름 제어는 송신자가 수신자의 처리 속도를 초과하지 않도록 데이터를 조절하는 메커니즘입니다. TCP는 **수신 윈도우(Receive Window)**를 통해 흐름 제어를 수행합니다.
- Receive Window: 수신자가 처리할 수 있는 데이터의 양을 나타냅니다. 수신자는 이 값을 송신자에게 알려주어 데이터 전송 속도를 조절합니다.
- 흐름 제어를 통해 데이터 손실 및 네트워크 병목 현상을 방지할 수 있습니다.
'👩🏻💻개발공부 > 네트워크' 카테고리의 다른 글
서브넷 (0) | 2025.01.30 |
---|---|
HTTP 프로토콜 (0) | 2025.01.10 |
네트워크 스터디 1주차 (3) | 2025.01.03 |
프로토콜 (0) | 2025.01.03 |
네트워크가 데이터를 전송하는 방식 - 패킷 교환, 회선 교환 (0) | 2025.01.03 |
- Total
- Today
- Yesterday
- JavaScript
- 혼공단
- Process
- 백준
- SQL
- 개발일지
- Signal
- googleapis
- 리눅스
- 스페인
- 교환학생
- 깃 예제
- 공룡책
- nodejs
- JS
- 해커톤
- AWS
- 혼공단 9기
- C++
- 자바스크립트
- 스페인 교환학생
- MySQL
- 혼공
- 프로젝트
- 운영체제
- 개발
- 백엔드 개발
- 혼공단 SQL
- 혼공학습단
- Linux
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |