컴퓨터 네트워크: Windows in TCP

2021. 10. 1. 03:41·Computer Science/컴퓨터 네트워크
반응형

TCP: Transmission Control Protocol

6. Windows in TCP

 

stop & wait 방식

  • 데이터 전송할 때마다 잘 받았는지 확인
  • 신뢰성 보장 위한 가장 쉬운 접근 방식

데이터 전송을 화물 트럭으로 비유해 보자.

화물트럭 5대는 서울에서 출발해 부산에 화물을 운반 후 다시 서울로 돌아와 화물이 안전하게 도착했음을 보고해야 한다. stop & wait는 하나의 트럭이 서울-부산을 왕복해서 돌아온 후에 다음 번 트럭이 운행을 시작하는 방식이다. 서울에서 부산까지 왕복으로 10시간이 걸리기 때문에, 트럭 5대가 부산에 화물을 모두 운반하기까지는 50시간이 걸린다. 

이는 매우 비효율적이다. 

이러한 비효율성을 해결하기 위해 한꺼번에 트럭을 여러 대 보낼 수는 없을까?트럭을 여러 대 보낼 수 있다면, 여러 대의 기준은 무엇인가?

 

 

window in TCP

위의 예시와 같이 고속도로를 달리는 트럭을 생각해 보자.

이번에는 효율성을 고려하여 트럭을 한 대 씩 보내는 것이 아니라, 여러 대의 트럭을 한번에 보낼 것이다. 만약 5대의 트럭이 한꺼번에 화물을 운송한다면, 모든 트럭이 화물을 운송하는 데에는 단 10시간 밖에 걸리지 않는다. 이는 트럭을 한 대 씩 보낼 때보다 5배나 더 좋은 효율을 자랑한다. 

 

여기서 몇 가지 가정을 해보자.

화물의 양이 많아져 부산 지역까지 트럭을 10대 운행해야 하지만, 부산 지역 물류센터의 물류 보관함은 4개 밖에 없다. 이럴 때는 어떻게 해야 가장 효율적으로 화물을 운반할 수 있을까?

그것은 물류센터의 직원이 화물의 처리를 마치고 비어 있는 보관함 수를 서울의 물류센터에 알려주는 것이다. 그러면 서울의 물류센터에서는 비어있는 물류 보관함 갯수만큼의 트럭을 한꺼번에 내보낸다.

 

window의 동작 원리도 이와 비슷하다.

통신 시 Receiver가 Sender에게 자신의 Windows size를 알려주면, Sender는 그만큼의 양을 한번에 전송하고 Receiver가 해당 데이터를 모두 read했는지 확인 후에 다음 데이터를 전송한다.

*window size: 한꺼번에 받을 수 있는 데이터의 양

 

Send window in TCP

Bytes that are acknowledged

  • 승인된 bytes
  • Receiver에게서 데이터를 받았다는 신호(ACK)를 받은 bytes
  • buffer에서 제거 가능

 

Outstanding bytes

  • 상대방에게 전송했지만 아직 승인받지 않은(ACK이 도착하지 않은) bytes
  • 데이터에 오류가 있을 수 있으므로 ACK을 받을 때까지 보관하고 있어야 하는 데이터

 

Bytes that can be sent

  • 사용가능한 window
  • 아직 보내지 않은 bytes

 

Send window size

Receiver가 알려준 size(rwnd)

 

First outstanding byte Sf

승인받지 않은(ACK이 도착하지 않은) 데이터의 가장 첫 byte를 가리키는 포인터

 

Next byte to send to Sn

다음에 보낼(아직 보내지 않은) 데이터의 첫 byte를 가리키는 포인터

 

Bytes that cannot be sent until the right edge moves to the right

  • 오른쪽 edge가 오른쪽으로 이동할 때까지 보낼 수 없는 bytes
  • Outstanding bytes의 ACK이 도착해 버퍼에서 해당 데이터를 삭제하면, 데이터가 없는 빈 공간은 버리고 윈도우의 범위를 오른쪽으로 이동시킨다.

 

 

Receive window in TCP

Bytes that have already pulled by the process

  • 프로세스에서 이미 밀려난 바이트
  • read를 끝낸 데이터

 

Bytes received, and acknowledged waiting to be consumed by process

  • process에서 consume(소비) 대기 중인 수신, 승인된 바이트
  • consume: process가 데이터를 호출해서 application으로 가지고 올라가는 것을 '소비한다'고 표현
  • 데이터 받았는데 아직 process가 read를 안 한 것

 

