*Pipelining : 성능의 향상
# 혼잡제어는 센더가 하는것으로 윈도우사이즈를 늘리고 줄이는것이다.
# 윈도우사이즈를 최대한 많이 줄인다면 1MSS까지 줄일수 있다.
# 센더의 상한성을 결정하는것은 리시버가 결정한다.
*Go-Back-N
sender
- pkt hrader에 k-bit seq # 를 갖는다.
- window : 전송되었지만 확인 안된 pkt를 위해 허용 할수있는 seq #의 범위
- ACK(n) : seq # n을 가진 ACK를 cumulative ACK로 인식한다.
- 수신측에서 보면 n을 포함한 n까지의 모든 pkt에 대한 ACK이다.
- 가장 오래된 수신확인 안된 timer를 단일 timer로 사용한다.
- Timeout 발생시 : 송신되었으나 ACK가 없는 모든 pkt를 재전송한다. (window내에 전송된 모든 pkt)
*GBN : sender FSM
*GBN : receiver FSM
ACK만 사용 : pkt가 수신될때 마다 항상 현재까지 수신된 가장 높은 seq#를 가진
pkt에 대한 ACK를 전송한다.
- 중복된 ACK가 발생 할 수 있다.
- 단지 expectedseqnum만을 유지한다. : 현재까지 수신된 pkt의 seq#의 다음 seq#
순서가
잘못 수신된 pkt의 처리
- 걍 버린다. : 순서가 잘못된 pkt에 대해서 buffering 할 필요가 없다.
- 현재까지 수신된 가장 큰 seq#에 대한 ACK를 재전송한다.
*GBN in action
*Selective Repeat
receiver가 수신한
pkt에 대한 개별적인 ACK가
요구 된다.
- 순서가 틀린 pkt들은 하위 seq#를 가진 pkt가 수신 될때까지 buffering되었다가 seq# 순서대로 상위 layer에 전달된다.
sender는
ACK가 없는 pkt에
대해서만 재전송한다.
- sender의 timer는 ACK가 없는 각각의 pkt에 대해서 유지된다.
sender
의 window
- send_base pkt에 대한 ACK를 받아야 이동한다. : GBN에서는 누적된 ACK를 이용 함으로 send_base pkt에 대한 ACK가 없어도 이동가능하다.
*Selective repeat :
sender receiver windows
// 확인 된 초록색 패킷은 타이머와 데이터를 없앤다.
// 각 패킷마다 타이머가 존재하며 ack가 안와서 타임아웃시 재전송한다.
*Selective repeat
sender
상위 layer에서 Data가 수신되면
- pkt의 다음 seq#를 검사 window내에 있으면 pkt를 전송한다.
timeout(n)
- pkt n을 재전송하고 timer를 restart한다.
ACK(n) 이 수신
- n이 윈도우에 있다면 pkt가 수신된것을 확인한다.
- n이 send_base와 같다면 send_base는 가장 작은 seq#를 갖는 미확인 pkt로 이동하고 window내에 이 전송 pkt가 있으면 전송한다.
receiver
pkt n [n in rcvbase, rcvbase+N-1]
- ACK(n)을 송신
- out-order인경우 buffering한다.
- in-ordert인 경우 필요하다면 buffer에 저장된 번호가 연속적인 pkt와 함께 상위 layer에 전달하고 rcv_base를 가장 낮은 seq#를 가진 미전송 pkt로 옮긴다.
pkt n [n in rcvbase-N, rcvbase-1]
- ACK(n)
이외의 경우
- 무시한다.
*repeat in action
*Selective repeat 의 문제
Example
- Seq# : 0, 1, 2, 3
- windows size = 3
- 왼쪽 두개의 경우 모두 seq#가 0으로 구별이 불가능하다.
Q: windows size와
seq#의 관계를 어떻게 하면 이문제를 해결 할 수 있는가
windows size를 seq#의 개수의 절반 이하로 한다.
*Selective repeat 의 문제
Example
- Seq# : 0, 1, 2, 3, 4
- windows size = 3
Example
- Seq# : 0, 1, 2, 3, 4
- windows size = 2
// 윈도우 사이즈를 2이하로 줄이면 이런 문제가 발생하지않는다. 하지만 그렇게 되면.. 너무 느리지않을까싶다. TCP는 go back n 과 select repeat 를 섞어서 사용한다.




댓글 없음:
댓글 쓰기