2016-11-15 3 views
1

다른 정보를 사용할 수 있음을 알리기 위해 다른 서버로 UDP 패킷을 보내려고합니다. 패킷의 데이터는 약 100 바이트 정도의 매우 작습니다. 기본적으로 이벤트 유형 및 UUID입니다.하나의 패킷을 보내는 중, 크기는 얼마입니까?

단일 패킷 (What is the largest Safe UDP Packet Size on the Internet)에 정보가 얼마나 들어가는 지에 대한 제한 사항을 알고 있으며 문제가있는 것 같지 않습니다. 그리고 UDP 패킷이 삭제 될 수 있음을 알고 있습니다. 제 경우에는 패킷이 새 데이터에 대해 얼마나 빨리 알 수 있는지 제안하는 것입니다. 패킷을 잃으면 응용 프로그램이 느리게 응답하지만, 사물을 부수 지 말라.

그 점을 염두에두고, 제 질문은 그 패킷의 크기가 얼마나 중요한지입니다. 정보를 JSON으로 인코딩하면 약 75-100 바이트가되는 것처럼 보입니다. 나는 또한 훨씬 작을 원시 이진 형식으로 정보를 인코딩 할 수 있습니다 (아마도 30 바이트 이하의 내용으로 맞출 수 있습니다).

페이로드가 100 바이트 인 UDP 패킷이 30 바이트 페이로드보다 "느리게"이동합니까? 나는 각 패킷에 오버 헤드가 있음을 알고 있지만 이미 조각화를 피하면 패킷 크기가 성능에 얼마나 많은 영향을 미치는지 분명하지 않습니다 (분명히 일이 느리고 신뢰성이 떨어집니다). 페이로드의 크기가 패킷 손실 가능성에 영향을 줄 수 있습니까?

요약하면 좀 더 복잡하지만 더 간결한 형식을 만드는 것이 더 좋은지 또는 JSON을 사용하여 응용 프로그램이 발전함에 따라 이전 버전과의 호환성을 유지하고 수정하기가 더 쉬울 지 결정하려고합니다. 각 패킷의 크기면에서

+1

당신이 언급 한 제한점보다 훨씬 중요하지 않습니다. 이더넷은 또한 * 최소 * 크기를 가지고 있음을 알아야합니다. 따라서 실제로 크기를 작게 설정하면 전혀 효과가 없을 수 있습니다. – EJP

+0

이것에 대해 조금 더 생각해 보면, 네트워크가 포화 상태가 아닌 경우 거의 차이가 없을 것입니다. 패킷이 전송되고 길면 길어질수록 상대적으로 몇 나노초 (1Gb 네트워크에서 비트 당 약 1 나노초)가 걸릴 수 있습니다. 이러한 패킷이 네트워크를 포화 시키면 60 %의 추가 공간이 중요해질 수 있습니다 (크기가 작아 네트워크 포화를 피할 수 있음). 그렇지 않으면 실제 효과가없는 것처럼 보입니다. 내 유스 케이스가 네트워크를 전혀 포화 상태로 만들지는 않을 것이라고 생각하지만 실제로 생각하지는 않았다. –

답변

0

약 100 바이트 또는 30 바이트를 말하는 데이터의 크기는 중요하지 않습니다. 그것은 당신의 어플리케이션을 더 낮거나 더 높은 성능으로 만들지 않을 것입니다. 또한 크기는 라우터에서 데이터 그램이 삭제 될 가능성에 영향을주지 않습니다. 라우터는 혼잡이있을 때 데이터 그램을 버립니다.

그러나 응용 프로그램에 따라 단일 UDP 메시지로 더 많은 이벤트를 보낼 수도 있습니다. 여기에는 100 Byte와 30 Byte 사이의 차이가 있습니다. UDP 데이터 그램은 IP 헤더의 경우 20 바이트, UDP 헤더의 경우 8 바이트 (+ 이더넷 헤더)의 오버 헤드를 갖습니다. 네트워크 및 CPU 리소스를보다 효율적으로 활용하려면 데이터 그램 당 더 많은 데이터를 보내는 것이 좋습니다. 따라서 30 바이트를 사용하면 단일 데이터 그램에서 ~ 3 배 더 많은 데이터를 보낼 수 있습니다. 이것은 성능에 영향을 미칩니다. 하나의 데이터 그램에서 N 이벤트를 보내면 네트워크 리소스와 CPU 리소스 (메시지 감소, 메시지 오버 헤드 감소, 인터럽트 감소 등)를 절약 할 수 있습니다. 하나의 데이터 그램에 N 개의 이벤트를 압축하면 데이터 그램 당 권장되는 제한은 MTU이며 이더넷의 경우 1500 바이트 IP 헤더의 경우 20 바이트, UDP 헤더의 경우 8 바이트를 고려하여 최대 1472 바이트 (100 바이트의 14 개 이벤트)의 페이로드를 보낼 수 있습니다.