Utilization이라는건 전체 시간 중에 sender가 네트워크를 사용하는 시간이야 ! => 효율의 문제
따라서 tcp는 파이프라인 프로토콜 처럼 되어있다 !
리시버의 동작을 보면 정말 멍청해 ~
패킷 0번 기다리고, 만약 왔어. 그다음은 무조건 1번 기다려 센더가 패킷 1번을 길게 요청하고 패킷 2번 , 3번이 만약 이런식으로 오면, 리시버는 2번 기다리고 있는데 3번 오면 버려버려
만약 중간에 6번이 없어졌다? 그럼 window size 만큼 돌아와서 (n개 만큼) 다시 6번 챙기고 간다 => go back N
window 안에 있는 패킷들은 버퍼에 저장해놔야 한다.
왜? 센더인 내가 리시버가 받았는지 확인한지 못한 애들이야. 재전송 해야할 수도 있다.
문제) 유실된건 6번 하나인데 7,8,9, 다 재전송 하고 있다. 만약 실제 구현할 때는 window size 한꺼번에 몇개씩 되는데, 하나 유실로 다시 재전송은 너무 멍청하다.
이를 보안한게
go back n은 유실됐을 때 n개 재전송
selective repeat 은 유실된 걸 재전송
경우1) ACK6을 못 받고, ACK7을 받았을 때,
리시버가 ㅇㅇ ! ACK7번은 받은거다 !!
우리가 드디어 sequence number에 대해서 생각할 때가 왔다 ~~
sequence number은 헤더의 필드로 들어가기 때문에, 크기가 작아야 한다.
우리가 원하는건 최소한의 범위를 가진 sqnumber 만을 쓰자 0,1,2,3,0,1,2,3,0,1,2,3 처럼
그 기준은 어떻게 정해야 할까?
sq number은 window size의 약 2배 정도 크기면 되지 않을까? 정도의 느낌,, !