[3주차] TCP

devyumi·2023년 9월 27일
0

Network

목록 보기
7/11

TCP

연결형 서비스를 지원하는 프로토콜

ㆍ 패킷의 신뢰성을 보장함

순서대로, 오류 없이 패킷을 전달하는 것에 중점

ㆍ Transport Layer에 해당하는 프로토콜


TCP 특징

1. 높은 신뢰성 보장
ㆍ 패킷 순서 보장, 데이터 손실 없도록 함

2. 연결형, 양방향 서비스
ㆍ 3, 4-way-handshake 연결 사용
ㆍ 양방향으로 데이터 전송

3. 흐름제어, 혼잡제어 기능 사용
ㆍ 데이터 손실을 최소화하기 위해 사용

4. 데이터 안정성이 보장되는 서비스에 사용
ㆍ HTTP, Email, File 등


TCP 3-way-handshake

ㆍ 클라이언트와 서버가 TCP 통신을 하기 위해 세션을 연결을 하는 과정
ㆍ 3개의 신호를 주고 받음

과정

  1. 클라이언트가 서버에게 접속을 요청하는 SYN을 보냄
  1. 서버는 클라이언트에게 SYN, ACK 플래그를 보냄
  1. 클라이언트는 SYN, ACK 상태를 확인한 뒤 서버에게 ACK을 보냄 -> 연결 성공

더 알아보기
플래그 정보
ㆍ SYN: 연결 설정, 세션을 연결하겠다는 뜻
ㆍ ACK: 응답 확인, 패킷을 받았다는 뜻
ㆍ FIN: 연결 해제, 더 이상 전송할 데이터가 없다는 뜻


TCP 4-way-handshake

ㆍ 클라이언트와 서버가 세션을 종료하기 위한 과정
ㆍ 4개의 신호를 주고 받음

과정

  1. 클라이언트가 서버에게 FIN 전송
  1. 서버는 ACK을 먼저 보내고 자신의 통신이 끝날 때까지 기다림
  1. 서버가 통신이 끝나면 클라이언트에게 FIN을 전송함
  1. 클라이언트가 해지 준비가 되면 서버에게 ACK을 보냄




혼잡 제어 (Congestion control)

ㆍ 네트워크 내의 데이터 속도를 조절하는 기능
ㆍ 네트워크 문제가 발생했을 경우 수신측에서 데이터를 못 받았을 때를 대비함


1. AIMD (합 증가 곱 감소)

ㆍ 윈도우 크기를 1씩 증가하며 전송하는 방법
ㆍ 초기에 패킷 전송 속도를 올리는데 시간이 오래 걸림

과정

ㆍ 네트워크 양호: 윈도우 크기를 +1
ㆍ 네트워크 혼잡: 윈도우 크기를 /2


2. Slow Strat (느린 시작)

ㆍ 윈도우 크기를 n²로 증가하며 전송하는 방법 (1, 2, 4, 8, 16, ...)
ㆍ 후반부로 갈수록 윈도우 크기가 매우 빠르게 증함

과정

ㆍ 네트워크 양호: 윈도우 크기를 *2
ㆍ 네트워크 혼잡: 윈도우 크기를 -1


3. Fast Retransmit (빠른 재전송)

ㆍ 송신자 측이 중복된 ACK을 3번 받았을 경우 패킷을 재전송 하는 방법
ㆍ Ex) 송신자가 1~6 패킷을 전송했지만, 수신자가 3번 패킷을 감지 못하여 2번 패킷에 대한 ACK 응답을 세 번 보냄 -> 송신자가 패킷 2번 이후 이상이 생겼다고 판단하여 3번 패킷 재전송


4. Fast Recovery (빠른 회복)

ㆍ 네트워크가 혼잡한 상황이 되었을 때 윈도우 크기를 /2로 줄이는 방법
ㆍ 혼잡 상황을 한 번 겪은 이후부터는 AIMD 방식으로 동작함


TCP 혼잡 제어 모델

Slow Start Threshold(ssthresh): Slow Start의 한계점
Timeout: 송신자가 보낸 데이터가 유실 되었을 경우, ACK 신호가 유실 되었을 경우
3 ACK Duplicate = Fast Retransmit


1. TCP Tahoe

1) Slow Start로 시작

2) ssthresh 도달 -> 이후부터 AIMD 사용

3) 3 ACK Duplicated or Timeout 발생 -> ssthresh: 윈도우 크기의 1/2 & 윈도우: 1

4) 다시 Slow Start 시작


2. TCP Reno

1) Slow Start로 시작

2) ssthresh 도달 -> 이후부터 AIMD 사용

3) 3 ACK Duplicated 발생 -> ssthresh: 줄인 윈도우 값 & 윈도우 크기: 1/2

4) Timeout 발생 -> ssthresh: 그대로 & 윈도우: 1


흐름 제어 (Flow control)

ㆍ 송수신 측 사이의 데이터 속도를 조절하는 기능
ㆍ 수신자가 처리할 수 있는 데이터 양이 초과되었을 때를 대비함
ㆍ 송신자의 속도가 빠를 경우 문제가 발생함


1. Stop and Wait (전송 후 대기 프로토콜)

ㆍ 송신자가 한 개의 패킷을 전송하면 수신자로부터 응답을 받을 때까지 기다리는 방식

2. Sliding Window (슬라이딩 윈도우 프로토콜)

ㆍ 윈도우의 크기를 동적으로 조절하며 패킷 전송을 가능하게 하는 프로토콜




참고

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

profile
Web Back-end Junior Developer

0개의 댓글