Bytes that can be received from sender

  • sender로부터 받을 수 있는 바이트
  • 비어있는 공간
  • Receive window size(rwnd): 한번에 받을 수 있는 데이터의 양 = window size

 

Allocated buffer

할당된 버퍼

 

Bytes that cannot be received from sender

sender로부터 받을 수 없는 바이트

 

Next byte to be pulled by the process

  • 프로세스에 의해 밀려날 다음 바이트
  • 아직 process가 소비하지 않은 바이트

 

Next byte expected to receive

수신될 것으로 예상되는 다음 바이트

 

 


자료 출처:

  • TCP/IP Protocol Suite 4th Edition Slide
    (Behrouz A. Forouzan 저, McGraw-Hill, 2010)
반응형
저작자표시 비영리 변경금지 (새창열림)

'Computer Science > 컴퓨터 네트워크' 카테고리의 다른 글

컴퓨터 네트워크: Congestion Control  (0) 2021.10.14
컴퓨터 네트워크: Error Control  (0) 2021.10.07
컴퓨터 네트워크: Flow Control  (0) 2021.10.05
컴퓨터 네트워크: State transition diagram  (0) 2021.10.01
컴퓨터 네트워크: A TCP Connection  (0) 2021.09.24
컴퓨터 네트워크: Segment  (0) 2021.09.24
'Computer Science/컴퓨터 네트워크' 카테고리의 다른 글
  • 컴퓨터 네트워크: Error Control
  • 컴퓨터 네트워크: Flow Control
  • 컴퓨터 네트워크: State transition diagram
  • 컴퓨터 네트워크: A TCP Connection
청량리 물냉면
청량리 물냉면
프로그래밍 공부를 하고 있습니다. 공부 내용 정리 겸 정보 공유를 목적으로 합니다.
    반응형
  • 청량리 물냉면
    노력중인 블로그
    청량리 물냉면
  • 전체
    오늘
    어제
    • 분류 전체보기 (505)
      • 프로그래밍 (41)
        • Programming (1)
        • C | C++ (6)
        • Java (28)
        • Python (5)
      • 웹 프로그래밍 (108)
        • HTML | CSS (5)
        • JavaScript | TypeScript (41)
        • React (25)
        • Vue.js (0)
        • Next.js (18)
        • Spring & Spring Boot (13)
        • JSP & Servlet (1)
        • DB (4)
      • 웹 프로젝트 (77)
        • 웹 프로젝트 (22)
        • 🥨스낵몰 (3)
        • 👨‍👨‍👧‍👧소셜 가계부 (26)
        • 🌜꿈 일기장 (11)
        • 🔮포트폴리오 사이트 (11)
        • 🏃‍♂️팀 프로젝트: 일정관리 프로그램 (0)
        • 📈팀 프로젝트: AI기반 주식 분석 플랫폼 (0)
        • 😺Just Meow It: 조언 사이트 (2)
        • 📕Workly: 교대근무 다이어리 (1)
      • 앱 프로그래밍 (26)
        • Flutter (24)
        • Kotlin (2)
      • Problem Solving (166)
        • 백준 (52)
        • 프로그래머스 (79)
        • SWEA (29)
      • Computer Science (40)
        • 알고리즘 (14)
        • 컴퓨터 네트워크 (18)
        • 이산수학 (8)
      • Developer (47)
        • 후기 (4)
        • 자료정리 (4)
        • 취업 | 취준 (9)
        • SSAFY (1)
        • 웹개발 교육 프로그램 (9)
        • TIL (20)
  • 블로그 메뉴

    • 홈
    • Github
  • 공지사항

    • 프로그래밍 공부 중😊
  • 인기 글

  • 태그

    강의내용정리
    웹사이트
    mysql
    d3
    공식문서
    컴퓨터네트워크
    알고리즘
    Next.js
    플러터
    리액트
    AWS
    자바
    SWEA
    bfs
    백준
    파이썬
    구현
    ZeroCho
    자바스크립트
    클론 프로젝트
    블로그 제작
    Til
    뉴렉처
    프로그래머스
    React
    포트폴리오
    타입스크립트
    spring boot
    Jiraynor Programming
    프로젝트
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
청량리 물냉면
컴퓨터 네트워크: Windows in TCP
상단으로

티스토리툴바