网络层-IP

IPv4数据报格式

  • 版本号:4比特,规定了数据报的IP协议版本,不同IP版本使用不同的数据报格式;
  • 首部长度:由于IPv4数据报可能包含一些可选项(包含在头部),需要用4比特来确定IP数据报头部和载体的部分在哪;
  • 服务类型:用于区分不同类型的IP数据报,例如实时数据报与非实时流量;
  • 数据报长度:整个IP数据报的总长度(头部+数据)。该字段有16比特,所以理论最大长度为65,535字节。然而由于数据链路层的限制,通常不会超过1500字节。有了首部长度和数据报长度,便可以在一系列字节流中找到数据报和数据报之间的界限;
  • 标识、标志、片偏移:这三个字段与IP分片有关。
    • 标识:用来对片进行标记,具有相同标识的片来自于同一数据报;
    • 标志:0或1,如果为1表示该片后还有片,如果为0则为同一数据报中最后一个片;
    • 片偏移:用来标识每个片占据原始数据包的第几个字节,第一个片的偏移量为0
  • 寿命:用来确保数据报不会永远在网络中循环,每当一台路由器处理数据报,寿命就会减1;
  • 协议:该字段仅当一个IP数据报到达目的地才会有用。该字段指示了IP数据报的数据部分应该交给哪个特定的上层协议。例如,值为6交给TCP,为17交给UDP,为1交给ICMP;
  • 首部检验和:用于判断是否出现错误;
  • 源和目的IP地址:发送方和接收方的IP地址;
  • 选项:该字段允许IP首部被拓展,但通常很少使用;
  • 数据:要付给上层应用的数据。
    在这里插入图片描述

IPV4数据分片

由于存在多种不同的数据链路层协议,并且不同的链路层协议承载的分组大小不同,因此需要对IP数据报进行分片,使得每个片的大小能够被对应的数据链路所承担。

当生成一个数据报时,发送主机会对它发送的每个数据报的标识号加1.当对一个数据报分片时,每个片都保留着大部分原始的数据报头(原地址、目标地址等)。由于IP是一种不可靠的服务,为了确保已经收到最后一个片,将最后一个片的标志设置为0,其它的设置为1。为了让目标主机确定是否丢失了一个片,使用偏移字段指定该字段应该放在初始IP数据报的哪个位置。

特殊的IP地址

私网地址

  • 10.0.0.0-10.255.255.255
  • 172.16.0.0-172.31.255.255
  • 192.168.0.0-192.168.255.255

有限广播地址

255.255.255.255(有限广播地址),向本网段内的所有主机转发数据包

直接广播地址

主机位全为1,表示直接广播地址,用于向指定网络内全部主机发送IP数据包

有限广播地址和直接广播地址的区别在于,有限广播地址不需要知道网络号,直接在本网段内进行广播,而直接广播需要知道网段,在指定网段下进行广播

其它特殊IP地址

0.0.0.0 所有不清楚的主机IP地址均可以使用0.0.0.0来表示,例如主机刚接入网络还未分配具体IP地址时,使用0.0.0.0来表示

127.0.0.1,指电脑本身,也叫“localhost”,以127开头的均为保留地址

主机位全为0,表示网段

IPv6数据报格式

IPv6相对于IPv4来说主要增加了地址容量,删除了报头中的可选项,固定为40字节。

  • 版本:使用4比特来标识IP版本号。IPv6将该字段设置为6;
  • 流量类型:服务类型;
  • 流标签:用于设置数据报的优先权;
  • 有效载荷长度:16比特的无符号整数,给出了数据的字节数量;
  • 下一个首部:数据报的内容需要交给哪个协议进行处理;
  • 跳限制:生命周期;
  • 源地址和目标地址:128位的IP地址;
  • 数据:数据报的有效载荷部分

可以看出,IPv6移除了与分片相关的字段。于是只能在源和目的地进行分片和重装,如果路由器收到一个过大的报文,则会发送一个“分组太大”的ICMP差错报文。并且移除了首部校验和,这是因为TCP和数据链路层均对数据进行了检验。移除了选项字段,但它并没有消失,而是可能出现在“下一个首部”位置。

在这里插入图片描述

IPv4到IPv6进行迁移

双栈协议

如果一个主机同时启用IPv4和IPv6,则使用了双栈技术。当一个报文到达该主机时,数据链路层检查包头,如果报头表示其为IPv4,则交由IPv4进行处理,反之则交由IPv6处理。

隧道技术

当一个发送IPv6报文的主机希望将数据发送到另一个可以接受IPv6报文的主机上时,中间可能会通过很多弃用IPv4的路由器。为此,需要先将IPv6报文套上IPv4的报文头,并将协议号设置为41以表示其中的报文为IPv6数据报。等到数据报到达目的地,对报头进行检查,然后拆包得到IPv6报文。

ICMP(因特网控制报文协议)

ICMP依靠IP协议来传输消息,并不通过TCP,因此可以将其看作是一个介于网络层和传输层之间的协议,也可以将其看作是一个网络层的协议。ICMP通常用于返回的错误信息或是分析路由。ICMP错误消息总是包括了源数据并返回给发送者。

ICMP报文格式如下所示:

  • Type:ICMP的类型,标识生成的错误报文类型;
  • Code:进一步划分ICMP的类型,用该字段来查找产生错误的原因。例如,ICMP的目标不可达type可以把code设置为1至15来表示不同的意思;
  • Checksum:校验和,用于错误检查;
  • 内容:四字节字段,内容根据ICMP类型和代码而有所不同

在这里插入图片描述

常见的ICMP报文如下所示:

当使用ping命令时,就会发送一个type为8,code为0的ICMP报文到指定主机。在正常情况下,目标主机会发送一个type为0,code为0的ICMP回显回答。

在这里插入图片描述

使用ping命令去访问www.baidu.com(110.242.68.4)的抓包结果如下所示:

可以看到向baidu发送的ICMP数据报的type为8,code为0,并且IP协议的protocol为1,指的是该IP数据包承载了ICMP的数据报。

在这里插入图片描述

也可以看到baidu发回来的ICMP数据报的type为0,code为0,IP协议的protocol为1。

在这里插入图片描述

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值