IP协议以及ICMP、Ping

一、IP协议

IP协议是TCP/IP协议的动力,它为·上层协议提供不可靠、无状态、无链接的服务。

无状态是指通信双方传输数据状态的不同步,因此所有的IP数据报的发送、传输和接受都是相互独立的、没有上下文关系。这意味着它无法处理乱序和重复的IP数据报。但无状态的优点也很明显:简单、高效,我们无需为保持通信而分配一些内核资源,传输数据时也不用携带状态信息。

不可靠体现在IP协议不能保证数据准确的发送到接受端。如果IP发送端检测到发送失败,它只会通知上层协议发送失败,而不会试图重传。

IPV4的头部结构:

IP分片:当IP数据报的长度超过帧的MTU是,它将会被分片传输。分片的过程可能发生在发送端上,也可能发生在中转路由器上。

MTU的长度为1500个字节。IP报头长度为20,所以传输数据部分最多是1480。

 

二、ICMP协议

ICMP(Internet Control Message Protocol)因特网控制报文协议。它是IPv4协议族中的一个子协议,用于IP主机、路由器之间传递控制消息。控制消息是在网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然不传输用户数据,但是对于用户数据的传递起着重要的作用。 
ICMP协议与ARP协议不同,ICMP靠IP协议来完成任务,所以ICMP报文中要封装IP头部。它与传输层协议(如TCP和UDP)的目的不同,一般不用来在端系统之间传送数据,不被用户网络程序直接使用,除了想Ping和Tracert这样的诊断程序。

三、Ping

ping命令用来测试主机之间网络的连通性。执行ping指令会使用ICMP传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信

ping 程序使用 ICMP 协议的强制回显请求数据报以使主机或网关发送一份  ICMP
       的回显应答。回显请求数据报("    pings    ")含有一个    IP    及    ICMP
       的报头,后跟一个``时间值关键字''然后是一段任意长度的填充字节用于把保持分
组长度为16的整数倍。以下是程序的选项:

       -c     count              在发送(和接收)了正好数量为              count
              的回显应答分组后停止操作。在发送了                         count
              个分组后没有收到任何分组的特别情况是发送导致了终止(选程主机或网关
不可达)。

       -d     在所用的套接字上使用 SO_DEBUG 选项。

       -f     以高速方式来作                                              ping
              。以分组返回的速度来输出其它分组或每秒输出百次。当收到每个回显应答并打印一个退格符时,对每个回显请求都打印一个句点``.''。这可以快速显示出丢弃了多
少个分组,只有超级用户可以用这个选项。这(操作)对网络要求非常苛刻,应该慎重使用。

-i     wait                  在发送每个分组时等待                  wait
              个秒数。缺省值为每个分组等待一秒。此选项与-f选项不能同时使用。

       -l     preload        如果指定        preload        ,那么        ping
              程序在开始正常运行模式前尽可能快地发送分组。同样只有超级用户可以用
这个选项。

       -n     只以数字形式输出信息。这样就不尝试去查找主机名了。

       -p     pattern
              可以指定最多16个填充字节用于保持分组长度为16的整数倍。在网络上诊断与数据相关问题时此选项很有用。例如``-p
              ff''将使发出的分组都用全1填充数据区。

       -q     静态输出。在程序启动和结束时只显示摘要行。