在一个局域网中用ping命令 ping外网的时候(外网出去共用一个公网地址),回显信息是如何传回本机的。
一般UDP,TCP通信可以用NAPT,这里的端口是不是指UDP,TCP中的字段。但是Ping命令没有端口字段,那应该怎么实现。

解决方案 »

  1.   

    这个是用raw socket
    可参考一下:
    http://zhidao.baidu.com/question/16772008.html
      

  2.   

    http://blog.csdn.net/VisualEleven/archive/2010/04/21/5512462.aspx
      

  3.   

    可能我没说清楚,
    我要的不是如何编程实现ping
    我的意思是当我用ping命令ping外网时,回显信息是如何传回我主机的(主机在局域网中,整个局域网公用一个公网地址,ping的对象是外网的)。
    我想知道的是回显信息传回我主机的时候。当回显信息传到路由器的时候,路由器怎么判断这个回显信息是那个主机的。  一般TCP UDP通信是可以用 端口+IP地址 。 但ping命令发的是ICMP包,没有端口号,这个应该怎么识别。
      

  4.   


    ICMP不是还带着IP的嘛,再底层一点还有MAC地址。
      

  5.   

    打个比方说
    一个局域网的两台机子同时ping一个外网地址。他们出口地址都是一样的,当外网地址回显信息的时候,他回显ICMP包中目的IP地址和MAC地址都应该是一样的,都是局域网共同的出口地址
    那他怎么判断回显的包是那一台主机的。
      

  6.   


    引至网上:
    这个问题涉及到NAT和ICMP本身,内网发送ICMP请求的时候,在ICMP的包头中有一个identifier参数,这个值就像tcp/udp中的端口号一样用来标识一个会话,不同的内网主机ping会产生不同的identifier,而echo-reply中的identifier是与echo- request保持一致的,这时候做NAT的路由器就知道echo-reply该回到哪个内网主机了。至于echo request与echo reply的对应是根据ICMP包头中的sequence number做对应的.
      

  7.   


    参考一下:
    http://zhidao.baidu.com/question/19266489.html