Window Size

mohadang·2022년 6월 18일
0

네트워크

목록 보기
10/16
post-thumbnail

TCP가 UDP 보다 느린 이유

ACK를 기다리기 때문이다.

EX)
클라이언트가 data1, data2를 보내고 서버에서 모두 제대로 받으면 ACK3 을 클라이언트에게 보냄
ACK3은 data3부터 보내라는 의미
클라이언트는 ACK3을 받고 먼저 보낸 data2 까지 제대로 보내 졌다는 것을 확인 가능
클라이언트는 ACK를 받기 전까지는 다음 패킷을 전달 할 수 없다.

Window size

소켓을 생성하면 스트림 데이터를 받을 수 있다.
데이터를 받기 위해서는 버퍼가 필요하다.
TCP 계층 내부에서 소켓으로 전달된 데이터를 받기 위해 버퍼를 하나 생성하는데 이를 TCP 버퍼라고 한다.
스트림 데이터는 한번에 받을 수 없음으로 세그먼트로 나눠서 받아야 한다.
세그먼트로 나눠진 데이터를 TCP 버퍼에 차곡차곡 쌓아서 원래의 스트림 데이터로 복원 가능 하다.
하지만 TCP 버퍼는 어디까지나 버퍼이기에 길이 제한이 있다. 이 길이 제한을 Window Size라고 한다.
서버쪽에서 클라이언트측의 데이터를 받으면 잘 받았다고 ACK를 보내는데 이 ACK에 Window Size 정보도 같이 보낸다.
클라이언트 쪽에서 ACK를 받고난 후 다음 데이터를 보내려고 할때 ACK에 적힌 Window Size와 MSS를 비교한다.

Window Size가 더 큰 경우 : 서버에 send
MSS가 더 큰 경우 : 서버에 보내지 않고 대기

그래서 Window Size 지연이 안될려면 서버쪽에서 TCP 버퍼에 있는 데이터를 빨리 read 해서 비워야 한다.
네트워크 통신에서는 send 속도보다는 read 속도가 더 빨라야 한다.
장애가 발생하면 프로세스 자체에서 send, read 문제일 가능성이 크다.

profile
mohadang

0개의 댓글