ㆍ 연결형 서비스를 지원하는 프로토콜
ㆍ 패킷의 신뢰성을 보장함
ㆍ 순서대로, 오류 없이 패킷을 전달하는 것에 중점
ㆍ Transport Layer에 해당하는 프로토콜
1. 높은 신뢰성 보장
ㆍ 패킷 순서 보장, 데이터 손실 없도록 함
2. 연결형, 양방향 서비스
ㆍ 3, 4-way-handshake 연결 사용
ㆍ 양방향으로 데이터 전송
3. 흐름제어, 혼잡제어 기능 사용
ㆍ 데이터 손실을 최소화하기 위해 사용
4. 데이터 안정성이 보장되는 서비스에 사용
ㆍ HTTP, Email, File 등
ㆍ 클라이언트와 서버가 TCP 통신을 하기 위해 세션을 연결을 하는 과정
ㆍ 3개의 신호를 주고 받음
과정
- 클라이언트가 서버에게 접속을 요청하는 SYN을 보냄
- 서버는 클라이언트에게 SYN, ACK 플래그를 보냄
- 클라이언트는 SYN, ACK 상태를 확인한 뒤 서버에게 ACK을 보냄 -> 연결 성공
더 알아보기
플래그 정보
ㆍ SYN: 연결 설정, 세션을 연결하겠다는 뜻
ㆍ ACK: 응답 확인, 패킷을 받았다는 뜻
ㆍ FIN: 연결 해제, 더 이상 전송할 데이터가 없다는 뜻
ㆍ 클라이언트와 서버가 세션을 종료하기 위한 과정
ㆍ 4개의 신호를 주고 받음
과정
- 클라이언트가 서버에게 FIN 전송
- 서버는 ACK을 먼저 보내고 자신의 통신이 끝날 때까지 기다림
- 서버가 통신이 끝나면 클라이언트에게 FIN을 전송함
- 클라이언트가 해지 준비가 되면 서버에게 ACK을 보냄
ㆍ 네트워크 내의 데이터 속도를 조절하는 기능
ㆍ 네트워크 문제가 발생했을 경우 수신측에서 데이터를 못 받았을 때를 대비함
ㆍ 윈도우 크기를 1씩 증가하며 전송하는 방법
ㆍ 초기에 패킷 전송 속도를 올리는데 시간이 오래 걸림
과정
ㆍ 네트워크 양호: 윈도우 크기를 +1
ㆍ 네트워크 혼잡: 윈도우 크기를 /2
ㆍ 윈도우 크기를 n²로 증가하며 전송하는 방법 (1, 2, 4, 8, 16, ...)
ㆍ 후반부로 갈수록 윈도우 크기가 매우 빠르게 증함
과정
ㆍ 네트워크 양호: 윈도우 크기를 *2
ㆍ 네트워크 혼잡: 윈도우 크기를 -1
ㆍ 송신자 측이 중복된 ACK을 3번 받았을 경우 패킷을 재전송 하는 방법
ㆍ Ex) 송신자가 1~6 패킷을 전송했지만, 수신자가 3번 패킷을 감지 못하여 2번 패킷에 대한 ACK 응답을 세 번 보냄 -> 송신자가 패킷 2번 이후 이상이 생겼다고 판단하여 3번 패킷 재전송
ㆍ 네트워크가 혼잡한 상황이 되었을 때 윈도우 크기를 /2로 줄이는 방법
ㆍ 혼잡 상황을 한 번 겪은 이후부터는 AIMD 방식으로 동작함
ㆍ Slow Start Threshold(ssthresh): Slow Start의 한계점
ㆍ Timeout: 송신자가 보낸 데이터가 유실 되었을 경우, ACK 신호가 유실 되었을 경우
ㆍ 3 ACK Duplicate = Fast Retransmit
1) Slow Start로 시작
2) ssthresh 도달 -> 이후부터 AIMD 사용
3) 3 ACK Duplicated or Timeout 발생 -> ssthresh: 윈도우 크기의 1/2 & 윈도우: 1
4) 다시 Slow Start 시작
1) Slow Start로 시작
2) ssthresh 도달 -> 이후부터 AIMD 사용
3) 3 ACK Duplicated 발생 -> ssthresh: 줄인 윈도우 값 & 윈도우 크기: 1/2
4) Timeout 발생 -> ssthresh: 그대로 & 윈도우: 1
ㆍ 송수신 측 사이의 데이터 속도를 조절하는 기능
ㆍ 수신자가 처리할 수 있는 데이터 양이 초과되었을 때를 대비함
ㆍ 송신자의 속도가 빠를 경우 문제가 발생함
ㆍ 송신자가 한 개의 패킷을 전송하면 수신자로부터 응답을 받을 때까지 기다리는 방식
ㆍ 윈도우의 크기를 동적으로 조절하며 패킷 전송을 가능하게 하는 프로토콜
참고
ㆍ https://jeongkyun-it.tistory.com/180
ㆍ https://velog.io/@averycode/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-TCPUDP%EC%99%80-3-Way-Handshake4-Way-Handshake
ㆍ https://rain-bow.tistory.com/entry/TCP-congestion-control