网络层解读
基本介绍
概述
当两台主机之间的距离较远(如相隔几十或几百公里,甚至几千公里)时,就需要另一种结构的网络,即广域网。广域网尚无严格的定义。通常是指覆盖范围很广(远超过一个城市的范围)的长距离的单个网络。它由一些结点交换机以及连接这些交换机的高速链路组成。将两个或多个计算机网络互联起来,就构成了互联网(internet) 。不同网络的“互连” 是它的最主要的特征。

相距较远的局域网通过路由器与广域网相连,组成了一个覆盖范围很广的互联网。
- 广域网是单个网络,使用结点交换机连接各主机。互联网是使用路由器来连接多个网络。从转发分组的角度,结点交换机和路由器具有相似的工作原理。
- 结点交换机是在单个网络中转发分组,路由器是在多个网络构成的互联网中转发分组。位于一个广域网(或一个局域网)上的主机在该网内进行通信时,只需要使用其网络的物理地址即可。
实现网络互联的中间设备,称为中间设备或中继系统。
根据中间设备所在的层次,有以下几种中间设备:
- 物理层的中间设备——转发器(repeater)
- 数据链路层的中间设备——网桥或桥接器(bridge)
- 网络层的中间设备——路由器(router)
- 网络层以上层次的中间设备——网关(gateway)
当中继系统是转发器或网桥时,一般并不认为是网络互连。因为这仅仅是把一个网络扩大了,它仍然是一个网络。
使用网关实现网络互连。当N个网络互连时,由于每两个网络之间都需要有一个协议转换器,N个网络就需要有多达N(N-1)个协议转换器。为了简化网关的设计,提出了一种互联网的概念。采用互联网概念时,只要实现网络与互联网协议之间的互相转换。对于N个网络互连,所需2N个协议转换器就行了。因特网就是采用这种做法。凡参与互连的所有计算机网络都使用相同的网际协议IP。那么,参与互连的计算机网络相当于构成了一个虚拟互连网络。

虚拟互连网络的意义
- 所谓虚拟互连网络也就是逻辑互连网络,它的意思就是互连起来的各种物理网络的异构性本来是客观存在的,但是我们利用 IP 协议就可以使这些性能各异的网络从用户看起来好像是一个统一的网络。
- 使用 IP 协议的虚拟互连网络可简称为 IP 网。
- 使用虚拟互连网络的好处是:当互联网上的主机进行通信时,就好像在一个网络上通信一样,而看不见互连的各具体的网络异构细节。
- 如果在这种覆盖全球的IP网的上层使用TCP协议,那么就是现在的因特网(Internet)。
如果我们只从网络层考虑问题,那么 IP 数据报就可以想象是在网络层中传送。

服务与功能
在计算机网络领域,网络层应该向运输层提供怎样的服务(“面向连接”还是“无连接”)曾引起了长期的争论。争论焦点的实质就是:在计算机通信中,可靠交付应当由谁来负责?是网络还是端系统呢?
- 基于电信网的成功经验,让网络负责可靠交付,采用面向连接的通信方式 。建立虚电路(Virtual Circuit) ,以保证双方通信所需的一切网络资源。如果再使用可靠传输的网络协议,就可使所发送的分组无差错按序到达终点。
- 如果网络层不提供可靠传送,则可简化路由器设计,端-端可靠通信由传输层负责。这就是在因特网中采用数据报的设计思路,有着许多好处。
虚电路服务
虚电路服务是网络层向运输层提供的一种使所有分组都能按序到达目的端系统的可靠的数据传送方式。
在进行虚电路服务时,两个端系统之间存在着一条为之服务的虚电路。虚电路只是一条逻辑上的连接,分组都沿着这条逻辑连接按照存储转发方式传送,并不是真正建立了一条物理连接。而电路交换的电话通信是先建立了一条真正的连接。因此分组交换的虚连接和电路交换的连接只是类似,并不完全相同

数据报服务
数据报服务是网络层向上提供简单灵活的、无连接的、尽力而为交付的服务方式。被因特网所采纳。
- 网络在发送分组时不需要先建立连接。每一个分组(即 IP 数据报)都携带完整的目的地址信息,选择不同的路由独立发送,与其前后的分组无关(不进行编号)。
- 网络层不提供服务质量的承诺。由于每个分组经历的路由不同,到达目的端系统的所花费的时间也不一样,所传送的分组可能出错、丢失、重复和失序(不按序到达终点),当然也不保证分组传送的时限
提供尽力而为服务的好处
- 由于传输网络不提供端到端的可靠传输服务,这就使网络中的路由器可以做得比较简单,而且价格低廉(与电信网的交换机相比较)。
- 如果主机(即端系统)中的进程之间的通信需要是可靠的,那么就由网络的主机中的运输层负责(包括差错处理、流量控制等)。
- 网络的造价大大降低,运行方式灵活,能够适应多种应用。
- 因特网能够发展到今日的规模,充分证明了当初采用这种设计思路的正确性

