icmp

리눅스 이상한데?

오늘 보니 리눅스에서 사용하는 ping은 수신한 echo reply 메시지의 ICMP checksum을 확인하지 않는 듯하다.

커널 코드를(2.6.10)을 확인해 봤는데 통상 ICMP 패킷 수신을 위해 사용하는 raw socket으로 수신한 패킷을 복사해주는 시점은 IP header를 처리하는 와중.

결과적으로 수신한 echo reply에 대해서는 kernel도 ICMP checksum을 확인하지 않고, ping application도 확인하지 않는 듯. 뭐 이래.

반면 FreeBSD에서는 raw socket으로 패킷을 전달하는 시점이 ICMP protocol 처리한 후에 있는 듯하다. 그래서 ICMP checksum 에러난 패킷은 비정상적인 패킷이므로 application에게 주지도 않는 듯.

이게 맞다면 리눅스 좀 실망인데…