Computer Science 기본 지식/컴퓨터 네트워크

[네트워크] 전송 계층 (1) UDP 프로토콜 / 신뢰성있는 전송

로파이 2021. 1. 6. 10:41

전송 계층 (Transport Layer)

  • 응용 어플리케이션을 특정하여 데이터를 전송하기 위한 계층, 포트 번호를 부여
  • 다중화와 역다중화가 일어남
  • 프로토콜: TCP 프로토콜, UDP 프로토콜

※ 다중화(multiplexing): 다수의 응용에서 동시에 발생된 독립적인 세그먼트들을 하나의 전송로를 통해 전달하는 과정

※ 역다중화(demultiplexing): 수신된 다양한 세그먼트들을 전송계층에서 분리하여 해당 응용으로 전달하는 과정

 

- 포트 번호

  • 응용 타입마다 다른 포트번호를 할당, 0~65535번 포트를 사용한다.
  • 0~1024: 알려진 포트, ex) SSH(22) SMTP (25) DNS(53) HTTP(80) POP3(110) HTTPS(443)
  • 1025: 랜덤 포트

- TCP (Transmission Control Protocol)

  • 연결지향적
  • 신뢰성, 순차적 전달
  • 연결 수립, 오류제어, 흐름제어, 혼잡제어

- UDP (User Datagram Protocol)

  • 비신뢰성, 순서가 없음
  • 비연결형, 빠른 전송

- UDP 헤더

- 특징

  • 간단하고 오버헤드가 적음.
  • 혼잡/흐름 제어가 없기 때문에 빠름.
  • checksum 비트를 통한 데이터 오류 감지 기능.
  • UDP 프로토콜을 사용하는 응용 프로토콜 예: streaming, multimedia apps, DNS, SNMP, DHCP

※ checksum : 가상 헤더(하위 계층의 프로토콜 헤더)를 포함하여 16bits 씩 잘라서 해석. 16bits 단위로 더한 값과 checksum 16bits 합이 0x00(모두 0)을 만족하도록 checksum bits를 부여. 전송계층은 checksum를 확인하여 데이터에 오류가 있을시 데이터를 버린다.

 

UDP를 통해 보낸 메세지는 오류 감지 기능은 있지만 이에 따른 재전송 요청을 추가적으로 하지는 않는다.

그럼 송신자는 어떻게 수신자가 보낸 메세지가 잘 도착하였는지 확인할 수 있는가?

→ 신뢰성 있는 전송(프로토콜)의 등장

 

신뢰성 있는 전송을 위한 고려사항

1. 데이터 오류

  • checksum과 같은 오류 감지. 오류 유무에 따라 ACK/NAK 확인 메세지를 송신자에게 전송.
  • 또한 패킷마다 일련번호(SEQ)를 부여하여 어떤 패킷이 오류/정상인지 확인함.

2. 패킷 손실

  • 패킷이 중간 단계 네트워크에서 전송되지 않아 손실이 발생함. 수신자는 해당 패킷을 보냈는지 모르기 때문에 송신자가 확인해야함.
  • 송신자는 일련번호가 부여된 패킷에 타이머를 설정해 해당 패킷에 대한 확인(ACK) 메세지가 정해지 시간안에 도착하는 지 확인, 타임 아웃시 재전송(retransmit) 요청을 해야함.

3. 순차적 전송

  • 일련번호가 부여된 패킷을 전송함으로써 순차적 전송을 가능하게함.

-> 이러한 방식을 적용한 패킷 재전송 방법을 통틀어 ARQ(Automatic Repeat reQuest)라고 한다.

 

전송 지연 시간 종류

 

Delay 종류

  • $d_{proc}$: 패킷 헤더 분석 / 비트 오류 확인 / output link 결정 (라우팅)
  • $d_{queue}$: 버퍼에서 전송시작까지 대기 시간
  • $d_{trans}$: 전송 시간 = L bits / R bps = packet length / link bandwidth
  • $d_{prop}$: 물리적 전파 시간 = 거리 / ~빛의 속도

Packet Retransmission Method (ARQ)

- Stop and Wait

 

잠시 한 노드에서 전체 패킷을 다음 노드까지 보내는 시간을 알아보면 4가지 지연 종류가 있는데, 전파 시간($d_{prop}$)이 한 패킷을 구성하는 전체 비트를 보내는 시간($d_{trans}$)보다 오래 걸리므로 stop and wait 방식은 굉장히 비효율적이다.

 

따라서 확인(ACK)되지 않았더라도 여러 패킷을 동시에 보내는 방식(n-packet pipelining)이 도입되었다.

- Go-back-N

n-packet pipelining

한번에 n개의 packet에 대해 ACK를 받지 않았더라도 송신을 하는 프로토콜로써 한번에 전송가능한 packet의 범위,  윈도우가 존재하여 그 크기만큼 패킷을 먼저 보낸다.

  • 성공적으로 ACK를 받았다면 윈도우를 움직여 다음 패킷을 전송
  • NAK 혹은 패킷 손실로 공백이 있는 경우 GBN ARQ는 수신되지 않은 가장 오래된 패킷에 타이머가 설정되어 해당 패킷부터 윈도우에 포함된 패킷을 모두 전송한다. 패킷이 수신되었다면 그 후 가장 오래된 패킷에 타이머를 설정한다.

- Selective ARQ

윈두우의 모든 패킷에 타이머을 설정하고 ACK를 체크한다.

  • 재전송이 필요한 패킷에 대해서만 재전송을 수행한다.
  • 일련번호 문제: 한정된 일련번호 수에 따라 ACK 메세지가 전송 실패되었을 때 수신 메세지 버퍼에 일련번호가 엊갈려 엉뚱한 데이터가 저장될 수 있음.