H1 发送给 H2 的分组可能沿着不同路径传送
| 项 目 | 虚电路服务 | 数据报服务 |
| 设计思路 | 可靠通信由网络负责 | 可靠通信由用户主机负责 |
| 端-端连接 | 需要 | 不需要 |
| 目的地址 | 仅在建立连接时使用,每个分组使用虚电路号 | 每个分组都要携带完整的目的地址 |
| 分组传送 | 所有分组均按所建的同一条(虚)路由进行传送 | 每个分组独立选择路由进行传送 |
| 结点故障 | 虚电路中故障的结点均不能工作 | 故障的结点可能会丢失分组,也会改变某些路由 |
| 分组顺序 | 按序发送、按序接收 | 按序发送,但不一定按序接收 |
| 端到端的差错控制和流量控制 | 由网络负责,也可由用户主机负责 | 由用户主机负责 |
网际协议IPv4
网际协议IP是TCP/IP体系中两个重要的协议之一。IPv4虽有最终被IPv6取代的趋势,但它仍是当前使用的最重要的因特网协议。 与IP配套使用的还有3个协议:
- 地址解析协议ARP(Address Resolution Protocol)
- 因特网控制报文协议ICMP(Internet Control Message Protocol)
- 网际组管理协议IGMP(Internet Group Management Protocol)
网际协议 IP 及其配套协议

分类的 IP 地址
IPv4协议的主要特点
- IPv4协议提供一种无连接的分组传送服务,它不承诺服务质量的保证(即不保证传送的分组可能出现的差错、丢失、重复和失序等现象)。
- IPv4协议是点–点的网络层通信协议。
- Pv4协议对传输层屏蔽了物理网络的差异。网络层借助IP协议向传输层提供统一的IP分组,这有助于各种异构网络的互连。
IP地址及其指派
- 把整个因特网可看成为一个单一的、抽象的网络。IP地址就是给每个连接在因特网上的主机(或路由器)分配一个在全世界范围内惟一的标识符(长度为32bit ) 。
- P地址由因特网名字与号码指派公司ICANN (Internet Corporation for Assigned Names and Numbers)进行分配的。
IP 地址的编址方法
IP地址的编址经历两个阶段:
- 分类IP地址。这是最基本的编址方法,1981年通过了相应的标准协议。基于分类IP地址存在的问题,又于1985年提出子网划分、变长子网划分的概念。这是对最基本的分类编址方法的改进。
- 无分类IP地址。1993年又提出新的分类编址方法,且得到了推广应用。
所谓“分类的IP地址”就是将IP地址划分为若干个固定类,每一类地址都由两个固定长度的字段组成,其中一个字段是网络号net-id,它标志某主机(或路由器)所连接的网络编号;另一个字段则是主机号host-id,它标志该主机(或路由器)在该类网络中的编号。n这种两级结构的 IP 地址可以记为:IP 地址 ::= { <网络号>, <主机号>}
其中,::= 代表“定义为”
IPv4 地址的格式
IP地址的表示——点分十进制记法

辨别IP地址类别
如果给出了二进制记法表示的地址,用它的前几位表示地址的类别。

