'Transport_Layer'에 해당되는 글 16건

  1. 2014.02.14 5_RDT_2.1_CASE1 by 훈승오승훈
  2. 2014.02.14 4_RDT_2.0_CASE2 by 훈승오승훈
  3. 2014.02.14 3_RDT_2.0_CASE1 by 훈승오승훈
  4. 2014.02.14 2_RDT_1.0 by 훈승오승훈
  5. 2014.02.14 1_RDT 개요 by 훈승오승훈 2
  6. 2014.02.14 1_개요 by 훈승오승훈

1. RDT 2.1

 -> RDT 2.0에는 치명적인 오류가 있다.

2. RDT 2.0의 치명적인 오류

 -> ACK/NAK가 깨졌을 때??

  : Receiver가 보낸 응답 packet에 손상이 있을 때는 어떻게 할 것인가??

  : Sender가 보낸 packet이 잘 받아졌는지 아닌지 알 수 없다.

 -> ACK가 깨졌을 때??

  : Sender는 다음 packet을 보내야할지 말아야할지 구별할 수 없다.

 -> NAK가 깨졌을 때??

  : Sender는 재전송을 해야할지 말아야할 지 구별할 수 없다.

 -> 응답 packet이 변형되면 Sender는 재전송하는 경우가 발생한다.

  : 그러면 Receiver는 중복된 packet을 받는다.

3. 치명적인 오류 해결방법

 -> ACK와 NAK에도 checksum을 통해 해결한다.

 -> 만약 Receiver에서 똑같은 packet을 받았을 때

  : Sender는 packet에 Sequence Number를 추가하여

  : Receiver는 해당 packet이 재전송인지 다음 packet인지 구별한다.

4. CASE 1

 -> Bit Error가 없는 Segment를 받았을 경우를 본다.

 -> 응답 packet 손상이 없는 경우를 본다.

4_1. Sender

 -> Wait for 0 call from above

  : 현 상태는, 상위 Layer로부터 Data를 받기 위해 대기하는 단계이다.

  : Sequence Number 0을 추가할 Data를 대기하는 것이다.

 -> Event

  : rdt_send(data)

  : 상위 Layer로부터 Data를 받는다.

 -> Actions

  : packet_! = make(0,data,checksum)

  : 하위 Layer로 보낼 Segment(packet_!)을 생성한다.

  : Packet의 중복을 피하기 위한 Sequence Number 0

  : Bit Error를 판별하기 위한 Checksum을 추가하여 생성한다.

  : udt_send(packet_!)

  : 하위 Layer로 Segment(packet_!)을 전송한다.

 -> Wait for 0 ACK or NAK

  : Sequence Number 0을 가진 Segment(packet_!)에 대한 응답을 기다린다.

4_2. Receiver

 -> Wait for 0 call from below

  : 하위 Layer로부터 Sequence Number 0을 가진 Segment를 대기하는 단계이다.

 -> Event

  : rdt_rcv(packet_!) && notcorrupt(packet_!) && has seq0(packet_!)

  : 하위 Layer로부터 Segment(packet_!)을 받는다.

  : Segment(packet_!)는 Bit Error가 발생하지 않았다는 것을 확인한다.

  : 해당 Segment(packet_!)는 Sequence Number 0을 가진 것을 확인한다.

 -> Actions

  : extract(pakcet_!,data)

  : Segment(packet_!)에 아무 문제가 없기 때문에 Message(data)를 추출한다.

  : deliver_data(data)

  : 추출한 Message(data)를 상위 Layer로 전송한다.

  : packet_@ = make(ACK, checksum)

  : Sender에서 보낸 Segment(packet_!)을 잘 받았다는 응답을 보내야 한다.

  : ACK 응답과 ACK의 훼손여부를 위한 checksum을 추가하여 Segment(packet_@)를 생성한다.

  : udt_send(packet_@)

  : Segment(packet_@)를 하위 Layer로 전송한다.

 -> Wait for 1 call from below

  : 하위 Layter로부터 Sequence Number 1을 가진 Segment를 대기하는 단계이다.

  : 앞에서 Sequnece Number 0의 작업이 모두 끝났기 때문이다.

4_3. Sender

 -> Wait for 0 ACK or NAK

  : Sequence Number 0을 가진 Segment(packet_!)에 대한 응답을 기다린다.

 -> Event

  : ----------------------------------응답 packet이 제대로 간 경우

  : rtd_rct(packet_@) && notcorrupt(packet_@) && isACK(packet_@)

  : 데이터의 손상도 가지 않고, ACK를 포함한 Segment(packet_@)를 받는다.

 -> Actions

  : 잘 받았기 때문에 아무런 행동을 취하지 않아도 된다.

 -> Wait for 1 call from above

  : Sequence Number 0에 대한 packet 처리를 모두 종료되었기 때문에

  : 상위 Layer로부터 Sequence Number 1을 추가할 data를 대기하는 단계이다.

