2012-10-09 4 views
1

여러 개의 UDP 패킷을 하나로 결합하는 데 장점이 있습니까? 큰 패킷이 빠져 나간다면 모든 패킷이 느슨해진다는 것을 알지만, 한 패킷으로 모두 보낼 수있는 가능성이 있습니까? 큰 사람이 길을 잃을 확률이 낮습니까?UDP 패킷 결합?

+1

udp는 "최선의 노력"프로토콜입니다. 바쁜 라우터는 큰 udp 패킷을 삭제할 수 있지만 작은 라우터는 트래픽이 중단 될 수 있습니다.아무런 보증도하지 않습니다. –

+0

댓글이 없으면이 최선의 답변을 드릴 것입니다 – Lauer

답변

0

이는 전송 응용 프로그램의 재량에 달려 있습니다.

큰 패킷은 기본 네트워크의 MTU로 제한됩니다. 예 : 이론적으로 UDP 패킷의 크기는 64k이지만 이더넷 프레임은 1500 바이트에 불과합니다. 그래서 나는 이것이 실제적인 기능이 아니라고 생각합니다.

+0

Im 애플리케이션을 작성 중입니다. – Lauer

+0

IPv4 UDP 패킷 페이로드의 이론적 최대 크기는 65535-20-8이며, 먼저 IP 헤더와 UDP 헤더를 뺀 값으로 65509 바이트를 뺍니다. – EJP

0

일반적으로 네트워킹 채널은 초당 전송할 수있는 패킷 속도로 제한됩니다. 따라서 초당 수백만 개의 메시지를 보내려는 경우 일반적으로 큰 패킷 손실없이 실행하기 위해 적은 수의 패킷으로 결합하려고합니다.

일반적으로 Windows는 UDP의 경우 초당 10,000 패킷을 좋아하지 않지만 기가비트 네트워크를 대형 MTU 패킷으로 포화시킬 수 있습니다.

0

여러 개의 UDP 패킷을 하나의 패킷으로 결합하는 데 이점이 있습니까?

데이터 그램 당 8 바이트 인 UDP 헤더를 절약 할 수 있으므로 전선을 통해 전송되는 데이터의 양이 줄어 듭니다. IP 레이어에서 단편화를 피하기 위해 MTU가 IP 및 UDP 헤더 크기 이상을 보내지 않도록하십시오.

또한, 표준 POSIX 소켓 API는 하나가 전체 대기 시간 (통화 당 몇 마이크로의 순서를) 감소 적은 시스템 호출을 수행 적은 데이터 그램을 보내도록 보내거나 하나 개의 데이터 그램을 수신 한 send/sendto/sendmsg() 시스템 호출을 필요로한다. 3.0에서 시작하는 Linux 커널은 sendmsg()recvmmsg()을 제공하여 하나의 시스템 호출에서 여러 데이터 그램을 보내고받습니다.

나는 큰 패킷이 다음 courrupted 도착하면 내가 참

을 모두 잃어 버릴 것을 알고있다. 그러나 프로토콜이 UDP 데이터 그램 손실에 전혀 대처할 수 없다면 그다지 중요하지 않을 수 있습니다. 하나의 데이터 그램이 사라지 자마자 어쨌든 고장났습니다.

0

패킷 크기가 작은 (100 바이트 미만) 상황에서는 중요합니다. IP/UDP 헤더는 적어도 28 바이트입니다.

서버에 스트리밍 연결이 있다고 가정하면 각 패킷에는 50 바이트가 포함되고 소프트웨어는 초당 1000 패킷으로 패킷을 전송합니다.

실제 페이로드는 1000 * 50 bytes = 50000 bytes. 헤더 오버 헤드 1000 * 28 = 28000 bytes 총 바이트 :

헤더 오버 헤드 1000/3 * 28 = 9333 총 바이트 : 50000 + 9333 ===> 60 KBps

이 -in 50000 + 28000 = 87000 ==> 87 KBps

하면 하나 개의 패킷으로 각각 3 개 UDP 패킷을 결합 할 수 있습니다 상상 일부 응용 프로그램은 대역폭의 상당 부분을 절약합니다.