(I없는 전문가입니다. 다음은 완전히 잘못 될 수 있습니다.)
네트워크 인터페이스 (또는 드라이버 또는 이에 상응하는 무언가가) 들어오는 패킷의 체크섬을 확인해야합니다. 체크섬의 전체 비트 0은 "나가는 인터페이스가 체크섬을 생성하지 않았습니다."를 의미합니다. 인터페이스는 체크섬 필드에서 사용되는 보완 인코딩에서 모든 비트 (모든 비트 1, a.k.a.a.k.a. "음수 0"포함)를 검사해야하며 패킷이 검사에 실패하면 반드시 폐기해야합니다.
수신 인터페이스없이 검사로 패킷을 삭제 수도, [1] 또는 응용 프로그램으로 전달할 수있다 (또는이 가능한 경우, 나는 방법을 모른다하더라도 응용 프로그램이 그 원하는 동작을 구성 할 수있다 그것을하기 위해). 당신이 가능하게 제어 할 수 있습니다
있는 유일한 방법은 전송 인터페이스 이 나가는 패킷에 체크섬을 생성하는지 여부입니다. 플랫폼에 따라 다릅니다. 아래에 몇 가지 방법을 모았습니다. 주의 사항 강사.
플랫폼의 기본 동작을 사용하면 기본적으로 UDP 체크섬 생성이 생성됩니다. 여기에 돈을 넣을 것입니다.
[1] - RFC 8085는 "애플리케이션은 제로 체크섬 [RFC1122] 폐기 UDP 데이터 그램을 선택적으로 허용한다.
ndd -set /dev/udp udp_do_checksum 0
ndd
유틸리티는 Solaris에 고유 : "
This comp.protocols.tcp-ip post from 1999은 Solaris에서, 명령 줄에서 ndd
를 통해 나가는 패킷에 UDP 체크섬의 생성을 해제 세계적으로 수 있음을 시사한다 커널이고 Linux 또는 FreeBSD에는 존재하지 않으며 심지어 the Solaris docs라고해도
udp_do_checksum
This parameter controls whether UDP calculates the checksum
on outgoing UDP/IPv4 packets.
Default
1 (enabled)
When to Change
Do not change this parameter.
는 (리눅스와 FreeBSD, /dev/udp
"doesn't really exist"; it's a fiction provided by Bash.에 나는 Solaris에서 "실제로 존재"/dev/udp
여부를 알 수 없습니다.)
Microsoft's docs Windows에서 그 의미, 프로그래밍 방식으로 소켓 당 기준으로 UDP 체크섬 생성을 비활성화 할 수 있습니다 , 문서화 된 옵션을 사용하여 :
DWORD trueValue = 1;
int rc = setsockopt(fd, IPPROTO_UDP, UDP_NOCHECKSUM, (const char*)&yes, sizeof yes);
if (rc != 0) { perror("setsockopt"); abort(); }
This thread이 의미를 그 FreeBSD의에 (예를 들어, 맥 OS X) 당신은) 2018 월 달리 문서화되지 않은 (그러나 현재의 옵션을 사용하여 프로그래밍 방식으로 소켓 당 기준으로 검사 세대를 비활성화 할 수 있습니다
int yes = 1;
int rc = setsockopt(sock, IPPROTO_UDP, UDP_NOCKSUM, (void*)&yes, sizeof yes);
if (rc != 0) { perror("setsockopt"); abort(); }
마지막을 this thread는 의미가 리눅스 당신에 이 생성 또는 UDP의 checksu을 확인하지 않는 경우
int yes = 1;
int rc = setsockopt(sock, SOL_SOCKET, SO_NO_CHECK, (void*)&yes, sizeof yes);
if (rc != 0) { perror("setsockopt"); abort(); }
: (2018 월하지만 현재) 다른 문서화되지 않은 옵션을 사용하여 프로그래밍 방식으로 소켓 당 기준으로 검사 생성을 비활성화 할 수 있습니다 그렇다면 그것은 UDP가 아니라 다른 것입니다. vxworks가 UDP 체크섬을 검사하지 않는다는 공식 문서를 읽지 않았다면, 그것이 사실이라고 가정하는 것이 안전합니다. – nos
@nos not quiet 사실. 인터페이스에서 체크섬 생성을 해제 할 수 있습니다. – UDPLover
@UDPLover NIC 자체에서 CRC 생성을 끄기 때문에 OS가 대신 CRC 생성을 수행해야합니다. – nos