본 내용은 한양대학교 이석복 교수님의 강의를 참고하여 정리하였습니다. 교재는 Pearson/Addison Wesley에서 출판한 Computer networking : a top-down approach입니다.
Segment의 크기
- Segment의 크기는 크면 좋다. 왜냐하면, header가 TCP의 40byte이므로 데이터가 크면 overhead가 적기 때문이다.
- 200byte를 보낼 때, 2개로 (40 + 100)byte, (40 + 100)byte 나누어 보내는 것보다 (40 + 200)byte로 보내는 것이 낫다.
1) Sender 측면에서 segement 크기 조절
- Nagle's algorithm
* TCP/IP에서 사용
* 네트워크 상황과 application에서 보내는 속도를 고려하여 segment 크기 결정
+ 네트워크 속도에 비해 application에서 보내는 속도가 빠르면, segment의 크기를 늘린다.
+ 네트워크 속도에 비해 application에서 보내는 속도가 느리면, segemnt의 크기를 줄인다.
* 동작
1. 처음 보낼 때, segment의 크기가 작든 크든 그냥 보낸다.
2. segment를 보낸 후,
2-1. ACK가 오기 전에 segment의 max size를 다 채우면 그냥 보낸다.
2-2. ACK가 온 후에 max size이하의 segment를 그냥 보낸다.
3. 2번을 반복한다.
* Sudo code
1
2
3
4
5
6
7
8
9
10
11
|
if there is new data to send then
if the window size ≥ MSS and available data is ≥ MSS then
send complete MSS segment now
else
if there is unconfirmed data still in the pipe then
enqueue data in the buffer until an acknowledge is received
else
send data immediately
end if
end if
end if
|
cs |
en.wikipedia.org/wiki/Nagle%27s_algorithm
1) Receiver 측면에서 segment 크기 조절
- 이 방법들은 segment 크기 조절에 주로 쓰이는 방법이 아니고, 좀 더 효율적으로 만들어 보는 방법들이다. 주로 쓰이는 방법은 Nagle's algorithm이다.
- Clark's solution
* Receiver buffer에 segment max size 공간이 남을 때까지 또는 어느 정도 공간이 남을 때까지 기다린다. 기다리는 동안 Receive window(rwnd) = 0이라고 sender에게 보낸다. 그리고 목표치 공간이 생기면 sender에게 보내달라고 한다. Sender는 목표치 공간 만큼 보낸다.
* 이유 : Receiver buffer에 1byte의 공간만 있다고 가정하자. Sender는 header가 40byte이고 데이터가 1byte인 segment를 보낸다. overhead이고 비효율적이다. 따라서 receiver buffer가 어느 정도까지 빌 때까지 rwnd=0으로 보낸다. 그리고 목표치 공간이 생기면 sender에게 데이터를 보내달라고 한다.
- Delayed ACK
* Sender에게 segment가 오면 바로 ACK를 보내지 않고 500ms을 기다린다. 기다리는 동안에 모인 데이터들을 뭉쳐서 segment로 보낸다. 500ms를 기다려도 오지 않으면 그냥 보낸다.
'Software Courses > Network' 카테고리의 다른 글
Network : router (0) | 2021.01.06 |
---|---|
Network : overview (0) | 2021.01.06 |
Transport : TCP (0) | 2021.01.03 |
Transport : RDT (Reliable Data Transfer) (0) | 2021.01.02 |
Transport : UDP (0) | 2020.12.31 |