IP报头

      IP协议是TCP/IP协议族中最为核心的协议。所有的TCP、IP、ICMP、IGMP数据都以IP协议数据报格式发送。IP协议提供无连接、不可靠的数据报传送服务。

  • 不可靠:它不保证数据能成功地发送到目的地,IP协议仅提供最好地传输服务。如果发生某种错误,如路由器暂时用完缓冲区,IP协议的处理算法是:丢弃该数据报,然后发送ICMP消息给发送源(告诉发送源为什么丢弃).任何要求的可靠性都需要在上层实现(如TCP)
  • 无连接:IP协议并不维护后序数据报的状态信息,每个数据报的处理是独立的。举例:A向B依次发送1、2两个数据报,这两个数据报在网络上选择的路由线路可能不同,因此很有可能先收到报文2,后收到报文1。对于此种情况,IP协议并没有做处理

介绍两个常用的命令(在Linux系统下)

  1. ifconfig:配置和显示Linux内核中网络接口的网络参数。
  2. netstat:查看网络中系统状态信息

IP报头

1、4位版本:指明协议的版本,IPv4、IPv6

2、4位首部长度:IP报头的长度。4位就是最大可以表示到15,这个15对应的每一个1为4个字节。则说明IP报头最多60个字节

3、8位服务器类型:这8个位分为3个部分。

  • 第一部分:前三个字节,指明IP优先级
  • 第二部分:中间4个字节,即(4,5,6,7位)。这四个位是标记位,依次表示:需要最小延时、需要最大的吞吐量、需要最高的可靠性、最小的费用。比如某个报文需要最小的延时,则将第4位置为1。不过这些标记只是用户对网络的请求,网络并不保证实现。
  • 第三部分:最后一个字节,没有被用到

4、16位总长度:IP头部加上后边数据长度的总和。16位最大数值位65535,这就说明IP数据报的最大长度是65536个字节

5、16位标识:对IP包进行编号,当IP报文在路由上有可能大于某个路由器的MTU,此时会进行分片,分片后在数据包到达目的地后需要重组,如何保证两个被分片的IP包又正确的被重组在一起。这时就需要对IP包进行编号,发生分片时,这两个碎片包的编号是相同的,目的地对编号相同的碎片包进行重组就不会出错

6、3位标志:实际上用到了两个位,最后一个位没有用到。

  • df位:如果将该标记置为1,当IP包在某个路由器上需要分片时,则不进行分片,直接丢弃,然后向发送源发送差错信息即可。
  • mf位:当发生分片时,目的端需要确定是不是每一个分片都已到达,然后才可以进行重组。如果该位为1,则说明,还有分片没有到达,还得继续接收,如果收到该位为0的分片则说明所有分片都已收到。

7、13位偏移量:目的端对分片进行重组的时候,多个分片如何确定每个分片的位置?目的端收到的分片并不一定有序。这就是偏移量的作用,可以保证每个分片在正确的位置。

8、8位生存时间,即TTL,表示IP数据包在网络上允许经过的最大网段。因为数据在网络上发送时有可能出现环路,因此需要处理这种情况。每当IP数据包经过一个网段,就将TTL减1,减为0时则丢弃该报文。

9、8位协议:指明下一层协议或者说头部的类型,例如TCP(6)、ICMP(1)、UDP(17)

10、16位校验和:用来检验收到的数据是否被破坏。

11、32位源IP地址

12、32位目的IP地址

13、选项部分:40个字节,因为前边的部分不可缺少占了20个字节,因此选项部分最多40个字节。选项部分是一个可变长的可选信息,常见选项定义如下:

  • 记录路径
  • 时间戳
  • 宽松的源站选路(为数据报指定一系列必须经过的IP地址)
  • 严格的源站选路(只能经过指定的地址)

猜你喜欢

转载自blog.csdn.net/qq_41727218/article/details/88314319