- A、00000001 00001011 00001011 11101111 A类
- B、11000001 10000011 00011011 11111111 C类
- C、10100111 11011011 10001011 01101111 B类
- D、11110011 10011011 11111011 00001111 E类
如果用点分十进制记法表示的地址,则按第1 字节表示的十进制数来判定地址类别:A类为0~127,B类为128~191,C类为192~223,D类为224~239,E类为240~255。
- A、227.12.14.87 D类
- B、193.14.56.22 C类
- C、14.23.120.8 A类
- D、252.5.15.111 E类
- E、134.11.78.56 B类
特殊的IP地址
- 网络号为全0是指本网络。
- 网络号和主机号均为全1是对本网络进行广播(路由器不转发)。
- A类网络地址127是一个保留地址,用于本地软件环回测试之用。
- 主机号为全1是指对本网络号的所有主机进行广播。
| 地址 类别 | 可指派的 最多网络数 | 第一个可指派的网络号 | 最后一个可指派的网络号 | 每个网络中可拥有的最多主机数 | 约占整个地址空间的比例 |
| A | 125(27-3) | 1 | 126 | 16777214(224-2) | 50% |
| B | 16367(216-17) | 128.1 | 191.255 | 65534(216-2) | 25% |
| C | 2096895(221-257) | 192.0.1 | 223.255.255 | 254(28-2) | 12.5% |
IP 地址的一些重要特点
- IP地址是一种分级式地址结构。它不反映主机(或路由器)所在地理位置的任何信息。每一个IP地址都由网络号和主机号两部分组成。这种地址结构的好处是:P地址管理机构在分配IP地址时只分配网络号(第一级),而剩下的主机号(第二级)则由得到该网络号的单位自行分配。这样就方便了IP 地址的管理。路由器仅根据目的主机所连接的网络号来转发分组(而不考虑目的主机号),这样就可以使路由表中的项目数大幅度减少,从而减小了路由表所占的存储空间。
- IP地址指明了一台主机(或路由器)和一条链路的接口。 当一个主机同时连接到两个网络上时,该主机就必须同时具有两个相应的IP地址,其网络号 net-id必须是不同的。这种主机称为多归属主机(multihomed host)。由于一个路由器至少应当连接到两个网络,因此一个路由器至少也应当有两个不同的 IP 地址
- 凡是分配到网络号net-id的网络,无论是范围很小的局域网,还是可能覆盖很大地理范围的广域网,其地位都是平等的。
- 按照因特网的观点,一个网络是指具有相同网络号的主机的集合。用转发器或网桥连接起来的若干个局域网仍为一个网络,因为这些局域网都具有相同的网络号 net-id。
划分子网
三级IP地址的构成
当初的IP地址设计不够合理,主要体现在:
- IP地址使用存在很大的浪费,地址空间的利用率很低。如10BASE-T允许加接的主机数是1024,但必须申请一个B类地址,则浪费了64510个地址,地址空间利用率仅为1.56%。
- 两级IP地址不够灵活。某单位对本单位的网络都有按部门划分的要求,但两级IP地址结构中并没有作出这方面的规定。
- 按物理网络分配一个网络号的方法,将导致路由表的表项越来越多,这不易改善网络性能
1985年起,IP地址格式中增加了一个“子网号字段”,使IP地址由两级结构变为三级结构。这种做法叫作划分子网。
划分子网的基本思路
- 划分子网纯属单位内部的事情,对本单位以外的网络是完全透明的。
- 划分子网的方法是把主机号字段的前若干个比特作为子网号字段,则 IP地址∷={<网络号>,<子网号>,<主机号>}
- 凡从其他网络传送到本单位网络某主机的IP数据报,仍然按IP数据报的目的网络号传送到连接在本单位网络上的路由器。此路由器收到 IP 数据报后,再按目的网络号 net-id 和子网号 subnet-id 找到目的子网。最后将 IP 数据报直接交付给目的主机。
举例:一个未划分子网的 B 类网络145.13.0.0

划分为三个子网后,对外仍是一个网络

子网掩码
- 由于IP地址本身以及数据报的首部都没有包含任何关于划分子网的信息,所以从一个IP数据报的首部无法判断源主机或目的主机所连接的网络是否进行了子网的划分。
- 如何知道子网的划分呢?划分子网要用到子网掩码(subnet mask)的概念。使用子网掩码(subnet mask)可以很方便地找出 IP 地址中的子网部分。
TCP/IP体系规定:子网掩码是一个32位二进制数,由一串连续的“1”后随一串连续的“0”组成。其中“1”对应于IP地址的网络号和子网号字段,而“0”对应于IP地址的主机号字段。

子网掩码采用点分十进制表示法(255.255.0.0),也可用网络前缀(或斜线)标记法(135.41.0.0/16)
IP 地址的各字段和子网掩码的关系

(IP地址) AND (子网掩码) =网络地址

子网掩码是一个网络或一个子网的重要属性。因特网标准规定:所有的网络都必须有一个子网掩码,它包含在路由表中。
划分子网的概念也适用于未划分子网的情况。未划分子网的网络可使用默认子网掩码。使用子网掩码可简化路由器的路由选择算法。
A、B和C类IP地址的默认子网掩码

