'IP'에 해당되는 글 1건

  1. 2013.06.21 UDP Maximum message size

예전 자료들을 살펴보면, UDP 소켓에 대해서 getsockopt(...,  SO_MAX_MSG_SIZE,...)를 이용하면 최대메시지크기를 구할 수 있다고 나와있다.

하지만, 현재는 SO_MAX_MSG_SIZE란 옵션이 아예 없다. 적어도, Mac OS X 10.8과 Redhat EL6에 기본설치되는 라이브러리 헤더파일에는 존재하지 않는다. 그래서 컴파일이 안된다.

error: 'SO_MAX_MSG_SIZE' undefined.

언제부터 그 옵션이 사라졌는지는 모르겠지만, 중요한건 이식성문제때문에라도 사용하지 않아야겠다.

왜 없어졌는지 곰곰이 생각해보다, 구글링을 통해 자료를 좀 수집/정리 해보니 대강 다음과 같다.


UDP 패킷의 경우에는 TCP와 달리 전송할 패킷의 크기에 대해 신경써야 한다. 과거에 설령 getsockopt()로 구했다쳐도 그 크기를 마음대로 사용하기엔 무리가 있다. 즉, 중요한건 IP계층에서의 MTU에 대한 정의부분이다.  IPv4와 IPv6가 각각 576바이트, 1500바이트로 차이가 있다.

예를들어, 577바이트 데이터그램(UDP패킷)을 전송했을때 이 패킷이 목적지에서 수신될 수 있을지는 확신할 수 없게 된다.  MTU보다 큰 패킷은 MTU단위로 쪼개져서 전송이 일어나는데, 이 중 하나라도 전송에 실패하면 UDP는 그냥 전송에러로 끝나고, TCP는 재전송이 발생하게 된다.

결국 UDP를 사용하려면 가능한 MTU보다 작은 메시지를 전송하는 것으로 고려하는게 좋다는 것이다.

다만, 동영상과 같은 스트리밍을 전송할때 사용하는 UDP의 경우처럼 일부 유실되는 패킷이 전체 서비스에 미치는 영향이 미미한 정도로 판단된다면 사용해도 무방하다.

그렇다면, App 레이어에서 전송할 메시지의 크기는 대략 다음과 조건에 맞춰 계산하여 사용하는게 좋겠다.

    • IP 헤더크기 : IPv4의 경우 최소 20바이트, IPv6의 경우 최소 40바이트, 그리고, 최대크기는 60바이트가 된다.

    • UDP 헤더크기: 8바이트.

    • MTU 크기: 인터넷표준은 576바이트, IPS들이 종종 제시하는 값은 1500이다. 네트워크따라 천차만별!!!

App 레이어 메시지크기는 MTU 크기에 따라 결정되므로,

Maximum UDP packet size < (MTU - 68)

를 만족하는 작은 App메시지를 사용하도록 소스코드상에서 조정이 필요하겠다.

대략 계산은 나오지만 그렇다고 큰 기대는 하기 어렵다. 왜냐하면 네트워크 경로상의 가장 작은 MTU를 확인하기도 쉽지 않은데다, 언제든지 바뀔 수 있기 때문이다.

따라서, 전송성공율이 높아야 한다면 가능한 TCP를 사용하는 것이 바람직하고, 그렇지 않다면 UDP를 이용해도 무방하겠다. 역시나 필요성에 따라 선택!!!


'$ SaVvY > » computer' 카테고리의 다른 글

GDBM User Reference  (0) 2013.07.05
SyncMaster TA531 with Mac OS X  (1) 2013.07.01
가변매크로 __VA_ARGS__  (2) 2013.06.20
맥용 어플 추가...  (0) 2013.06.10
Mac에서 Office 문서 사용하기.  (0) 2012.06.13
Posted by Jason Ryu
,