Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 백준스택
- 백준
- 확인문제
- 카카오코테
- 백준가운데를말해요
- 코드트리
- 2019카카오코테
- BOJ
- 이것이자바다
- 백준10828
- 딥러닝
- 스파르타코딩클럽
- 백준9012
- 백준평범한배낭
- 코딩테스트실력진단
- 웹개발기초
- 백준온라인저지
- 백준괄호
- java
- 운영체제
- BOJ1655
- 컴퓨터비전
- 합성곱연산
- 가운데를말해요
- 이것이자바다확인문제
- KT포트포워딩
- 윤곽선검출
- 냅색알고리즘
- 코테
- 이것이자바다9장
Archives
- Today
- Total
코딩하는 락커
3. 전송 계층 2 본문
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
- 비트 오류를 처리하기 위해 세가지 부가 프로토콜 기능이 요구됨
- 오류 검출: 체크섬 필드 사용.
- 수신자 피드백: 수신자가 긍정 확인답안(ACK) / 부정 확인답안(NAK)을 전송함.
- 재전송: 수신자에게 오류를 가지고 수신된 패킷은 송신자에 의해서 재전송됨.
- 송신측
- 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을 송신한 것과 같은 효과를 얻을 수 있음
- 송신자가 왜곡된 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