네트워크

[네트워크] UDP와 TCP

생선묵김치찌개 2025. 4. 3. 20:36

UDP

- 비연결적 프로토콜, 연결과 연결 종료가 없다. (3 way Handshake 같은거 안함)

UDP 통신 방식

- 데이터 순서가 중간에 바뀐다고 해도 정렬 X

- 소켓을 활용해 IP와 PORT를 기반으로 데이터를 전송

- 헤더가 작아서 오버헤드 적음

    • Source port : 시작 포트
    • Destination port : 도착지 포트
    • Length : 길이
    • Checksum : 오류 검출 →  데이터가 중간에 손상되지 않았는지 확인하는 데 사용

 

장점

- 연결하지 않고 보내니까 빠르다

- 오버 헤드가 적음

- 1:1, 1:N, N:N 통신이 가능

 

단점

- 신뢰성이 낮다 (패킷 손실되어도 재전송 x, 패킷 순서 보장 x)

 

신뢰적 데이터 전송

전송 후 대기 프로토콜

- 데이터를 전송 후 수신자로부터 ACK를 받을때 까지 대기하는 방식 

 

 

파이프라인 프로토콜

- 요청에 대한 응답을 기다리지 않고, 다음 요청을 송신하는 기능

 

- 한계 : 요청과 응답의 교환을 병렬 처리할 수 없기 때문에 서버는 요청을 받은 순서대로 응답을 반환해야 함

 

 

Go Back N

- 패킷을 전송할 때 수신측에서 데이터를 잘못 받거나 못 받을 경우 그 패킷 번호부터 다시 재전송

- 구현이 단순 하지만 멀쩡한 데이터도 폐기 하기 때문에 비효율

 

Selective Repeat

- 잘못받은 패킷 번호만 다시 재전송

- 프레임 재배열과 같은 추가 로직 필요 하지만 멀쩡한 데이터 사용 가능

 

 

 

TCP

- 애플리케이션 사이에서 안전하게 데이터를 통신하는 규약

- 데이터를 전송하기 전에 데이터 전송을 위한 연결을 만드는 연결지향 프로토콜

- 흐름 제어 : 수신자의 처리 속도에 맞춰 송신자가 전송량을 조절 (송신자 ↔ 수신자 간)

- 혼잡 제어 : 네트워크가 과부하되지 않게 전송량을 조절 (송신자 ↔ 네트워크 전체)

- 순서를 보장

 

TCP 헤더

 

  • Sequence Number: 현재 보내는 바이트의 순서
  • ACK Number: 다음에 기대하는 바이트 번호
  • Flags: SYN, ACK, FIN, RST, PSH, URG 등
  • Window Size: 흐름 제어용, 서버가 현재 수신 가능한 버퍼 크기
  • Checksum: 에러 검사

 

3 way hand shake : 연결 시작

- 클라이언트 - 서버가 연결을 시작할때 하는 통신

1. 클라이언트 → 서버: SYN (요청)

2. 서버 → 클라이언트: SYN + ACK (응답 + 요청)

3. 클라이언트 → 서버: ACK (응답)
→ 이 과정을 거쳐 연결을 확립함.

 

 

4 way hand shake : 연결 종료

- 클라이언트 - 서버가 연결을 종료할때 하는 통신

1. FIN: 종료 요청

2. ACK: 확인

3. FIN: 상대방도 종료

4. ACK: 종료 확인

 

 

 

TCP 빠른 재전송

- 중복된 ACK이 일정 횟수(3회) 이상 오면 손실로 판단하고 즉시 재전송

- 수신자는 중복 ACK으로 손실 알림

 

 

 

 

출처

https://docs.tosspayments.com/resources/glossary/tcp