일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- network
- open weather api
- 플러터
- 주니어개발자
- Flutter2.8
- 누가 보기는 하는걸까...ㅠㅠ
- Null Safety
- flutter
- 댓글이 하나도 없오...ㅠㅠ
- hero animation
- 다트&플러터
- flutter-layout
- 쒸익!!!!!!!!!
- 다트 책
- dfs
- flutter_local_notification
- 나도 코딩 잘할래!!!!!!!!!!!
- flutter_secure_storage
- 코딩 잘하고 싶어!!
- TODO
- flutter secure storage
- bloc
- 포?코DX
- 프로그래머스
- FutureBuilder
- 이직
- 편하다요
- 주변에는 능력자 뿐이야!!
- 플러터 책
- 크레인 인형뽑기
- Today
- Total
오늘하루도 우힣ㅎ
CH3. Transport Layer(2) 본문
4. Principle of reliable data transfer(ARQ)
- Method1 : Forward Error Correction (FEC)
-> 받는쪽에서 에러를 복구하도록 하는 방식이다
-> 반복적인 bits를 추가하여 사용하는 방식
ex) 0을 보낼때 000000라고 보내기 받는입장에서 한비트에서 에러가나서 010000라고 받더라도 더 많은 0으로 인지하게 된다.
(1->111111->1111010 => receiver는 1로 인지)
- Method2 : Retransmission
-> Receiver가 에러를 detect하고 sender측에 재전송을 요청하는 방식이다.
-> ARQ(Automatic Repeat reQuest)
: Stop and wait
: Go back N
: Selective repeat (SR)
- Stop and Wait ARQ
-> 장점 : sender 측은 receiver를 overflow 할수가 없다(receiver측에서 ACK를 보내야만 sender 측에서 보낼수가 있기 때문이다.)
-> 단점 : propagation delay로 인해서 네트워크 사용 효율이 떨어지게 된다.
-> ACK : receiver가 sender측에서 데이터를 받았다고 알려주는 신호를 의미한다.(ACK 에 대한 신호가 loss가 나게 되면 sender측에서는 ACK을 받지 못하기에 다음 데이터를 못보내는 deadlock 상태에 빠지게 된다. 이를 해결 하기 위해 Time-out을 사용한다.)
-> Time-out : ACK가 일정시간동안 오지 않게 되면 다시 그 데이터를 보내게 된다.
-> Delay Bound가 존재하지 않을 경우 문제점이 존재한다. |
-> Delay bound를 ACK에 seq#을 주면서 해결하게 된다. |
- Performance of Stop-and-Wait -> R : Bandwidth (bits/sec) -> L : Packet size (bits) -> A : ACK size (bits) -> Tp : Propagation delay(sec) -> Cycle length = 2Tp+(L+A)/R -> Efficiency = (데이터 걸리는데 보내는 시간) / 총 걸리는 시간 = (L/R)/(2Tp+(L+A)/R) = L/(2TpR+L+A) |
Example) 1 Gbps link, 15ms propagation delay, 1KB packet, Ignore Ack time -> Bandwidth = 1Gbps -> data size = 1KB -> T transmit = 8kbit/10^9 sec = 8 microsec -> Efficeincy = 0.008/(15+15+0.008) = 0.0027 |
- Sliding Window Protocols
-> sender가 ACK이 오지 않았지만 여러개의 segment들을 보낼수 있도록 하는것.
-> seq# 의 범위가 늘어나야 한다.
-> sender와 receiver에 버퍼링이 발생할것이다.
-> Go-Back-N, Selective repeat 방식이 존재한다.
- Go-Back-N
- Sender -> Sender의 윈도의 사이즈 N -> packet들에 seq #를 붙여 연속적으로 send_base+N-1까지 해서 보낼수가 있다. -> send_base : send_base이전까지는 receiver로 부터 ACK 받음 -> 각각의 packet에 대해 timer가 존재하게 된다. -> n packet에 대해 timeout이 발생하게 되면 n packet과 n 보다 더 높은 seq# 가진 packet들을 재전송한다. |
- Receiver -> Receiver의 윈도우 사이즈는 1이다. -> ACK #은 자신이 다음에 받을 packet의 seq#와 동일하다. -> 자신이 원하는 packet을 받았을때 다음 순서의 packet을 요청하는 ACK를 보내게 된다. -> 자신이 원하지 않는 packet을 받았을때 해당 packet은 버리고 다시 자신이 원하는 packet을 ACK을 통해 알려주어 재전송하길 기다린다. -> Receiver측은 단지 자신이 받아야할 ACK에 대한 정보만 가지고 있다.
|
- GBN : window size vs number of bits for seq#
ex) seq#를 위한 bit수가 3이고 SWS가 8인경우
-> sender측에서 0,1,2,3,...,7번 packet들을 순차적으로 보내게 된다.
-> 모든 packet들이 receiver측에 성공적으로 도착하지만 모든 ACK이 없어졌다.
-> receiver측은 다시 0번을 받기 위해 대기를 하고 있다.(01234567 01234567)
-> sender측에서는 receiver측에서 ACK이 오지 않아 Time out이 발생하게 되고 다시 0번부터 재전송한다.(01234567 01234567)
-> receiver측은 전에 받은 data이지만 인지하지못하고 받아들이게 된다.
=> 이런 문제점을 해결하기 위해서 항상 SWS(sender window size)<= (2^m)-1 이어야 한다.
(m은 seq#를 위한 bit수를 의미한다.)
- Selective Repeat
-> sender와 receiver측의 window사이즈가 같다.
-> Selective Repeat의 경우 SWS(=RWS)<=2^(m-1)이어야 한다.
- Sender -> packet들에 seq #를 붙여 연속적으로 send_base+N-1까지 해서 보낼수가 있다. -> ACK을 받지 못한 packet에 대해서만 해당 packet을 재전송한다. |
- Receiver -> packet이 순서대로 오지 않더라도 받아 receiver window내의 데이터라면 받는다. (1,2,3 이 RW에 속하는 상태에서 1,3이 오게 되면 3은 2가 오지 않은 상태지만 receiver측에서는 받게된다.) -> 각각의 packet에 대해 ACK을 보낸다. |
'네트워크 > 강의정리' 카테고리의 다른 글
CH3. Transport Layer(4) (0) | 2020.01.05 |
---|---|
CH3. Transport Layer(3) (0) | 2020.01.03 |
CH3. Transport Layer(1) (0) | 2019.12.30 |
CH2. Application Layer (3) (0) | 2019.12.29 |
CH2. Application Layer (2) (0) | 2019.12.23 |