Linux에는 UDP 페이로드에 크기 제한이 있습니까?

Linux에는 UDP 페이로드에 크기 제한이 있습니까?

저는 데비안을 사용하고 있습니다. Python의 scapy 모듈을 사용하여 UDP 패킷을 공식화하고 약 1500바이트보다 큰 페이로드를 추가하면 UDP의 최대 페이로드가 65,507바이트로 가정되어 있음에도 불구하고 내 프로그램이 충돌합니다.

대규모 UDP 패킷을 생성하지 못하게 하는 일부 Linux 설정이 있습니까? 설정을 조정할 수 있나요?

편집: 저는 Python의 루프에서 패킷을 생성하고 있으며 시간과 경쟁하고 있습니다. 이 프로그램은 설정된 한도(예: 초당 500패킷)에서 트래픽을 생성하도록 설계된 트래픽 생성기입니다. 예를 들어, 초당 500개의 패킷으로 설정되면 다음 초에는 또 다른 500개의 패킷을 생성하므로 뒤처질 수 없으므로 500개의 패킷을 생성하는 데 1초밖에 시간이 없습니다.

이제 초당 400개의 패킷 제한에 도달했고 더 이상 따라갈 수 없습니다. 몇 가지 이론적 솔루션이 있습니다.

  1. 멀티스레딩 사용 - 이에 대해 살펴보겠습니다.
  2. 더 큰 UDP 패킷을 생성하여 오버헤드를 줄입니다.
    • 내가 지금 무슨 일을 하고 있는 걸까

예, 페이로드가 1500바이트보다 큰 UDP 패킷을 만들면 조각화됩니다. 내가 이해하는 한, 커널이 이를 처리합니다. 나는 C로 작성된 커널이 하나의 큰 UDP 패킷을 여러 패킷으로 분할하고 Python이 여러 개의 작은 패킷을 생성할 수 있는 것보다 더 빠르게 전송할 수 있기를 원합니다. 이것이 사실인지는 확실하지 않지만 커널에 대규모 UDP 패킷 삭제를 중지하고 실제로 조각화하여 전송하도록 지시할 수 있다고 가정하면 테스트하기는 쉽습니다.

답변1

~에서https://en.wikipedia.org/wiki/Maximum_transmission_unit#Applicability-- "이더넷의 경우 최대 프레임 크기는 1518바이트이며 그 중 18바이트는 오버헤드(헤더 및 FCS)이므로 MTU는 1500바이트가 됩니다."

관련 정보