划分子网的利弊
- 利——增加了灵活性。
- 弊——减少了能够连接在网络上的主机总数。例如,一个B类地址最多可连接65534台主机,但当划分成4个子网后,实际连接的主机为32764台,这是因为[RFC950]规定:子网号不能为全0或全1
变长子网
子网划分的最初目的是把基于类的网络划分为几个规模相同的子网。其实,创建不同规模的子网可避免IP地址的浪费。对于不同规模子网的划分,称为变长子网划分。
变长子网划分是一种用不同长度的子网掩码来分配子网号字段的技术。它是对已划分好的子网使用不同的子网掩码做进一步划分形成不同规模的网络,从而提高IP地址资源的利用率。
变长子网划分举例
一个B类IP地址为136.48.0.0的网络,需配置为1个能容纳32000台主机的子网,15个能容纳2000台主机的子网和8个能容纳254台主机的子网。

无分类编址
划分子网的概念缓解了当初IP地址设计不够合理所引起的矛盾,而变长子网的概念也符合用户对IP地址实际使用的需要。但这些措施并未从根本上缓解因特网在发展过程中所遇到的困难。
在1992年,因特网面临着三个急需解决的问题:①B类地址在1992年已分配过半。②因特网主干网上的路由表中的项目数急剧增长。③2011年2月,IANA宣布IPv4地址已经耗尽。
IETF在VLSM的基础上,又研究出采用无分类编址方法来解决上述问题。无分类编址方法的正式名字无分类域间路由选择CIDR(Classless Inter-Domain Routing),其新文档是RFC 4632
CIDR的主要设计思想
CIDR取消了以往对IP地址进行分类以及划分子网的概念,利用各种长度的“网络前缀 (network-pfefix) ”来代替分类地址中的网络号和子网号。
IP地址∷={<网络前缀>,<主机号>}
CIDR把网络前缀相同的连续的IP地址块组成“CIDR地址块”。一个CIDR地址块可用它的起始地址和块中地址数来表示。如136.48.32.8/20表示某CIDR地址块中的一个地址。
无分类编址的表示
CDIR使用网络前缀标记法(或斜线记法),即在IP地址后面加一斜线“/”再加一数字,此数字是网络前缀的位数,如136.48.52.36,表示该IP地址的前20位是网络前缀。
CIDR还使用其他几种表示形式。一种是把点分十进制中的低位连续的“0”省去,如20.0.0.0/10,可表示为20/10。另一种是在网络前缀后面加一个星号“*”,如00010100 00*,其中星号前是网络前缀,星号表示IP地址中的主机号
CIDR地址块举例
- 136.48.32.8/20表示在这个32位的IP地址中,前20位为网络前缀,后12位为主机号。每个地址块共有212个地址,其起始地址是136.48.32.0。
- 在不需要指出地址块的起始地址时,也可将这样的地址块简称为“/20地址块”。
- 136.48.32.0/20地址块的最小地址:136.48.32.0,最大地址:136.48.47.255。
- 全 0 和全 1 的主机号地址一般不使用。
136.48.32.8/20地址块含有212个地址

路由聚合(route aggregation)
一个CIDR地址块可以包含很多地址,路由表的表项也可改用地址块来表示。这种地址聚合称为路由聚合。路由聚合既利于缩短路由表,又可减少查找路由表的时间,从而提高了因特网的性能。路由聚合也称为构建超网(supernetting)。
CIDR 虽然不使用子网概念,但仍然使用“掩码”这一名词(只是不叫子网掩码而已)。如对 /20 地址块,它的掩码是20个连续的1。斜线记法中的数字就是掩码中 1 的个数。
构建超网
在“包含的地址数中”,包含了全0和全1地址。表中K表示210(即1024)。网络前缀小于13或大于27的地址较少使用。 CIDR地址块中的地址数一定是2的整数次幂。
- 前缀长度不超过23位的CIDR地址块都包含了相当于多个C类地址。这些C类地址合起来就构成了超网。
- 网络前缀越短,其地址块所包含的地址数就越多。而在三级结构的IP地址中,划分子网是使网络前缀变长。
- 使用CIDR构建超网,必须得到相关路由器及其协议的支持。
使用CIDR地址块的最大好处
- 可以更有效地分配IPv4的地址空间。如某单位需用900个IP地址。未使用CIDR时,ISP可以分配给该单位一个B类地址或者4个C类地址。但使用了CIDR,ISP可分配给该单位一个地址块208.18.128.0/22,它包含1024个IP地址,相当于4个连续的/24地址块。
- 可以按网络所在的地理位置来分配地址块,这可以大大缩小路由表所占的空间,即减少路由表的表项数。
地址解释和地址转换
IP 地址与硬件地址的区别

