IP协议详解

系列文章目录

一、IP协议是什么?

IP协议是TCP/IP协议族的核心协议,也是socket网络编程的基础之一。

二、IP服务的特点

IP协议是TCP/IP协议族的基石,它为上层提供无状态、无连接、不可靠的服务

无状态:指IP通信双方不同步传输数据的状态信息,因此所有IP数据报的发送,传输,接收都是相互独立的。这种服务最大缺点是无法处理乱序和重复的IP数据报。优点是简单高效,和UDP协议与HTTP协议相同,都是无状态协议。

无连接:指IP通信双方都不长久的维持对方的任何信息。这表示上层协议每次发送数据,都需要明确指定对方的IP地址。

不可靠:指IP协议不能IP数据报能准确到达接收端,只是会尽最大努力。一旦发送失败,就通知上层协议,而不会试图重发。

三、IPv4头部结构

在这里插入图片描述

  • 4位版本号:指定IP协议的版本,对于IPv4来说,其值为4,其它IPv4扩展版本则具有不同的版本号(如SIP协议和PIP协议)
  • 4位头部长度:表示IP头部有多少个32bit字(4字节)。因为4位最大15,所以IP头部最长为60字节。
  • 8位服务类型:3位优先级权字段(现已被忽略),4位TOS字段和1位保留字段(必须置0).4位TOS字段分别表示:最小延迟,最大吞吐量、最高可靠性和最小费用,其中最多1个能置为1。
  • 16位总长度:指整个IP数据包的长度,字节为单位。最长65535字节,由于长度超过MTU的数据报将被分片传输,所以实际传输的长度没有达到最大值。
  • 16位标识:唯一标识主机发送的每个数据报。初始值由系统随机生成,每发送一个数据报,其值加一。该值在数据报分片时被复制到每个分片中,因此同一个数据报的所有分片标识值都相同
  • 3位标志:第一位保留,第二位表示禁止分片,如果设置了该位,IP数据报长度超过MTU将被丢弃,返回错误。第三位表示更多分片,除了最后一个分片,其它都要置它为1.
  • 13位分片偏移:该分片相较于原始IP数据报开始处(仅指数据部分)的偏移。实际偏移值是该值左移3位得到。因此除了最后一个分片,每个分片的数据部分长度必须是8的整数倍。
  • 8位生存时间:数据报到达目的地之前允许经过的路由器跳数。每经过一个路由,该值减一,为0时被丢弃。并返回TCMP错误报文。
  • 8位协议:用于区分上层协议。ICMP为1,TCP为6,UDP为17。
  • 16位头部校验和:由发送端填充,接收端对其使用CRC算法检验数据是否被损坏。
  • 32位源端IP地址:标识数据报的发送端。在传输过程中保持不变
  • 32位源目的端IP地址:标识数据报的接收端。在传输过程中保持不变
  • 选项字段:可变长的可选信息,最多40字节。可用的IP选项有:
    • 记录路由:将数据包经由的所有路由器IP填入该段。
    • 时间戳:将数据报在每个路由器被转发时的时间填入该段。
    • 松散源路由选择:指定路由器IP地址列表,数据报发送过程中必须经过其中所有路由器
    • 严格源路由选择:类似上面,数据报只能经过被指定的路由器。

四、抓取一个TCP协议包

开启一个Ubuntu终端,通过tcpdump抓取:

tcpdump -ntx

再开启一个终端执行wget命令:

wget www.baidu.com

出现以下TCP协议数据包
在这里插入图片描述
数据解析:

  • 0x4:Ipv4协议
  • 0x5:头部长度为5个32位,即20字节
  • 0x00:未开启任何服务类型
  • 0x003C:IP数据报总长度为60字节
  • 0x7f16:该数据报标识
  • 0x4:禁止分片
  • 0x000:分片偏移为0
  • 0x40:生存时间为64跳
  • 0x06:指定上层为IP协议
  • 0x68b1:IP头部数据校验和
  • 0xc0a88f00:32位源端IP地址
  • 0xdcb52696:32位目的端IP地址

五、IP分片

当IP数据报的长度超过帧的MTU时,它将被分片传输。分片可能发生在发送端,也可能发生在中转路由器上,而且在传输过程中可能被多次分片,只有在最终目标机器上,这些分片才会在内核中被IP模块重新组装。

IP头部中的数据报标识、标志、和片偏移为IP的分片和重组提供了足够的信息。

一个数据报的每个分片都具有自己的IP头部,且具有相同的标识,但具有不同的片偏移,除了最后一个分片之外都设置了MF标志。

六、IP路由

IP模块工作流程:
在这里插入图片描述
从右向左看:

IP模块收到来自数据链路层的IP数据报,首先对数据报的头部做CRC校验,无误后开始分析头部具体信息。

如果IP数据报头部设置了源站选路选项,则IP模块调用数据报转发子模块来处理该数据报。

如果该数据报的头部目标IP地址是本机的某个IP地址,或者广播地址,则IP模块根据数据报协议字段来决定发送给哪个上层应用。如果不是本机,则掉用数据报转发子模块来处理该数据报。

数据报转发模块检查系统是否允许转发,不允许则丢弃。允许则将该数据报执行一些操作,就将它交给IP数据报输出模块。

IP数据报根据路由表计算下一跳路由。

IP输出队列存放所有等待发送的IP数据报。

1)、路由机制

执行route可查看路由表:
在这里插入图片描述
每一项包括8个字段:

  • Destination:目标网络或主机
  • Gateway:网关地址,*表示目标与本机在同一个网络上,不需要路由。
  • Genmask:网络掩码
  • Flags:路由标志,U:该路由活动,H:该路由目标是一个主机,G:该路由目标是网关,D:该路由是重定向产生的,M:该路由被重定向修改过
  • Metric:路由距离,达到目标网络所需的中转数
  • Ref:路由项被引用的次数
  • Use:该路由项被使用的次数
  • Iface:该路由对应的输出网卡接口

路由机制:

  1. 查找路由表中和数据报的目标IP完全匹配的主机IP地址,如果找到,就直接使用该项,没有就到第二步
  2. 查找路由表中和目标IP具有相同的网路ID的IP地址,如Gateway,有就使用,否则来到第三步
  3. 选择默认路由项,这一般为网关。

七、IPv6

IPv6由40个字节的固定头部和可变长的扩展头部组成。
在这里插入图片描述

  • 4位版本号:IP协议版本,IPv6值为6
  • 8位通信类型:指示数据通信类型和优先级
  • 20位流标志:用于某些对连接服务质量有特殊要求的通信。
  • 16位净荷长度:指IPv6扩展头部和应用程序数据长度之和,不包含固定头部长度
  • 8位下一个包头:指紧跟IPv6固定头部的包头类型,如扩展头或上层协议。
  • 8位跳数限制:和IPv4的TTL含义相同
  • 后两项IP地址:IPv6地址一般用16进制字符串表示,用‘:’分割为8组,每组两个字节。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

余识-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值