컴퓨터 네트워크: Error Control

2021. 10. 7. 22:58·Computer Science/컴퓨터 네트워크
반응형

TCP: Transmission Control Protocol

8. Error Control

 

Error Control

  • TCP는 신뢰할 수 있는 transport layer 프로토콜이다.
  • 즉, TCP로 데이터 스트림을 전송하는 응용 프로그램은 TCP에 의존해 전체 스트림을 반대쪽 끝에 있는 응용 프로그램에 오류 없이 순서대로 전달할 수 있다.
  • TCP의 Error Control(오류 제어)는 checksum, acknowledgment, and time-out의 세 가지 tool을 사용하여 수행된다.

 

알아두기

  • ACK에 대한 ACK은 존재하지 않는다. 즉, 내가 보낸 ACK을 상대방이 잘 받았는지 확인하는 ACK은 존재하지 않는다.
  • 데이터는 순서가 잘못된 상태로 도착하여 receiving TCP에 의해 일시적으로 저장될 수 있지만, TCP는 순서가 잘못된 데이터가 프로세스에 전달되지 않도록 보장한다. → TCP는 receiving buffer에서 application으로 데이터를 전송할 시 제대로 된 데이터만 올려보낸다(신뢰성 보장). 순서 바뀐 것은 아예 process로 전달되지 않음

 

 

Normal operation

  • 일반적인 데이터 전송 과정.
  • sender가 data를 보내면 receiver는 보낸 data를 잘 받았고 다음 패킷을 보내달라는 의미로 ACK을 전송한다.
  • 이때 상대에게 전송하는 ACK의 갯수를 줄이기 위한 Rule 1, 2, 3이 존재

양방향. Client, Server에는 Sending Buffer, Receiving Buffer이 각각 존재.

 

Rule 1

데이터를 받았을 때 ACK을 보내야 하는데 ACK을 바로 보내는 게 아니라 Buffer에 보낼 데이터가 있는지 확인하고 보낼 데이터가 있으면 같이 보낸다

(= ACK가는 김에 데이터도 같이 가자)

 

Rule 2

Sender는 패킷을 송신하고 나면 별도로 정의된 Timer(ACK-delaying timer)를 켜놓고 정해진 시간 동안 대기한다. 위의 그림에서는 지연 시간을 50ms로 설정하였다. 50ms까지 기다려도 Buffer에 보낼 데이터가 없을 시 데이터 없이 ACK만 전송한다.

 

Rule 3

timer를 켜놓고 기다리는 중에 패킷이 하나 더 도착하면 더 이상 안 기다리고 바로 ACK을 전송한다.

(=데이터가 없는 상황에 패킷 2개 들어오면 2개당 ACK 하나는 보내자)

 

 

* Ack 전송 시 Ack Field를 1로 셋팅하면 상대측에서 Ack을 의미있는 정보로 받아들이고, 0으로 셋팅 시 상대는 쓰여진 Ack번호를 무시한다. 

* 만약 그림의 맨 아래 Ack:7001 패킷이 Server에게 도착하기 이전 유실되면, Sever 입장에서는 위의 Seq: 5001-6000 / Ack: 1401패킷과 Seq: 6001-7000 / Ack: 1401패킷 두 개 모두 Client가 못 받았다고 생각.

 

 

Lost segment (패킷 유실)

Ack 갯수 줄이다 응급상황이 발생할 시 바로 Ack을 전송한다. 

Rule 4

잃어버린 패킷이 존재할 시 바로 Ack 전송

 

Rule5

못 받은 패킷을 받은 경우 바로 Ack 전송

 