举例:用两个路由器互连三个局域网

通信的路径是:H1→经过 R1 转发→再经过 R2 转发→ H2
从协议栈的层次上看数据的流动

从虚拟的 IP 层上看 IP 数据报的流动
在链路上看 MAC 帧的流动

在IP层抽象的互联网上只能看到IP数据报。图中的IP1→IP2表示从源地址IP1到目的地址IP2,两个路由器的IP地址并不出现在IP数据报的首部中

- 虽然在IP数据报首部有源站IP地址,但路由器只根据目的站的IP地址的网络号进行路由选择
- 在具体的物理网络的链路层,只能看见MAC帧,而看不见IP数据报(它被封装在MAC帧中) 。MAC帧在传送过程中,首部中填写的硬件地址HAx是不同的。
- 尽管互连在一起的网络的硬件地址体系各不相同,但IP层抽象的互联网屏蔽了下层很复杂的细节。在抽象的网络层上讨论问题,就能够使用统一的、抽象的 IP 地址来研究主机与主机或主机与路由器之间的通信。
地址解析协议ARP
无论网络层使用什么协议,在实际网络的链路上传送数据帧时,最终使用的是硬件地址。
IP地址(32位)和硬件地址(48位)之间不存在简单的映射关系。ARP协议解决IP地址与物理地址的映射,而RARP协议解决物理地址与IP地址的映射。
每一个主机都设有一个ARP高速缓存(cache),里面存放有所在的局域网上的各主机和路由器的IP地址到硬件地址的映射表。
当主机A欲向本局域网上的某个主机B发送IP数据报时,就先在其ARP高速缓存中查看有无主机B的IP地址。如有,即得到其对应的硬件地址,再将此硬件地址写入MAC帧,然后通过局域网将该 MAC帧发往此硬件地址。否则该主机运行ARP协议。

