본 내용은 한양대학교 이석복 교수님의 강의를 참고하여 정리하였습니다. 교재는 Pearson/Addison Wesley에서 출판한 Computer networking : a top-down approach입니다.
들어가기 전에
대전에서 독일 뮌헨으로 데이터를 보낸다고 하자. 본인이 대전에서 메시지를 보내면 수 많은 라우터를 지나갈 것 입니다. 아마도 서울을 지나 도쿄, LA, NW, 베를린 등을 거칠 것 입니다. 그렇다면, 전송 중에 데이터에 문제가 발생하지 않을까요? 발생할 것입니다. 이전에 배운 TCP에서는 신뢰성 특성이 있었습니다. 어떻게 신뢰성을 보장할까요? 이 how에 대한 방법을 여기서 배우겠습니다. TCP는 너무 복잡하니 RDT로 설명하겠습니다. RDT는 실제로 사용하지 않지만, 신뢰성을 보장하는 원리를 비슷합니다. RDT 버전 순서대로 보겠습니다.
RDT
- Sender에서 데이터를 보내고, receiver가 메시지를 받아서 확인 메시지를 보내면 sender가 확인 메시지를 받아서 다음 데이터를 보내는 방식
- Sender는 receiver로 부터 메시지가 올 때까지 대기
- 확인 메시지를 받고 데이터를 보내는 방식은 상당히 느립니다.
- 문제들의 따라 버전이 나뉩니다.
- 문제 : 전송 과정에서 신뢰성에 문제가 될 수 있는 2가지 요소
* Bits error
* Loss
RDT v1.0
- No bits error, No loss
- Underlying channel은 항상 신뢰성 보장
RDT v2.0
- Bits error, No loss
방법
1) Error detection
- 데이터에 에러가 발생했는지 기록
- Checksum bits를 헤더에 추가
2) Feedback
- 실생활 예시 : 친구와 전화 통화를 한다고 하자. 친구 A가 열심히 보라카이 여행 계획을 말하고 있다. 본인은 이 계획을 들으면서 '어', '어 좋은데?', '그래서', '오`라고 대답한다. 상대방의 말을 이해했다고 피드백은 준다.
- 실생활 예시에서 우리는 피드백을 통해서 내용이 잘 전달되었는지 상대방에게 확인시켜 준다. 이와 동일하게 ACKs와 NAKs이라는 피드백을 사용한다.
(1) ACKs (Acknowledgments) : receiver는 sender에게 packet을 옳바르게 받았다고 보내는 메시지
(2) NAKs (Negative acknowledgements) : reciever는 sender에게 에러가 있는 packet을 받았다고 보내는 메시지
3) Retransmission
- Sender는 NAK를 받으면 packet을 재전송
RDT v2.1
- Bits error, No loss
- RDT v2.0에서 ACK/NAK에 에러가 발생한다면?
* 예시 : sender에서 'AABB'라는 데이터를 보낸다고 하자. 'A'가 receiver에 안전하게 도착하여 receiver는 ACK를 보낸다. 그런데 도중에 에러가 발생하여 NAK로 변경된다. Sender는 NAK을 받고 다시 'A'를 보낸다. Receiver는 'A를 받게 되는데, receiver는 이 'A'가 첫 번째인지 두 번째인지 모른다. 이 문제를 다루기 위해서 v2.1가 나온다.
- Sequence number가 packet에 추가
* 예시
A | A | B | B |
1 | 2 | 3 | 4 |
* 번호를 매기게 되면, 위 예시에서 receiver가 받은 'A'는 첫 번째라고 판단할 수 있다.
* 순서 번호는 0과 1
+ 위 예시에서 1~4로 해 놓은 것은 이해를 돕기 위한 표현입니다. sender는 receiver에서 메시지가 올 때까지 대기하므로 데이터의 순서를 표현할 때는 0 과 1로 충분히 표현 가능합니다.
RDT v2.2
- Bits error, No loss
- NAK대신 ACK만 사용
* ACK에 가장 최근에 옯바르게 받은 sequence number를 함께 보냅니다.
RDT v3.0
- Bits error, Loss
방법
(1) Timer
- 일정 시간을 설정하여, 일정 시간 안에 packet/ACK가 오지 않으면 sender는 packet을 재전송
- 동작(d)에서 feedback에 오기 전에 timeout이 되어서 sender가 packet을 다시 보내는 상황입니다. 이후에 중복 처리를 계속해 주어야 합니다. 중복이 일어나도 reliable은 보장됩니다. 그러나 중복을 계속 처리해야 하기 때문에 overhead가 발생할 수 있습니다.
'Software Courses > Network' 카테고리의 다른 글
Transport : Segment의 크기 (0) | 2021.01.05 |
---|---|
Transport : TCP (0) | 2021.01.03 |
Transport : UDP (0) | 2020.12.31 |
Transport : Multiplexing, Demultiplexing (0) | 2020.12.31 |
Application : Socket programming (0) | 2020.12.31 |