* RTO timer

  • RTO : Retransmission Timeout, 재전송 타임아웃 시간
  • 패킷 제대로 받았는지 패킷마다 확인하는 타이머. 패킷마다 넉넉한 시간을 부여하고, 그 시간 안에 패킷에 대한 Ack이 도착하지 않은 경우 패킷이 정상적으로 상대방에게 도착하지 않았다고 간주하고 패킷을 재전송한다.
  • RTO설정 또는 계산 = 전송된 한 세그먼트에 대한 확인응답을 기다려야 하는 시간 = TCP 재전송 타이머 값
  • 송신 TCP는 매 세그먼트를 전송할 때 마다 재전송 타이머(RTO) 가동함
  • RTO는 TCP 연결의 RTT(왕복시간) 보다 약간 크면 이상적임. 즉, 세그먼트 전송부터 확인응답 받기까지의 시간 보다 약간 크면 좋음. 얼마나 커야 하는지 즉, RTT 예측에 대해 여러 계산 방식들이 있음

* Sender가 보낸 데이터가 중간에 유실된 경우에도 Sender는 계속 데이터를 전송한다. → Ack을 못 받더라도 window size가 허락하는 한 데이터를 계속 전송한다.

* Resent: 지정된 시간 안에 전송한 패킷의 Ack이 도착하지 않을 시 상대방이 패킷을 수신하지 못한 것이라 가정하고 해당 패킷을 재전송

 

 

 

Fast retransmission 

패킷이 없어진 경우 빠르게 재전송

 

* Culumative Ack의 장점

  • 패킷 두 개당 하나씩 Ack 나가므로 Ack 갯수 절약 가능(Rule3)
  • Fast retransmission 같은 기능을 쉽게 구현 가능

  • 상대가 보낸 패킷이 도착하지 않는 경우(뒷 번호의 패킷은 들어오는데 앞 번호의 패킷이 들어오지 않은 경우), Receiver에서는 해당 패킷을 받고 싶다는 의미로 상대방에게 받고 싶은 패킷의 Ack을 계속해서 보낸다.
  • Sender 측으로 세 개의 중복된 Ack이 들어오면 Sender는 Ack으로 들어오는 해당 패킷이 없어졌을 가능성이 높다고 생각하고 RTO timer가 time out되기 전이라도 패킷 재전송(→ Fast retransmit)
  • 뒤에 Receiver가 Ack 701번을 보낸 경우 그 앞의 700번 패킷까지는 다 받았다고 간주

 

 

Lost acknowledgment (Ack 유실)

  • ACK에 대한 ACK은 존재하지 않는다. 즉, 내가 보낸 ACK을 상대방이 잘 받았는지 확인하는 ACK은 존재하지 않는다.
  • 하지만 중간에 Ack이 하나 유실되었다 할지라도 큰일이 나는 것은 아님.
  • 뒤에 Receiver가 Ack:901을 전송하고 Sender가 그 Ack을 이상없이 수신했다면, Sender는 Receiver가 이전 900번 패킷까지는 이상없이 수신했다는 뜻으로 해석하기 때문.

 

 

Lost acknowledgment corrected by resending a segment (세그먼트 재전송을 통한 Ack 유실 수정)

 

 

Rule6

  • Receiver가 Sender에게 패킷을 잘 받았다는 Ack을 전송하는 상황에 Ack이 유실되었다.
  • 위의 Lost acknowledgment과 다른 점은 다음 Ack이 도착하기 이전 RTO timer가 time out되었다는 것이다.
  • RTO timer: 패킷마다 넉넉한 시간을 부여하고, 그 시간 안에 패킷에 대한 Ack이 도착하지 않은 경우 패킷이 정상적으로 상대방에게 전송되지 않았다고 간주하고 패킷을 재전송한다.
  • time out에 의해, Sender는 상대방이 패킷을 수신하지 못했다고 간주하고 패킷을 재전송한다. 그림에서는 나타나지 않지만, 뭘 못 받았는지 모르기 때문에 501-600, 601-700번 패킷을 같이 전송한다. 
  • Receiver는 중복된 패킷이 도착하면 바로 Ack을 전송한다. 

 

알아두기