ARP 高速缓存
- 高速缓存的作用就在于可以减少网络上的通信量。如果不用高速缓存,因为网络上的任一台主机要进行通信都需用广播方式发送ARP请求分组,这将导致网络上的通信量大大增加。用了高速缓存就可将得到的地址映射存入待用。
- ARP对存放在高速缓存中的“IP地址-硬件地址”映射表设置生存时间(如10min)。凡超过生存时间的表项即删除。被删除的表项无原则重新建立,也要经过前面所述的查找目的主机硬件地址的过程。
ARP是解决同一个局域网上的主机(或路由器)的IP地址和硬件地址的映射问题。只要主机或路由器与本网络上的另一个已知IP地址的主机或路由器进行通信,ARP协议就会自动地将该 IP地址解析为链路层所需要的硬件地址。
如果所要找的目的主机和源主机不在同一个局域网上,那么就要通过ARP找到一个位于本局域网上的某个路由器的硬件地址,然后把分组发送给这个路由器,让这个路由器把分组转发给下一个网络。剩下的工作就由下一个网络来做。
从IP地址到硬件地址的解析是自动进行的,这种地址解析过程对用户对透明的。
使用 ARP 的四种典型情况
- 发送方是主机,要把IP数据报发送到本网络上的另一个主机。这时用 ARP 找到目的主机的硬件地址。
- 发送方是主机,要把 IP 数据报发送到另一个网络上的一个主机。这时用 ARP 找到本网络上的一个路由器的硬件地址。剩下的工作由这个路由器来完成。
- 发送方是路由器,要把 IP 数据报转发到本网络上的一个主机。这时用 ARP 找到目的主机的硬件地址。
- 发送方是路由器,要把 IP 数据报转发到另一个网络上的一个主机。这时用 ARP 找到本网络上另一个路由器的硬件地址。剩下的工作由这个路由器来完成。
为什么不直接使用硬件地址进行通信?
- 由于全世界存在着各式各样的网络,它们使用不同的硬件地址。要使这些异构网络能够互相通信就必须进行非常复杂的硬件地址转换工作,这几乎是不可能的事。
- IP编址解决了这个复杂问题。凡连接到因特网的主机都拥有统一的IP地址,它们之间的通信就像连接在同一个网络上那样简单方便,因为调用ARP来寻找某个路由器或主机的硬件地址都是由计算机软件自动进行的,对用户来说是看不见这种调用过程的。
虚拟专用网VPN
由于IP地址的紧缺,一个机构能够申请到的IP地址数往往远小于本机构所拥有的主机数。
考虑到因特网安全性并不很好,一个机构内也并不需要把所有的主机都接入到外部的因特网。
因而就有一个设想:假定一个机构内部的计算机通信也采用TCP/IP协议,那么从原则上讲,对于这些仅在机构内部使用的计算机就可以由本机构自行分配其IP地址
两种地址
- 本地地址--仅在本机构内部使用的IP地址,可由本机构自行分配,不必向因特网的管理机构申请。
- 全球地址--全球唯一的IP地址,必须向因特网的管理机构申请。
存在的问题:在内部使用的本地地址有可能与因特网中某个IP地址重合,从而出现地址的二义性问题
解决的办法:RFC1918指明了一些专用地址。专用地址只能用作本地地址而不能用作全球地址。在因特网中的所有路由器,对目的地址是专用地址的数据报一律不进行转发。三个专用地址块,即ICANN预留的部分A、B和C类专用地址块。
- A类:10.0.0.0~10.255.255.255;
- B类:172.16.0.0~172.31.255.255;
- C类:192.168.0.0~192.168.255.255
采用这种专用IP地址的专用网称为拟专用网VPN。虚拟专用网VPN是建立在基础网络之上的一种功能性网络。它向使用者提供一般专用网所具有的功能,但本身却不是一个独立的物理网络,而是通过隧道技术,架构在公共网络服务商所提供的网络平台(如Internet、ATM和FR等)之上的逻辑网络。
虚拟专用网的两个含义:一是“虚拟”,因为整个VPN网上的任意两个结点之间的连接并没有传统专用网所需的端到端的物理链路,而是将它建立在分布广泛的公用网络的平台上;二是一个“专用网”,每个VPN用户都可以从临时的“专用网”上获得所需的资源。
构建虚拟专用网的注意事项
- 在不同网点的专用网之间进行通信,而需要通过公用的因特网,又有保密要求的,那么所有通过因特网的数据都必须加密。
- 一个机构要构建自己的VPN就必须为它的每一个场所购买专用的硬件和软件,并进行配置,使每一个场所的VPN系统都知道其他场所的地址。
虚拟专用网的特点
- 成本低廉,只需支付日常的上网费用。
- 得到最常用的网络协议的广泛支持。
- 具有身份验证、数据加密等安全可靠功能。
- 易于扩充和管理。
虚拟专用网的不足
- 安全性。由于因特网不是一个可信赖的安全网络,为确保数据传输的安全,应对入网传输的数据进行加密处理。
- 可管理性。VPN的管理要能够应对电信单位需求的快速变化,以避免额外的远行开支。
- 性能。由于ISP是“尽力交付”传输的IP分组,而跨因特网的传输性能又无法得到保证,且时有变化,所以附加的安全措施也会显著地降低性能。
利用隧道技术实现虚拟专用网
隧道的建立有两种方式:一种是自愿隧道,指服务器计算机或路由器可以通过发送VPN请求配置和创建的隧道;另一种是强制隧道,指由VPN服务提供商配置和创建的隧道。
隧道有两种类型:①点-点隧道。隧道由远程用户计算机延伸到企业服务器,由两边的设备负责隧道的建立,以及两点之间数据的加密和解密。②端-端隧道。隧道中止于防火墙等网络边缘设备,它的主要功能是连接两端的局域网。

IP 数据报的格式
IP数据报由首部和数据两部分组成。
IP数据报的首部
- 首部的前一部分为固定长度(20字节),这是所有IP数据报必须具有的。
- 首部固定部分的后面是选项和填充字段(长度可变) 。
- 数据部分的长度也是可变的

