오늘은 지난 포스팅에 이어서 포스팅 하겠습니다.
소켓 옵션 제어에 대해 포스팅 했는데,
오늘은 프로토콜 레벨 IPPROTO_TCP의 옵션에 대해 알아보겠습니다.
1. TCP_NODELAY
이름 처럼 TCP에서만 사용할 수 있습니다.
기본값은 0이라 사용하지 않으나, 사용하게 된다면, 네이글 알고리즘을 사용하게됩니다.
이 옵션은 네트워크를 통해 보내야 하는 패킷 수를 줄여 TCP/IP 네트워크의 효율성을 향상시킵니다.
네이글 알고리즘은 아래의 링크를 참고하시기 바랍니다.
https://en.wikipedia.org/wiki/Nagle's_algorithm
출처 : wikipedia
2. TCP_MAXSEG
이 옵션은 TCP의 데이터 전송 단위인 세그먼테이션의 크기(MSS)를 설정합니다.
보통의 OS에서는 이 옵션을 사용하지 않으면 MSS의 크기는 MTU에서 TCP와 IP 헤더 길이를 뺀 값이 정해집니다.
(1500(MTU크기)-20(TCP헤더길이)-20(IP헤더길이) = 1460(MSS))
만약 TCP 헤더에 옵션을 추가한다면, 이 길이까지 제외하여 계산이 됩니다.
그리고 MSS값을 MTU값보다 크게 지정하면 이 옵션은 적용되지 않습니다.
3. TCP_CORK
이 옵션은 작은 데이터를 모아두었다가 전송하는 기능입니다.
대용량 전송에서는 통신에 유리하다는 장점이 있습니다.
만약 400바이트의 데이터를 3번 전송한다고 가정해보겠습니다.
패킷은 TCP헤더와 IP헤더가 더해지기 때문에 440바이트가 3번 전송되므로, ( ( 40 + 400 ) + ( 40 + 400 ) + ( 40 + 400 ) ) 1320 바이트가 전송됩니다.
하지만 2번에 나눠 전송된다면, ( ( 40 + 400 + 400 ) + ( 40 + 400 ) ) 1280 바이트가 전송됩니다.
1번에 전송된다면, ( ( 40 + 400 + 400 + 400 ) ) 1240 바이트가 전송됩니다.
전송 횟수도 줄이고, 전송되는 크기도 줄일 수 있기 때문에 오버헤드는 상당히 줄어들게 됩니다.
많은 데이터를 보낼수록 오버헤드는 엄청나게 커진다고 볼 수 있습니다.
1,2부에서 설명한 옵션을 사용한다면, 조금이나마 더 네트워크 성능을 향상시킬 수 있습니다.
오늘 포스팅은 여기까지하겠습니다.
감사합니다.
'프로그래밍 > C' 카테고리의 다른 글
[C] likely, unlikely 함수 (0) | 2022.04.26 |
---|---|
[C] IPC 중에 어떤 걸 선택해야 할까 (0) | 2022.03.27 |
[C] 소켓 옵션 제어 ( getsockopt, setsockopt ) (1) (0) | 2022.02.23 |
[C] undefined reference to 에러 (2) | 2021.08.13 |
[C] cJSON을 사용하여 json 파싱 (0) | 2021.03.30 |