이번시간
TCP의 reliable한 data transfer에 대해 알아본다
ㅡ> reliable : 데이터유실x 에러x 전달
TCP채널의 Reliable과 실제채널의 Unreliable
전송계층의 TCP만 보면
Reliable한 채널이 있는 듯한 환상을 보여주지만
실제 네트워크 채널은
unliable한 환경이다.
(라우터 큐 넘쳐서 데이터 손실 등)
Unliable한 채널에서 발생할 수 있는 것은?
ㅡ> 메세지 에러
ㅡ> 메세지 손실
실제론 Unliable한 것을, 어떻게 Reliable하게 보내는지 알아보자
[RDT] Reliable Data Transfer
Reliable Data Transfer protocol
Stop-and-Wait protocol
ㅡ> 데이터 하나를 보내면, ark가 올 때까지 기다림
[RDT 1.0] 완벽한 채널 (에러x 손실x)
완벽하기 때문에
추가적인 오류검출, 재전송 매커니즘이 필요 없음
[RDT 2.0] 패킷에러o, 패킷손실x
에러체크를 위해 필요한 것
오류 감지 (Error Detection)
ㅡ> checksum비트 추가
피드백 (Feedback)
ㅡ> 잘받았는지 응답
ㅡ> ACK (Acknowledgement) : 잘 받았음
ㅡ> NAK (Negative Acknowledgement) : 패킷에 에러가 있음
재정송 (Retransmission)
ㅡ> NAK를 받으면, 패킷 재전송
(P) 문제점 : 피드백에 오류가 있을 경우
피드백에 오류가 있으면,
안받았다고 가정하고 다시 보내는게 직관적인 해결책
문제 : 중복된 패킷을 여러번 보내게 될 수 있음 (duplicate)
ㅡ> 리시버가 이게 새로운건지 중복인건지 알 수 없다
해결 : 패킷에 번호를 붙인다 (sequence#)
ㅡ> 같은번호면 duplicate
[RDT 2.1] 시퀀스 넘버
시퀀스 넘버를 어디에 붙일까?
ㅡ> 헤더
문제 : 패킷이 많아지면 시퀀스 넘버가 너무 커져서 헤더가 너무 커진다
해결 : 시퀀스 넘버는 2개면 충분하다
ㅡ> 010101로 오면 정상
ㅡ> 0이 두번나오고 그러면 중복
[RDT 2.1] 요약
오류탐지 매커니즘에 필요한 것
- 오류 탐지 (Error detection): 패킷에 오류가 있는지 확인하기 위해 체크섬 등의 방법을 사용.
- 피드백 (Feedback): 수신자는 ACK(정상 수신) 또는 NAK(오류 발생)를 송신자에게 보냄.
- 재전송 (Retransmission): 송신자는 NAK를 받거나 피드백이 손상되었을 때 패킷을 재전송.
- 시퀀스 번호 (Sequence #): 송신자는 각 패킷에 시퀀스 번호를 추가하여 중복 패킷을 구분.
송신자
ㅡ> 시퀀스 번호 추가
ㅡ> 피드백(ack/nak) 손상 여부 확인
ㅡ> nak을 받거나, 피드백손상시 재전송
수신자
ㅡ> 패킷 중복 확인 (시퀀스 번호로)
ㅡ> 정상 패킷 : ack송신
ㅡ> 손상 패킷 : nak송신
[RDT 2.2] Nak free protocol
Nak없이 Ack만 활용 (시퀀스 넘버 리턴)
ㅡ> 수신자는 마지막으로 제대로 받은 시퀀스 넘버를 ack로 보냄
ㅡ> 송신자가 1을 보냈는데 0이 돌아오면, 그것이 nak
[RDT 3.0] 에러o 손실o
패킷손실에 대한 대응
ㅡ> 타이머 사용 (적당한 시간 설정)
ㅡ> 시간초과 ▶ 메세지 loss라고 판단 ▶ 재전송
타이머 시간설정
ㅡ> 짧으면, 리커버리는 빠른데 중복패킷이 발생하고
ㅡ> 길면, 중복패킷은 덜 발생하는데 리커버리가 느려짐
(P) 손실이 아니라 그냥 늦게온 경우, 재전송으로 중복패킷 발생
(S) 시퀀스 넘버로 중복패킷 처리
정상작동
패킷 손실
ACK 손실
타이머 조기종료
[요약] RDT 원칙
Unreliable 채널에서 발생할 수 있는 문제:
- 패킷 에러
- 패킷 손실
패킷 에러에 대한 해결 메커니즘:
- 에러 감지 (Error detection)
- 피드백 (Feedback: ACK/NAK)
- 재전송 (Retransmission)
- 시퀀스 번호 (Sequence number)
패킷 손실에 대한 해결 메커니즘:
- 타임아웃 (Timeout)
단순한 RDT 프로토콜의 구축:
- 실제 프로토콜(TCP와 같은)은 더 복잡하지만, 기본 원리는 동일합니다.
위의 메커니즘을 위한 것들이 TPC 헤더에 있다. (Ack, 시퀀스# 등)
문제 : 한번에 하나는 효율이 안좋다
ㅡ> 한번에 하나만 보내는건 고속도로 뚫어놓고 자동차 한대만 들여보내는 꼴
해결 : 한번에 여러개 보냄, 대신 매커니즘이 복잡함 (다음시간에...)
'CS > 네트워크' 카테고리의 다른 글
전송계층2 - TCP, segment구조, RTT, 타임아웃 (0) | 2024.09.20 |
---|---|
전송계층 1 - RDT효율 : Go-Back-N, Seletive Repeat (0) | 2024.09.20 |
2. 어플리케이션 계층 (0) | 2024.09.09 |
컴퓨터네트워크 기본2 (1) | 2024.09.04 |
컴퓨터 네트워크 기본1 (0) | 2024.08.28 |