版本——4位,指IP协议的版本。目前广泛使用的协议版本号为4 (即IPv4)。通信双方的协议版本必须一致。
首部长度——4位,表示数据报首部的长度。因首部长度可表示的最大数值是15个单位(每单位为4 字节),所以IP的首部长度的最大值为60字节。当首部长度不足4字节的整数倍时,可利用填充字段加以填充补齐
区分服务——8位,表示对数据报的服务要求。前三位表示优先级(0~7,0最低),D、T、R和C分别表示对时延、吞吐量、可靠性和路由服务费用有选择的要求。最后一位未用。该字段只有当使用区分服务时才使用。
总长度——16位,指整个数据报(包括首部和数据)的长度,单位为字节。数据报的最大长度为65535字节(64KB)。总长度必须不超过数据链路层的最大传送单元MTU。当数据报长度超过MTU时,需对其分片,此时的总长度是指分片后的每一分片(包括首部与数据) 的长度
标识(identification) ——16位,它用于数据报各分片最终被重装成来原来的数据报。它是一个计数器,每产生一个数据报,计数器就加1,并将此值赋给标识字段。目的主机将相同标识字段值的各分片数据报最后进行正确地重装(合片)。
标志(flag) ——3位,目前只有后两位有意义。最低位记作 MF (More Fragment)。MF=1表示后面“还有分片”。MF=0表示已是最后一个分片。次低位是DF(Don‘t Fragment) 用来控制是否允许数据报分片。只有DF=0才允许分片。
片偏移——13位,指较长的分组在分片后某片在原分组中的相对位置。也就是说,相对于用户数据字段的起点,该片从何处开始,以便目的主机重装数据报。片偏移以8个字节为偏移单位。这就是说,每个分片的长度一定是8字节(64位)的整数倍。
IP数据报分片举例:
- 一数据报的总长度为 3820 字节,其数据部分的长度为 3800 字节(使用固定首部),需要分片为长度不超过 1420 字节的数据报片。
- 因固定首部长度为 20 字节,因此每个数据报片的数据部分长度不能超过 1400 字节。
- 于是分为 3 个数据报片,其数据部分的长度分别为 1400、1400 和 1000 字节。
- 原始数据报首部被复制为各数据报片的首部,但必须修改有关字段的值。

