School Lecture Study/컴퓨터 통신

10. 슬라이딩 윈도우 구현

vㅔ로 2022. 10. 26. 01:33
728x90

슬라이딩 윈도우 작동 과정

순서 번호 공간 (Sequence Number Space)

  • 순서번호는 오류제어에서 필수 → 헤더에 저장해서 보낸다.
  • 프레임 헤더의 필드는 한정된 공간 (많이 사용하면 overhead가 증가한다.)
  • → 결국 순서 번호는 순환되며 사용된다.
  • 순서 번호 공간: 가능한 순서 번호 구간
  • Ex. 4-bit 필드 ⇒ [0..15]
  • 순서 번호 필드는 얼마로 잡아야 안전할까?
  • 주어진 순서 번호 공간에서 최대 outstanding 프레임, 즉 송신자 기준 WindowSize는 얼마까지 늘릴 수 있을까?
  • 순서 번호 공간은 현재 전송중인 프레임의 수보다 커야 한다.
    • 어떤 프레임이 오류 및 재전송의 대상이 될 지 모르므로, outstanding frame 각각은 서로 다른 SeqNum을 갖고 있어야 한다.
    • out standing frame의 최대 수 = SendingWindowSize (SWS)
  • 순서번호 공간 크기 > SWS → 이 조건은 충분하지 않다.

Out-of-order Receiving: dilemma

  • Ex1. SWS가 3이고, 순서 번호 공간이 0~3 (4개)까지라고 한다.
    • frame을 올바르게 보냈는데 모든 ACK 전달이 안 되게 되었을 때
    • 송신자는 Frame 0부터 다시 보내게 된다.
    • 이때 Frame 0은 기존에 보냈던 Frame 0이므로 수신자는 discard 해야 한다.
  • Ex2. Ex1과 같은 조건.
    • frame을 올바르게 보내고, ACK 전달도 잘 되었다.
    • Frame 3을 보내는 과정에서 Frame error가 발생했고, Frame 0은 잘 전송되었다.
    • 이때 Frame 0은 새로운 Frame 0이므로 수신자는 저장을 해야 한다.

→ 이 경우 수신자는 Ex1과 Ex2를 어떻게 구분할 수 있는가?

⇒ 구분할 수 없다.

순서 번호 공간 (2)

  • SWS ≤ 순서 번호 공간 크기는 불충분하다.
    • 3-bit SeqNum 필드를 가정했을 때 SWS = RWS = 7이라고 하자.
    • 송신자는 프레임 0..6을 보냈고 성공적으로 도착했지만, 모든 ACK를 잃어버렸다.
    • 송신자는 0..6을 재전송한다.
    • 수신자는 7,0..5를 기대하지만 재전송된 0..5를 받게 된다.
  • 결론: SWS < 순서번호공간 크기의 반
    • SWS는 순서 번호 공간의 반보다 작아야 안전하다.
    • SWS < (MaxSeqNum + 1) / 2
  • SeqNum이 순서 번호 공간의 1/2 사이를 오고간다.

Sliding Window 구현

  • 프레임 하나 하나의 송수신은 NIC(Network Interface Card)이 담당한다.
  • 슬라이딩 윈도우는 바로 그 위에서 동작 → 디바이스 드라이버와 연동하는 시스템 소프트웨어
  • 프로토콜 내부 동작의 실체는?
    • 계층구조에 따라, 헤더 정보를 써넣고 읽고 처리하는 것이 기본.
    • 담당 기능에 따라 세부 동작이 정해진다 (슬라이딩 윈도우 - 오류 제어)

구조체

  • flags: opcode 역할. 통신이 양방향이므로 수신자가 송신자가 되고 송신자가 수신자가 되기도 한다. 이를 구별하기 위한 flag를 사용한다.
  • sendQ → 실체: 재전송 버퍼. circular queue 사용
  • recvQ → 실체: 수신측 저장 버퍼와 check

sendSWP

  • High-Level → SWP
  • semaphore를 사용하여 window가 모두 찼는지 확인한다.
  • LFS를 증가시키고, Header를 추가한다.
  • 값을 Slot 재전송 버퍼에 복사해온다. (버퍼링)
  • timeout을 설정하고 send down을 진행한다.

deliverSWP

  • 송신자가 ACK를 받으면 timeout event를 취소한 후 전송 완료된 버퍼를 비운다.
  • LAR이 ACK 숫자와 같을 때까지 받은 ACK 숫자 보다 작은 number들을 타임아웃 해제 + 버퍼에서 해제한다.

수신자

  • 받은 message의 값을 버퍼에 복사한다.
  • 첫 X (받지 못한 값)를 만날 때까지 저장된 msg를 위 계층으로 올린다.
  • NFE값으로 ACK를 만들고 ACK를 보낸다.

프로토콜 계층/개체/인터페이스의 실체

  • Service interface 실체: 상위 계층에서 사용할 수 있는 하위 계층의 함수 인터페이스
  • peer-to-peer 실체: 두 계층간 header에 대한 정의
728x90

'School Lecture Study > 컴퓨터 통신' 카테고리의 다른 글

12. 토큰링 (802.5, FDDI)  (0) 2022.12.20
11. 이더넷 (유선 LAN)  (1) 2022.12.20
9. 슬라이딩 윈도우 (Sliding-Window)  (0) 2022.10.26
8. 신뢰성 있는 전송 (Stop-and-Wait)  (0) 2022.10.26
7. 오류 검출  (0) 2022.10.25