적절히 처리되지 않은 경우 Lost acknowledgments는 deadlock을 발생시킬 수 있다. 

  • Receiver가 rwnd=0을 보내 Sender가 데이터 송신을 멈춘 상황.
  • Receiving Buffer에 MSS만큼의 공간이 생기거나 1/2만큼 빈 공간이 생길 때 Receiver는 rwnd=k (k: 빈 공간 용량)를 보내 상대방을 깨운다.
  • 이때 상대방을 깨우려고 보낸 Ack이 유실된다면, Sender는 Receiver가 자신을 깨우기를 기다리고 Receiver는 Sender가 데이터를 보내주기를 무한정으로 기다리게 되는 deadlock이 발생한다. 

 

해결방안: Persistence Timer 사용

 

  • Receiver가 rwnd=0을 보내 Sender가 데이터 송신을 멈춘 상황. 이 때 persistence timer가 작동한다.
  • persistence timer가 time out이 되었는데도 상대방에게서 아무런 반응이 없으면, Sender는 일단 작은 사이즈의 데이터(probe segment)를 상대방에게 보내본다.
  • 데이터를 보내면 해당 데이터에 대한 Ack이 도착한다. rwnd가 여전히 0이면 상대방 수신버퍼가 아직 비워지지 않았다는 의미. rwnd = k이면 중간에 Receiver가 보낸 Ack이 유실되었을 가능성이 존재

 

 

 


자료 출처:

  • TCP/IP Protocol Suite 4th Edition Slide
    (Behrouz A. Forouzan 저, McGraw-Hill, 2010)
  • 정보통신기술용어해설-RTO (http://www.ktword.co.kr/test/view/view.php?m_temp1=1687)

 

but TCP guarantees that no out-of-order data are delivered to the process.

반응형
저작자표시 비영리 변경금지 (새창열림)

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

컴퓨터 네트워크: TCP timers  (0) 2021.11.11
컴퓨터 네트워크 실습  (0) 2021.10.16
컴퓨터 네트워크: Congestion Control  (0) 2021.10.14
컴퓨터 네트워크: Flow Control  (0) 2021.10.05
컴퓨터 네트워크: Windows in TCP  (0) 2021.10.01
컴퓨터 네트워크: State transition diagram  (0) 2021.10.01
'Computer Science/컴퓨터 네트워크' 카테고리의 다른 글
  • 컴퓨터 네트워크 실습
  • 컴퓨터 네트워크: Congestion Control
  • 컴퓨터 네트워크: Flow Control
  • 컴퓨터 네트워크: Windows in TCP
청량리 물냉면
청량리 물냉면
프로그래밍 공부를 하고 있습니다. 공부 내용 정리 겸 정보 공유를 목적으로 합니다.
    반응형
  • 청량리 물냉면
    노력중인 블로그
    청량리 물냉면
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 프로그래밍
        • Programming
        • C | C++
        • Java
        • Python
      • 웹 프로그래밍
        • HTML | CSS
        • JavaScript | TypeScript
        • React
        • Vue.js
        • Next.js
        • Spring & Spring Boot
        • JSP & Servlet
        • DB
      • 웹 프로젝트
        • 웹 프로젝트
        • 🥨스낵몰
        • 👨‍👨‍👧‍👧소셜 가계부
        • 🌜꿈 일기장
        • 🔮포트폴리오 사이트
        • 🏃‍♂️팀 프로젝트: 일정관리 프로그램
        • 📈팀 프로젝트: AI기반 주식 분석 플랫폼
        • 😺Just Meow It: 고양이의 조언
      • 앱 프로그래밍
        • Flutter
        • Kotlin
      • Problem Solving
        • 백준
        • 프로그래머스
        • SWEA
      • Computer Science
        • 알고리즘
        • 컴퓨터 네트워크
        • 이산수학
      • Developer
        • 후기
        • 자료정리
        • 취업 | 취준
        • 웹개발 교육 프로그램
        • TIL
  • 블로그 메뉴

    • 홈
    • Github
  • 공지사항

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

  • 태그

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

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

티스토리툴바