| 总长度 | 标识 | MF | DF | 片偏移 | |
| 原始数据报 | 3820 | 12345 | 0 | 0 | 0 |
| 数据报片1 | 1420 | 12345 | 1 | 0 | 0 |
| 数据报片2 | 1420 | 12345 | 1 | 0 | 175 |
| 数据报片3 | 1020 | 12345 | 0 | 0 | 350 |
生存时间——8位,记为TTL(Time To Live),表示该数据所在网络中的寿命。其单位最初是秒,但为了方便,现在都用“跳数”作为TTL的单位。数据报每经过一个路由器,其TTL值就减 1,当TTL值减为零时,就丢弃这个数据报。
相关文章:
网络层解读
基本介绍 概述 当两台主机之间的距离较远(如相隔几十或几百公里,甚至几千公里)时,就需要另一种结构的网络,即广域网。广域网尚无严格的定义。通常是指覆盖范围很广(远超过一个城市的范围)的长距离的单个网络。它由一些结点交换机以及连接这些…...
js for和forEach 跳出循环 替代方案
1 for循环跳出 for(let i0;i<10;i){if(i5){break;}console.log(i) }在函数中也可以return跳出循环 function fn(){for(let i0;i<10;i){if(i5){return;}console.log(i)} } fn()for ... of效果同上 2 forEach循环跳出 break会报错 [1,2,3,4,5,6,7,8,9,10].forEach(i>…...
如何使用ArcGIS Pro自动矢量化建筑
相信你在使用ArcGIS Pro的时候已经发现了一个问题,那就是ArcGIS Pro没有ArcScan,在ArcGIS Pro中,Esri确实已经移除了ArcScan,没有了ArcScan我们如何自动矢量化地图,从地图中提取建筑等要素呢,这里为大家介绍…...
交互式笔记Jupyter Notebook本地部署并实现公网远程访问内网服务器
最近,我发现了一个超级强大的人工智能学习网站。它以通俗易懂的方式呈现复杂的概念,而且内容风趣幽默。我觉得它对大家可能会有所帮助,所以我在此分享。点击这里跳转到网站。 文章目录 1.前言2.Jupyter Notebook的安装2.1 Jupyter Notebook下…...
41.坑王驾到第七期:uniapp开发微信小程序引用组件时报错!
一、错误再现 页面login引用了一个组件register,运行至小程序开发工具报错。 xxx.js 已被代码依赖分析忽略,无法被其他模块引用。 二、解决办法 在微信小程序的配置文件中找到setting节点,增加两个配置项。 “ignoreDevUnusedFiles”: fa…...
挂载与解挂载
一. 挂载 1.什么是挂载 将系统中的文件夹和磁盘做上关联,使用文件夹等于使用磁盘 2.mount 2.1 格式 mount [ -t 类型 ] 存储设备 挂载点目录 mount -o loop ISO镜像文件 挂载点目录 注意:指明要挂载的设备 设备文件:例如:/dev/sda5 卷…...
UGUI Panel的显示和隐藏优化
unity UI如何开启(显示)或者关闭(隐藏)Panel界面,相信大家都是知道的,但是如何做最好呢? 可能大家一般开启/关闭界面的方法就是直接SetActive吧。这样做通常是可以的,简答快速地解决…...
Linux:多文件编辑
多文件编辑 1.使用vim编辑多个文件 编辑多个文件有两种形式,一种是在进入vim前使用的参数就是多个文件。另一种就是进入vim后再编辑其他的文件。 同时创建两个新文件并编辑 $ vim 1.txt 2.txt默认进入1.txt文件的编辑界面 命令行模式下输入:n编辑2.txt文件&…...
模式识别与机器学习-概率图模型
模式识别与机器学习-概率图模型 概率图模型三大基本问题表示推断学习 有向概率图模型例子三种经典的图 HMMViterbi 算法 谨以此博客作为复习期间的记录 概率图模型三大基本问题 概率图模型通常涉及三个基本问题,即表示(Representation)、推…...
RK3566 ANDROID 11 平台上适配移远EC200A
适配前理清楚一下调试的流程: 1.该模块为LGA封装,需要控制上电时序模块才能正常上电工作: 2.模块供电正常后,读取模组的PID 和VID 并将其ID添加到内核里面,确保USB转Serial端口能够正常生成: 3.生成ttyUSB0~ttyUSB2端口后,确保rild进程正常启动,能够正常加载ril库; …...
存算分离降本增效,StarRocks 助力聚水潭 SaaS 业务服务化升级
作者:聚水潭数据研发负责人 溪竹 聚水潭是中国领先的 SaaS 软件服务商,核心产品是电商 ERP,协同350余家电商平台,为商家提供综合的信息化、数字化解决方案。公司是偏线下商家侧的 toB 服务商,员工人数超过3500…...
Linux 内核学习笔记: hlist 的理解
前言 最近阅读 Linux 内核时,遇到了 hlist,这个 hlist 用起来像是普通的链表,但是为何使用 hlist,hlist 是怎么工作的? 相关代码 hlist_add_head(&clk->clks_node, &core->clks); /*** clk_core_link_…...
几种设计模式介绍
前言 设计模式是一种用于解决软件开发中常见问题的通用解决方案,它可以提高代码的可读性、可维护性和可复用性。前端开发中也有很多应用设计模式的场景,比如处理异步操作、优化性能、封装复杂逻辑等。 前端开发中常见的设计模式有以下几种: …...
拓展操作(三) jenkins迁移到另一个机器
让清单成为一种习惯 互联网时代的变革,不再是简单的开发部署上线,持续,正确,安全地把事情做好尤其重要;把事情做好的前提是做一个可量化可执行的清单,让工程师就可以操作的清单而不是专家才能操作: 设定检查点 根据节点执行检查程序操作确认或边读边做 二者选其一不要太…...
重定向和转发的区别
重定向 1、定义 用户通过浏览器发送一个请求,Tomcat服务器接收这个请求,会给浏览器发送一个状态码302,并设置一个重定向的路径,浏览器如果接收到了这个302的状态码以后,就会去自动加载服务器设置的路径 一个页面跳转…...
基于ElementUI二次封装弹窗组件
效果: 一、自定义内容类型弹窗 <!-- title:对话框的标题confirmLoading:当前是否处于提交中titleCenter:对话框标题居中方式footerCenter:底部按钮的对其方式visible:是否显示弹窗width:设置…...
linux cat命令改变功能显示当前文件行号
linux的cat命令使用-n显示多个文件行号时,行号是累加的,不是到了新文件就重新计数。这样满足不了我的需求。如果到了新文件能够重新计数,就能使用-nf(在上一篇-f显示文件名功能的基础上)加| grep xxx,既能直…...
Django-REST-Framework 如何快速生成Swagger, ReDoc格式的 REST API 文档
1、API 接口文档的几种规范格式 前后端分离项目中,使用规范、便捷的API接口文档工具,可以有效提高团队工作效率。 标准化的API文档的益处: 允许开发人员以交互式的方式查看、测试API接口,以方便使用将所有可暴露的API接口进行分…...
SpringBoot当中的Singleton和Prototype详解
在Spring Boot中,Singleton和Prototype是两种Bean的作用域。这两种作用域决定了Spring容器如何创建和管理Bean的实例。 Singleton(单例): 当一个Bean被配置为Singleton作用域时,Spring容器在启动时只会创建该Bean的一个…...
LeetCode第1题 - 两数之和
题目 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。 示例 给定 nums [2, 7, 11, 15], …...
Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...
AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...
学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...
2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
ffmpeg(四):滤镜命令
FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...
Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...
