관리 메뉴

코딩하는 락커

3. 전송 계층 2 본문

🌐 네트워크

3. 전송 계층 2

락꿈사 2022. 3. 28. 18:12

3.4 신뢰성 있는 데이터 전송의 원리

  • 신뢰적인 데이터 전송 프로토콜의 의무realiable data transfer protocol
    • 신뢰적인 채널에서는 전송된 데이터가 손상되거나 손실되지 않음.
    • 모든 데이터는 전송된 순서대로 전달됨
    • 이것은 TCP가 인터넷 애플리케이션에게 제공하는 서비스 모델

 

신뢰적인 데이터 전달 프로토콜의 구축

 

완벽하게 신뢰적인 채널 상에서의 신뢰적인 데이터 전송: rdt1.0

  • 송신측
    • rdt_send(data) 이벤트에 의해 상위 계층으로부터 데이터를 받아들이고
    • make_pkt(data) 이벤트에 의해 데이터를 포함한 패킷 생성.
    • udt_send(packet) 이벤트에 의해 패킷을 채널로 송신함.
  • 수신측
    • rdt_rcv(packet) 이벤트에 의해 하위 채널로부터 데이터를 받아들이고
    • extract(packet, data) 이벤트에 의해 데이터를 추출.
    • deliver_data(data) 이벤트에 의해 데이터를 상위 계층으로 송신함.

 

비트 오류가 있는 채널 상에서의 신뢰적 전송: rdt2.0

  • 비트 오류를 처리하기 위해 세가지 부가 프로토콜 기능이 요구됨
    1. 오류 검출: 체크섬 필드 사용.
    2. 수신자 피드백: 수신자가 긍정 확인답안(ACK) / 부정 확인답안(NAK)을 전송함.
    3. 재전송: 수신자에게 오류를 가지고 수신된 패킷은 송신자에 의해서 재전송됨.

 

  • 송신측
    • rdt_send(data) 이벤트가 발생하면 송신자는 상위 계층에서 전달받은 데이터를
    • snkpkt = make_pkt(data, checksum) 동작을 통해 패킷 체크섬과 함께 전송될 데이터를 패킷에 생성함
    • udt_send(snkpkt) 동작을 통해 그 패킷을 전송함
    • 수신자로부터 ACK/NAK 패킷을 기다림
    • 만약 ACK이 수신된다면
      • 상위 계층으로부터 데이터를 기다리는 상태로 돌아감
    • 만약 NAK이 수신된다면
      • 마지막 패킷을 재전송하고
      • 재전송한 데이터 패킷에 대한 응답으로 수신자에 의해 응답되는 ACK/NAK을 기다림
    • 이것을 stop-and-wait 프로토콜이라고 부름(전송 후 대기)
  • 수신측
    • 패킷이 도착했을 때 수신된 패킷이 손상되지 않았다면
      • ACK으로 응답
    • 패킷이 도착했을 때 수신된 패킷이 손상되었다면
      • NAK으로 응답
  • rdt2.0의 결함은 ACK/NAK이 손상될 수 있다는 가능성을 고려하지 않았다는 것

 

비트 오류가 있는 채널 상에서의 신뢰적 전송: rdt2.1

  • 손상된 ACK/NAK을 처리하기 위한 방법
    • 송신자가 왜곡된 ACK/NAK 패킷을 수신할 때 현재 데이터를 재전송하는 것
      • 도착하는 패킷이 새로운 데이터를 포함하고 있는지 아닌지에 대해 알 수 없다는 중복 패킷 문제가 있음.
      • 따라서 데이터 패킷에 새로운 필드를 추가하고 이 필드 안에 순서 번호를 붙임.
      • 전송 후 대기 프로토콜이므로 순서 번호는 0,1이면 됨.
    • 수신자는 패킷을 받으면 가장 최근에 정확하게 수신된 패킷에 대한 ACK를 전송함
      • 이것을 통해 NAK을 송신한 것과 같은 효과를 얻을 수 있음

 

비트 오류와 손실이 있는 채널 상에서의 신뢰적 데이터 전송: rdt3.0

  • 송신자가 패킷을 잃어버렸다는 것을 확신할 정도로 충분한 시간을 기다릴 수 있다면 데이터 패킷을 간단하게 재전송 될 수 있음
  • 송신자는 적어도 송신자와 수신자 사이의 왕복시간 지연(중간 라우터에서의 버퍼링을 포함)에 수신측에서 패킷을 처리하는 데 필요한 시간을 더한 만큼 기다려야 함.
  • 시간 기반의 재전송 매커니즘을 구현하기 위해 countdown timer가 필요.
  • 무손실 동작

  • 패킷 손실
    • sender가 pkt1을 보냈으나 정해진 시간 내에 ACK(1)을 받지 못해서 timeout이 발생함.
    • 따라서 pkt1을 재전송함

  • ACK 손실
  • receiver가 pkt1을 정상적으로 받았고 ACK(1)을 보냈으나 ACK(1)이 유실됨.
  • sender는 pkt1을 보냈으나 정해진 시간 내에 ACK(1)을 받지 못해서 timeout이 발생함.
  • 따라서 pkt1을 재전송함.
  • receiver는 재전송된 중복 패킷 pkt1을 버리고 ACK(1)을 보냄.

 

 

  • 조급한 타임아웃
  • receiver는 정상적으로 pkt1을 받았으나 ACK(1) 전송이 지연됨.
  • sender는 pkt1을 보냈으나 정해진 시간 내에 ACK(1)을 받지 못해서 timeout이 발생함.
  • 따라서 pkt1을 재전송함.
  • receiver는 재전송된 중복 패킷 pkt1을 버리고 ACK(1)을 보냄.

 

 

 

 

 

 

  • rdt3.0은 전송 후 대기 프로토콜이므로 이용률이 떨어진다는 문제점이 있음

'🌐 네트워크' 카테고리의 다른 글

3. 전송 계층 4  (0) 2022.04.04
3. 전송 계층 3  (0) 2022.03.29
3. 전송 계층 1  (0) 2022.03.28
2. 어플리케이션 계층 2  (0) 2022.03.28
2. 어플리케이션 계층 1  (0) 2022.03.23
Comments