<목차>
1. TCP
2. FSM
3. rdt1.0
4. rdt2.0
5. rdt 2.1
1. TCP
TCP의 역할은 Transport layer에서의 신뢰적 Data transfer을 하기 위한 protocol(대응절차문서)를 의미한다.
(* event : 대기중인 상태에서 영향을 받는 것, action : event가 발생했을때 수행하는 작업)
rdt_send()는 application에서 보내는 message이다. tcp에서 message를 받는 event가 발생한다. tcp에서는 message를 segment로 변환한다. udt_send()는 TCP에서의 segment를 IP로 전송하는 action이다.
rdt_rev()는 IP에서 보내는 segment를 TCP가 수신 하는 event가 발생한다. tcp에서는 segment에서 message를 추출한다. deliver_data()는 tcp에서 message를 application에 보내는 action이다.
TCP입장에서 보면 rdt_send()는 신뢰적인 영역이고, udt_send()는 비 신뢰적인 영역이다. rdt_rev()는 신뢰적인 영역으로 구분 되는데 거의 모든 통신은 블라인드 통신이기 때문에 수신하는 segment가 손상이 있는지 등에 대한 정보를 event가 발생한 시점에서는 알 수 없기 때문이다.
2. FSM
FSM(Finite state machine;유한상태기계)는 기계식 시스템 절차에 대한 추상적인 표현방식이다.
복잡해지는 하위채널을 고려하여 신뢰적인 data전송 protocol의 송신자 측면과 수신자 측면으로 전개하고, 단 방향 전송만을 고려한다. 하지만, 제어 패킷은 양방향 전송이 필요하다.
화살표는 다음 상태로 넘어가는 방향을 의미한다.
event와 action은 묶어서 사용한다. event는 선 위에 action은 선 아래에 적는다.
3. rdt 1.0
- rdt 1.0는 하위 채널이 신뢰적인 경우에 TCP에서 일어나는 절차에 대한 내용이다.
<가정>- 패킷의 깨짐이 발생하지 않는다.
- 패킷의 손실이 일어나지 않는다.
- 패킷의 순서가 변하지 않는다.
- FSM
Sender | Receiver |
1. Application이 data를 주는 것을 대기한다. |
1. 하위 채널이 packet을 주는 것을 대기한다. |
4. rdt 2.0
<가정>
- 패킷의 손실이 일어나지 않는다.
- 패킷의 순서가 변하지 않는다.
rdt 1.0에 비해 rdt 2.0가 부가적으로 필요한 protocol
- error검출
- feedback : 제어 message (acknowledgement : ACK / negative acknowledgement : NAK)
- 재전송
Sender | Receiver |
1. Application이 data를 주는 것을 대기한다. |
1. 하위 채널이 packet을 주는 것을 대기한다. |
Sender : 5, 6-1, 6-2 : 패킷이 손상된 경우 / 7 : 패킷이 정상적으로 전송된 경우
Receiver : 2, 3 : 패킷이 손상된 경우 / 5-1, 5-2 : 패킷을 정상적으로 수신한 경우
<결함>
ACK / NAK가 손상되는 경우 블라인드 통신이기 때문에 Sender에서는 알 수 없다.
이때 Sender에서의 처리방식은 1. 제대로된 ACK 또는 NAK가 올때까지 기다린다. 2. 손상된 ACK 혹은 NAK를 전부 NAK로 가정한다.
1의 경우에서는 서로의 상태를 확인할 수 없기 때문에 무한대로 기다려 통신이 이루어 지지 않는다.
2의 경우에서는 패킷을 재전송 하게 되는데 만약 Receiver가 ACK를 받은 경우 패킷이 중복되는 상황이 발생한다.
Q? NAK / ACK 어떤 방식으로 구분? 패킷처럼 구성? - 상태 변화에 대한 내용 A!
5. rdt 2.1
stop&wait방식을 이용해 rdt 2.0의 문제점을 개선한다. stop&wait방식은 Sender가 packet하나를 송신 한 후 receiver로 부터 응답이 올때까지 대기하는 것이다. 또한 패킷에 Sequence #를 이용해 Receiver에서 수신된 패킷과의 중복여부를 확인한다.
대칭구조를 이루는 이유는 Sequence #에 따라 나누어 지는 것이다. Sequence #만 다르고 절차는 같다. Sequence #는 값에 의미는 없지만 순서에는 의미가 있다.
(절차 : Sequence #가 0인 경우)
Sender | Receiver |
1. Application이 data를 0번 packet으로 보내기 위해 대기한다. |
1. 하위 채널이 Sequence #가 0인 packet을 주는 것을 대기한다. |
Sender : 5-1, 5-2 : 패킷이 손상되거나 Receiver의 응답이 손상된 경우 / 6 : 패킷이 정상적으로 수신했다는 응답을 받은 경우
Receiver : 2, 3 : 패킷을 정상적으로 수신한 경우 / 5-1, 5-2, 5-3 : 패킷이 손상된 경우 / 6-1, 6-2 : 중복된 패킷을 수신한 경우
( 5-1, 5-2, 5-3과 6-1, 6-2의 순서는 5->6도 6->5도 가능하다.)
'교육 > Netwrok' 카테고리의 다른 글
Day 60 (TCP_2) (0) | 2020.02.13 |
---|---|
Day 59 (Network Layer 구조) (0) | 2020.02.12 |
Day 58 (Wireshark) (0) | 2020.02.11 |
Day 58 (패킷) (0) | 2020.02.11 |
Day 58 (Transport Layer) (0) | 2020.02.11 |