2009-07-15 4 views
2

이후 ICMP 소켓 (SOCK_RAW 및 IPPROTO_ICMP)을 수신 할 때 ICMP 프로토콜에 "포트"개념이 없으므로 응용 프로그램이 수신 된 패킷이 부분이 아니라고 판단 할 수있는 방법은 무엇입니까? 또 다른 TCP/UDP/ 에서 동시에 발생하는 소켓 전송은 무엇입니까?ICMP 소켓에서 데이터 수신

예를 들어, 스레드가 2 개인 응용 프로그램이 있다고 가정합니다. 스레드 1 은 TCP 서버 소켓을 설정하고 연결된 클라이언트 에서 계속 데이터를 수신합니다. 스레드 2는 계속해서 에코 요청 패킷 (ping)을 ICMP 소켓을 사용하는 동일한 클라이언트에 보내고 반향 회신을 수신합니다. 스레드 2가 TCP 패킷 중 하나를 수신하지 못하게하려면 어떻게해야합니까?

답변

6

ICMP는 IP header의 프로토콜 필드에서 결정한 TCP 및 UDP와 다른 프로토콜입니다. IPPROTO_ICMP으로 소켓을 열면 프로토콜 필드가 ICMP로 설정된 IP 헤더가있는 패킷 만 전송하고 수신하도록 소켓에 알려줍니다.

마찬가지로 소켓은 IPPROTO_TCP 또는 IPPROTO_UDP으로 열리 며 IP 헤더에 TCP 또는 UDP로 설정된 프로토콜 필드가있는 패킷에만 각각 응답합니다.

0

유형에 대한 ICMP 헤더를 확인하고 ICMP 에코 응답 (유형 0)이 있는지 확인할 수 있습니다. 또한 ICMP에서 응답에는 처음에 보낸 요청이 포함됩니다.

2

수신 된 UDP & 원시 소켓으로 전달되지 않은 TCP 패킷. 프로세스가 UDP 또는 TCP 패킷을 포함하는 IP 데이터 그램을 읽으려는 경우 데이터 링크 계층에서 패킷을 읽어야합니다. 패킷이 다음은 커널에 의해 처리 층 (2)에 캐시되지 않으면 해당 링크

http://aschauf.landshut.org/fh/linux/udp_vs_raw/ch01s03.html

를 확인한다. 그리고 패킷이 ICMP 프로토콜이고 에코 요청이나 타임 스탬프 요청 또는 주소 마스크 요청 인 경우 커널에 의해 완전히 처리되고 그렇지 않으면 RAW 소켓으로 전달됩니다.

또 다른 하나의 커널은 IP의 기본적인 처리가 그들을 마침내

그램은 다음 아무것도 원시 소켓에 전달되는 조각에 도착하면 이루어집니다 원시 소켓에 전달됩니다 이해하지 않는 프로토콜 필드의 모든 데이터 그램 모든 단편이 만들어지고 재결합 될 때까지

자세한 내용을 보려면 this book을 읽으십시오.