'Transport_Layer > $_RDT' 카테고리의 다른 글

7_RDT_2.1_CASE3  (0) 2014.02.14
6_RDT_2.1_CASE2  (2) 2014.02.14
4_RDT_2.0_CASE2  (0) 2014.02.14
3_RDT_2.0_CASE1  (0) 2014.02.14
2_RDT_1.0  (0) 2014.02.14
Posted by 훈승오승훈
l

1. RDT 2.0

 -> RDT 1.0에서 이루어진 신뢰적인 통신에서 상황을 바꾼다.

 -> Bit 오류가 있는 채널을 만든다.

2. RDT 2.0 요건

 -> No Loss of Packets

 -> Bit Error

 3. Bit Error를 확인하기 위해 필요한 것??

 -> checksum

  : Bit Error를 검출하기 필요한 field이다.

4. Bit Error가 발생하면 수신측에서 필요한 것??

 -> 응답 packet이 필요하다.

 -> ACK

  : Acknowledgement

  : Receiver가 Sender가 보낸 packet을 잘 받았는 것에 대한 응답이다.

 -> NAK

  : Negative Acknowledgement

  : Receiver가 Sender가 보낸 packet이 Error 또는 장애가 있다는 응답이다.

5. CASE

 -> Bit Error가 있는 Segment를 받았을 경우를 본다.

