[네트워크] 2주차 Transport Layer #1

nerry·2022년 5월 2일
0

네트워크

목록 보기
3/6

Transport Layer

해야하는 일

  1. multiplexing / demultiplexing
  2. error checking

→ reliable한 data transfer을 하도록 도와줘야 함

Reliable Data Transfer의 원칙

  • 하나씩 보내고 확인하고 다음 것을 보냄
  • unreliable channel
    • Message Error

    • Message Loss

      →이 두개를 잘 처리하면 된다.

Rdt 1.0 : Perfect Channel

sender, receiver 각자의 역할을 잘 하면 된다.

Rdt 2.0 : Packet Errors but no loss

  1. error detection : checksum bits을 헤더에 담아서 체크

  2. Feedback : 잘 받았는지 안받았는지 메세지

    지속적으로 패킷을 받을 때마다 피드백을 보낸다.

    • ACKs : receiver → sender 잘받았어!
    • NAKs : receiver → sender 못받았어!
  3. Retransmission

    • NAK을 받으면 sender는 재전송을 한다.

→ 하지만 이것이 Packet Error를 완벽하게 커버하지는 못한다.

만약, 피드백에 에러가 있다면 (ACK→NAK), Receiver는 Sender가 retransmission하기에 중복된 패킷을 받게 된다. 하지만 R은 이 사실을 모른다.

→ 그래서 패킷에 번호를 붙인다 : Sequence #

Rdt 2.1 : Sequence Number

  • 최소화가 돼야 하므로 0과 1을 반복해서 사용한다 → 1 bit면 충분한 이유
  • Receiver는 Sequence #을 기억한다.
    • R이 기대하는 #가 아닌 것이 오면 기다린다. 기대하는 것이 올때까지 기다리는 것
SenderReceiver
add Seq # to pktSeq # 을 계속 check하여 pkt이 중복인지를 확인
ACK/NAK을 계속 체크pkt이 잘못왔으면 NAK을 보내기
NAK이온다면 Retransmit

Rdt 2.2 : NAK-free protocol

  • ACK에 가장 마지막으로 제대로 받은 Seq # 을 포함하기 →ACK만으로도 NAK을 표현할 수 있다.

Rdt 3.0 : channel with loss & pkt errors

  • Timer : 패킷 loss를 체크할 수 있는 수단
    • ACK을 기다리는 reasonable amount 시간이 지나면 Time-out (lost ACK)
    • Time-out이 되면 유실로 판단하고 재전송한다.
      • 만약에 그냥 delay된 거였지만 재전송이 되었더라도 Seq#로 R은 알아서 판단한다. (premature time-out) → 네트워크에서 해결할 문제 → Seq #은 항상 가장 마지막으로 잘 받은 패킷의 #을 보내게 된다.

정리

  • Packet Error Mechanism → Error Detection, feedback, retransmission, sequence #
  • Packet Loss Mechanism → Timeout

Pipelined Protocols

  • sender allows multiple
  • 이제는 여러 개를 보낸다 → in-flight
  • 도착하지 않았더라도 일단 보내고 봄
profile
터벅터벅 개발(은좋은)자 로그

0개의 댓글