2013-03-27 2 views
1

this question에 암시되어 있듯이 체크섬은 이더넷 하드웨어에 의해 계산되고 확인되는 것 같습니다. 따라서 herehere처럼 AF_PACKET 소켓을 사용하여 프레임을 전송할 때 소프트웨어에서 생성해야한다는 가능성은 매우 낮습니다. 또한 Wireshark가 표시하지 않기 때문에 소켓이나 단순한 의미로는 수신 할 수 없다고 생각합니다.이더넷 체크섬이 AF_PACKET을 통해 노출됩니까?

누구나 확인할 수 있습니까? 마지막 두 링크에 표시된대로 직접 체크섬을 보내야합니까? 체크섬은 이더넷 어댑터에 의해 자동으로 만들어지고 검사됩니까?

답변

2

아니요, CRC를 포함 할 필요가 없습니다.

socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ALL))을 사용하여 Linux에서 패킷 소켓을 사용하는 경우 보낼 때 레이어 2 헤더를 제공해야합니다. 이 값은 struct ether_header으로 정의되고 netinet/if_ether.h이며 대상 호스트, 원본 호스트 및 유형이 포함됩니다. 프레임 체크 시퀀스는 포함되지 않으며 프리앰블, 프레임 시작 구분 기호 또는 트레일러입니다. 이들은 하드웨어에 의해 추가됩니다.

2

Linux에서 소켓 (AF_PACKET, SOCK_RAW, htobe16 (ETH_P_ALL))과 비슷한 케이스를 언급하면 ​​이더넷 체크섬을 계산할 필요가 없으므로 NIC 하드웨어/드라이버가이를 대신 수행합니다. 즉, 원시 소켓으로 보내기 전에 체크섬을 제외한 전체 데이터 링크 계층 프레임을 제공해야합니다.

관련 문제