5_1. Sender

 -> Wait for call from above

  : 현 상태는, 상위 Layer로부터 Data를 받기 위해 대기하는 단계이다.

 -> Event

  : rdt_send(data)

  : 상위 Layer가 Transport Layer로 Message(data)를 보낸다.

 -> Actions

  : packet_# = make(data, checksum)

  : Segment(packet_#)를 만든다.

  : 이 때, Bit Error를 감지하기 위해서 checksum을 추가하여 Segment(packet_#)를 만든다.

  : udt_send(packet_#)

  : 하위 Layer로 Segment(packet_#)을 보낸다.

 -> Wait for ACK or NAK

  : Receiver로부터 응답을 기다린다.

5_2. Receiver

 -> Wait for call from below

  : 현 상태는, 하위 Layer로부터 Segment를 받기 위해 대기하는 단계이다.

 -> Event

  : rdt_rcv(packet_#) && corrupt(packet_#)

  : 하위 Layer로부터 Segment(packet_#)을 받는다.

  : 이때는, Bit Error가 발생한 것을 알 수 있다.

 -> Actions

  : packet_$ = make(NAK)

  : Sender가 보낸 packet_$에서 Bit Error가 있다는 응답을 알리기 위해 Segment를 만든다.

  : udt_send(packet_$)

  : 하위 Layer로 Segment(packet_$)를 보낸다.

5_3. Sender

 -> Wait for ACK or NAK

  : Receiver로부터 응답을 기다린다.

 -> Event

  : rdt_rcv(packet_$) && isNAK(packet_$)

  : 하위 Layer로부터 Segment(packet_$)를 받았는데 NAK 응답이 담긴 내용을 받았다.

 -> Actions

  : udt_send(packet_#)

  : 이전에 생성한 packet_#을 다시 하위 Layer에 전송한다.

  : ** 새로 packet을 생성하여 보내지 않아도 되는 이유는??? **

  : OS에서 응답 packet이 오기 전까지 *** Buffer에 저장을 해놓기 때문 ****

  : 이로 인해, RDT 1.0보다 memory를 더 많이 사용하게 된다.

 -> Wait for ACK or NAK

  : Receiver로부터 응답을 기다린다.

 -> 만약 이 상태에서 ACK를 받게 된다면???

  : Wait for call from above로 돌아가게 된다.

'Transport_Layer > $_RDT' 카테고리의 다른 글

6_RDT_2.1_CASE2  (2) 2014.02.14
5_RDT_2.1_CASE1  (0) 2014.02.14
3_RDT_2.0_CASE1  (0) 2014.02.14
2_RDT_1.0  (0) 2014.02.14
1_RDT 개요  (2) 2014.02.14
Posted by 훈승오승훈
l

1. RDT 2.0

 -> RDT 1.0에서 이루어진 신뢰적인 통신에서 상황을 바꾼다.

 -> Bit 오류가 있는 채널을 만든다.

2. RDT 2.0 요건

 -> No Loss of Packets

 -> Bit Error 

3. Bit Error를 확인하기 위해 필요한 것??

 -> checksum

  : Bit Error를 검출하기 필요한 field이다.

4. Bit Error가 발생하면 수신측에서 필요한 것??

 -> 응답 packet이 필요하다.

 -> ACK

  : Acknowledgement

  : Receiver가 Sender가 보낸 packet을 잘 받았는 것에 대한 응답이다.

 -> NAK

  : Negative Acknowledgement

  : '해당 packet에 대해서 다시 반복해라'라는 의미이다.

  : Sender가 Receiver한테 보낸 packet이 Error 또는 장애가 있다는 응답이다.

5. CASE 1

 -> Bit Error가 없는 Segment를 받았을 경우를 본다.

5_1. Sender

 -> Wait for call from above

  : 현 상태는, 상위 Layer로부터 데이터를 받기 위해 대기하는 단계이다.

 -> Event

  : rdt_send(data)

  : 상위 Layer에서 보낸 Message(data)를 Transport Layer에서 받게 되는 것이다.

 -> Actions

  : packet_! = make(data, checksum)

  : Segment(packet_!)를 만든다.

  : 이 때, Bit Error를 감지하기 위해서 checksum을 추가하여 Segment(packet_!)를 만든다.

  : udt_send(packet_!)

  : 하위 Layer로 Segment(packet_!)를 보낸다. 

 -> Wait for ACK or NAK

  : Receiver로부터 받을 응답을 기다린다.

  : 또한, 이 상태는 상위 Layer로부터 data를 받을 수 없는 상태이다.

5_2. Receiver

 -> Wait for call from below

  : 현 상태는, 하위 Layer로부터 Segment를 받기 위해 대기하는 단계이다.

 -> Event

  : rdt_rcv(packet_!) && notcorrupt(packet_!)

  : 하위 Layer에서 보낸 Segment(packet_!)를 받는다.

  : Segment(pakcet_!)는 Bit Error가 발생하지 않았다는 것을 말한다.

 -> Actions

  : extract(packet_!,data)

  : Segment(packet_!)에서 Application Layer로 전달할 Message(data)를 추출한다.

  : deliver_data(data)

  : Message(data)를 Application Layer로 전송한다.

  : packet_@ = make(ACK)

  : Sender가 보낸 packet을 잘 받았다는 응답을 해주기 위해서 Segment(packet_@)를 만든다.

  : udt_send(packet_@)

  : 하위 Layer로 Segment(packet_@)를 보낸다.

5_3. Sender

 -> Wait for ACK or NAK

  : Receiver로부터 받을 응답을 기다린다.

 -> Event

  : rdt_rcv(packet_@) && isACK(packet_@)

  : 하위 Layer로부터 Segment(packet_@)를 받았는데 ACK 응답을 받았다.

 -> Actions

  : ACK응답을 받았기 때문에 해야할 일은 없다.

 -> Wait for call from above

  : 다시, 상위 Layer로부터 Data를 받기 위해 대기하는 단계로 돌아간다.

  : 이 상태로 돌아가기 위해서는 반드시 ACK를 수신해야 한다.

 -> Sender는 Receiver가 현재의 packet을 정확하게 수신했다는 것

  : 확인하기 전까지는 새로운 데이터를 전송할 수 없다.

  : 이러한 방식은 Stop-and-Wait 방식이라고 한다.

'Transport_Layer > $_RDT' 카테고리의 다른 글

6_RDT_2.1_CASE2  (2) 2014.02.14
5_RDT_2.1_CASE1  (0) 2014.02.14
4_RDT_2.0_CASE2  (0) 2014.02.14
2_RDT_1.0  (0) 2014.02.14
1_RDT 개요  (2) 2014.02.14
Posted by 훈승오승훈
l

2_RDT_1.0

Transport_Layer/$_RDT 2014. 2. 14. 11:27

1. RDT 1.0

 -> 신뢰적인 채널에서 RDT

2. 신뢰적인 채널

 -> 하위 Layer에서 신뢰적인 전송을 담당한다.

 -> 회선망에서 주로 사용한다.

 -> 신뢰적인 채널에서는 어떠한 오류도 발생하지 않기 때문에

  : Sender는 Receiver에게 어떠한 피드백도 받을 필요가 없다.

3. RDT 1.0 요건

 -> No Bit Error

 -> No Loss of Pakcets

4. Send

 -> Wait for call from above

  : 현 상태는, 상위 Layer로부터 Data를 받기 위해 대기하는 단계이다.

 -> Event

  : rdt_send(data_@)

  : Application Layer에서 보낸 Message(data_@)를 Transport Layer가 받게 되는 것이다.

 -> Actions

  : sndpkt_# = make_pkt(data_@)

  : Segment(packet_#)를 만든다.

  : udt_send(sndpkt_#)

  : Network Layer로 Segment(sndpkt_#)를 보낸다.

5. Receiver

 -> Wait for call from below

  : 현 상태는, 하위 Layer로부터 Segment를 받기 위해 대기하는 단계이다.

 -> Event

  : rdt_rcv(sndpkt#)

  : Network Layer에서 보낸 Segment(sndpkt_#)를 Transport Layer가 받게 되는 것이다.

 -> Actions

  : extract(sndpkt_#,data_@)

  : Segment(sndpkt_#)에서 Application Layer로 보낼 Message(data_@)를 추출한다.

  : deliver_data(data_@)

  : 추출한 Message를 Application Layer로 보낸다.

'Transport_Layer > $_RDT' 카테고리의 다른 글

6_RDT_2.1_CASE2  (2) 2014.02.14
5_RDT_2.1_CASE1  (0) 2014.02.14
4_RDT_2.0_CASE2  (0) 2014.02.14
3_RDT_2.0_CASE1  (0) 2014.02.14
1_RDT 개요  (2) 2014.02.14
Posted by 훈승오승훈
l

1_RDT 개요

Transport_Layer/$_RDT 2014. 2. 14. 11:25

1. RDT

 -> Reliable Data Transfer Protocol

2. 신뢰적인 데이터 통신

 -> 데이터가 깨지지 않고손실되지 않는 것을 의미한다.

  : 위와 같은 상황이 발생하면 재전송한다.

 -> 순서가 섞이지 않고 가는 것을 의미한다.

2. 서비스 추상화

 -> 신뢰적인 채널에서 전송된 데이터가 (데이터가 손상되거나 데이터가 손실)되지 않는다.

3. 지금부터 알아볼 것

 -> 점점 복잡해지는 하위 채널 모델을 고려하여

  : RDT의 Sender 입장과 Receiver 입장을 개발해 나가는 것이다.

4. 호출

 -> rdt_send()

  : 해당 호출에 의해서 위쪽으로부터 호출될 것이다.

 -> udt_send()

  : 다른 쪽에 패킷을 전송한다는 뜻이다.

  : 즉, 하위 Layer로 packet을 전송한다.

 -> rdt_rcv()

  : 수신측에서 패킷이 도착했을 때 호출된다.

 -> deliver_data()

  : rdt가 상위 Layer에 데이터를 전달할 때 호출한다.

'Transport_Layer > $_RDT' 카테고리의 다른 글

6_RDT_2.1_CASE2  (2) 2014.02.14
5_RDT_2.1_CASE1  (0) 2014.02.14
4_RDT_2.0_CASE2  (0) 2014.02.14
3_RDT_2.0_CASE1  (0) 2014.02.14
2_RDT_1.0  (0) 2014.02.14
Posted by 훈승오승훈
l

1_개요

Transport_Layer/$_Basic 2014. 2. 14. 11:22

1. Transport Layer

 -> Internet 5계층의 한 Layer를 담당한다.

 -> 서로 다른 Host간에 작동되는 App Process간에 논리적인 통신을 담당한다.

  : Host내에서 구동된 Process사이의 연결을 확립해준다.

 -> Network Layer가 제공하지 못하는 신뢰적인 전송을 제공한다.

2. 작동

 -> End System에서 작동한다.

  : Network 끝에서 데이터를 발생시키는 발생지 또는 데이터를 받는 목적지 역할을 한다.

  : End System을 사용하는 사용자를 End User라고 한다.

3. Sender

 -> 상위 Layer로부터 Message를 받아 Segment를 생성한다.

 -> 만든 Segment를 하위 Layer로 전송한다.

4. Receiver

 -> 하위 Layer로부터 Segment를 받아 Message를 추출한다.

 -> 추출한 Message를 상위 Layer로 전송한다.

5. 대표적 Protocol

 -> TCP (Transmission Control Protocol)

  : Sender가 하는 Congestion Control(혼잡제어)

  : Receiver가 하는 Flow Control(흐름제어)

  : 연결지향

 -> UDP (User Datagram Protocol)

  : Best Effor Delivery Service

  : Data 전달에 최선을 다하지만 어떠한 보장도 하지 않는다.

Posted by 훈승오승훈
l