本文主要是介绍IP协议 | IP基础知识 | 路由控制 | IP分割处理 | IPv4首部格式 | IPv6首部格式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
- 1、IP即网络协议
- OSI参考模型
- IP的作用
- 网络层和数据链路层的关系
- 2、IP基础知识
- IP地址属于网络层地址
- 路由控制
- ■ 发送数据至最终目标地址
- ■ 一跳
- ■多跳
- ■ 路由控制表
- 数据链路的抽象化
- IP属于面向无连接型
- ■ 为了提高可靠性,上一层的TCP采用面向有连接型
- 3、IP地址的基础知识
- IP地址的定义
- IP地址由网络和主机两部分标识组成
- IP地址的分类
- ■ 关于分配IP主机地址的注意事项
- 广播地址
- ■ 两种广播
- IP多播
- ■ 同时发送提高效率
- ■ IP多播与地址
- 子网掩码
- ■ 分类造成浪费?
- ■ 子网与子网掩码
- CIDR与VLSM
- 全局地址与私有地址
- 4、路由控制
- IP地址与路由控制
- ■ 默认路由
- ■ 主机路由
- ■ 环回地址
- 路由控制表的聚合
- 5、IP分割处理与再构成处理
- 数据链路不同,MTU则相异
- IP报文的分片与重组
- 路径MTU发现
- 6、IPv6
- IPv6的特点
- IPv6中IP地址的标记方法
- IPv6地址的结构
- 全局单播地址
- 链路本地单播地址
- 唯一本地地址
- IPv6分段处理
- 7、IPv4首部
- ■ 版本(Version)
- ■ 首部长度(IHL:Internet Header Length)
- ■ 区分服务(TOS:Type Of Service)
- ■ DSCP段与ECN段
- ■ 总长度(Total Length)
- ■ 标识(ID:Identification)
- ■ 标志(Flags)
- ■ 片偏移(FO:Fragment Offset)
- ■ 生存时间(TTL:Time To Live)
- ■ 协议(Protocol)
- ■ 首部校验和(Header Checksum)
- ■ 源地址(Source Address)
- ■ 目标地址(Destination Address)
- ■ 可选项(Options)
- ■ 填充(Padding)
- ■ 数据(Data)
- 8、IPv6首部
- ■ 版本(Version)
- ■ 通信量类(Traffic Class)
- ■ 流标号(Flow Label)
- ■ 有效载荷长度(Payload Length)
- ■ 下一个首部(Next Header)
- ■ 跳数限制(Hop Limit)
- ■ 源地址(Source Address)
- ■ 目标地址(Destination Address)
- IPv6扩展首部
- ■ 跳数限制(Hop Limit)
- ■ 源地址(Source Address)
- ■ 目标地址(Destination Address)
- IPv6扩展首部
1、IP即网络协议
IP相当于OSI参考模型的第三层-网络层
网络层的主要作用是“实现终端节点之间的通信”。这种终端节点之间的通信也叫“点对点(end-to-end) 通信”。
OSI参考模型
IP的作用
IP的主要作用就是在复杂的网络环境中间数据包发送给最终的目标地址
- 主机:将那些配有IP地址的设备叫做“主机”,主机的定义应该是指**“配置有IP地址,但是不进行路由控制的设备”**
- 路由器:配有IP地址又具有路由控制能力的设备叫做“路由器”
网络层和数据链路层的关系
数据链路层提供直连两个设备之间的通信功能。与之相比,作为网络层的IP则负责在没有直连的两个网 络之间进行通信传输。
以火车票为例,仔细分析一下机票和火车票,不难发现,每张票只能够在某一限定区间内移动。此处的“区间内”就如同通信网络上的数据链路。而这个区间内的出发地点和目的地点就如同某一个数据链路的源地址和目标地址等首部信息(出发地点好比源MAC地址,目标地点好比目的MAC地址)。整个全程的行程表的作用就相当于网络层。
因此,只有两者兼备,既有某个区间的车票又有整个旅行的行程表才能到达目的地,与之类似,网络中也需要数据链路层和网络层这个分层才能实现向最终目标地址的通信。
2、IP基础知识
IP地址属于网络层地址
IP地址用于在“连接到网络中的所有主机中识 别出进行通信的目标地址”。因此,在TCP/IP通信中所有主机或路由器必须设定自己的IP地址(严格来说, 要针对每块网卡至少配置一个或一个以上的IP地址)。
在网桥或交换集线器等物理层或数据链路层数据包转发设备中,不需要设置IP地址(在用SNMP进行网路管理时有必要设置IP地址。不指定IP则无法利用IP进行网路管理)。因为这些设备只负责将IP包转化为0、1比特流转发或对数据链路帧的数据部分进行转发,而不需要应对IP协议(反之,这些设备既可以 在IPv4环境中使用,也可以在IPv6环境中使用。) 。
路由控制
路由控制(Routing)是指将分组数据发送到最终目标地址的功能。
即使网络非常复杂,也可以通过路由控制确定到达目标地址的通路。一旦这个路由控制的运行出现异常,分组数据极有可能“迷失”,无法到达 目标地址。因此,一个数据包之所以能够成功地到达最终的目标地址,全靠路由控制
■ 发送数据至最终目标地址
Hop译为中文叫“跳”。它是指网络中的一个区间。IP包正是在网络中一个个跳间被转发。因此IP路由也叫做多跳路由。在每一个区间内决定着包在下一跳被转发的路径。
■ 一跳
一跳(1 Hop)是指利用数据链路层以下分层的功能传输数据帧的一个区间。
它是主机或者路由器网卡不经其他路由器而能直接到达相邻主机或路由器网卡之间的一个区间
■多跳
多跳路由是指路由器或主机在转发IP数据包时只指定下一个路由器或主机,而不是将到最终目标地址为止的所有通路全都指定出来。因为每一个区间(跳)在转发IP数据包时会分别指定下一跳的操作,直至包达到最终的目标地址。
虽然已经确定了最终的目标车站,但是一开始还是不知道如何换乘才能到达这个终极目标地址。因此,工作人员给出的方法是首先去往最近的一个车站,再咨询这一车站的工作人员。而到了这个车站以后再询问工作人员如何才能达到最终的目标地址时,仍然得到同样的建议:乘坐某某线列车到某某 车站以后再询问那里的工作人员。
IP数据包的传输亦是如此。可以将旅行者看做IP数据包,将车站和工作人员看做路由器。当某个IP包到达路由器时,路由器首先查找其目标地址(IP包被转发到途中的某个路由器时,实际上是装入数据链路层的数据帧以后再被送出。以以太网为例,目标MAC地址就是下一个路由器的MAC地址) ,从而再决定下一步应该将这个包发往哪个路由器,然后将包发送过去。当这个IP包到达那个路由器以后,会再次经历查找下一目标地址的过程,并由该路由器转发给下一个被找到的路由器。这个过程可能会反复多次,直到找到最终的目标地址将数据包发送给这个节点
■ 路由控制表
为了将数据包发给目标主机,所有主机都维护着一张路由控制表(Routing Table)。该表记录IP数据在下一步应该发给哪个路由器。IP包将根据这个路由表在各个数据链路上传输。
数据链路的抽象化
数据链路的地址都可以被抽象化为IP地址
不同数据链路有个最大的区别,就是它们各自的最大传输单位(MTU:Maximum Transmission Unit)不同。就好像人们在邮寄包裹或行李时有各自的大小限制一样。
MTU的值在以太网中是1500字节,在FDDI中是4352字节,而ATM则为9180字节。IP的上一层可能会要求传送比这些MTU更多字节的数据,因此必须在线路上传送比包长还要小的MTU。即需要把字节数据进行分片传输
谓分片处理是指,将较大的IP 包分成多个较小的IP包,分片的包到了对端目标地址以后会 再被组合起来传给上一层。即从IP的上次层看,它完全可以忽略数据包在途中的各个数据链路上的MTU, 而只需要按照源地址发送的长度接收数据包。IP就是以这种方式抽象化了数据链路层,使得从上层更不容易 看到底层网络构造的细节。
IP属于面向无连接型
IP面向无连接。即在发包之前,不需要建立与对端目标地址之间的连接。。即使对端主机关机或不存在,数据包还是会被发送出去。
那么,为什么IP要采用面向无连接呢?
主要有两点原因:一是为了简化,二是为了提速。面向连接比起面向无连接处理相对复杂。甚至管理每个连接本身就是一个相当繁琐的事情。此外,每次通信之前都要事先建立连接,又会降低处理速度。需要有连接时,可以委托上一层提供此项服务。因此,IP为了实现简单化与高速化采用面向无连接的方式。
■ 为了提高可靠性,上一层的TCP采用面向有连接型
IP提供尽力服务(Best Effort),意指“为了把数据包发送到最终目标地址,尽最大努力。”然而,它并不做“最终收到与否的验证”。IP数据包在途中可能会发生丢包、错位以及数据量翻倍等问题。如果发送端的数据未能真正发送到对端目标主机会造成严重的问题。例如,发送一封电子邮件,如果邮件内容中 很重要的一部分丢失,会让收件方无法及时获取信息。 因此提高通信的可靠性很重要,TCP就提供这种功能。如果说IP只负责将数据发给目标主机,那么TCP则负责保证对端主机确实接收到数据。
为什么不让IP具有可靠传输的功能,从而把这两种协议合并到一起呢?
如果要规定一种协议的所有功能和作用,那么该协议的具体实施和编程就会变得十分的复杂,相比之下,如果按照网络分层,明确定义每层协议的作用和责任以后,针对每层具体的协议进行编程会更加利于该协议的实现,而这里TCP的作用就是保证对端主机确实接收到数据,而IP的作用就是输出数据。每层具体的协议进行编程会更加有利于该协议的实现。 网络通信中如果能进行有效分层,就可以明确TCP与IP各自协议的最终目的,也有利于后续对这些协议进行扩展和性能上的优化
3、IP地址的基础知识
在用TCP/IP通信时,用IP地址识别主机和路由器。为了保证正常通信,有必要为每个设备配置正确的IP 地址。
IP地址的定义
IP地址(IPv4地址)由32位正整数来表示。TCP/IP通信要求将这样的IP地址分配给每一个参与通信的主机。IP地址在计算机内部以二进制(二进制是指用0、1表示数字的方法)方式被处理,为了方便表示,将32位的IP地址以每8位为一组分成4组,每组以“.”隔开,再将每组数转换为十进制数
将表示成IP地址的数字整体计算,会得出如下数值
2 32 =4 294 967 296 从这个计算结果可知,最多可以允许43亿台计算机连接到网络
实际上,IP地址并非是根据主机台数来配置的,而是每一台主机上的每一块网卡(NIC)都得设置IP地址(Windows或Unix中设置IP地址的命令分别为ipconfig/all和ifconfig-a).通常一块网卡只设置一个 IP地址,其实一块网卡也可以配置多个IP地址。此外,一台路由器通常都会配置两个以上的网卡,因此可以设置两个以上的IP地址。
IP地址由网络和主机两部分标识组成
IP地址由“网络标识(网络地址)”和“主机标识(主机地址)”两部分组成
网络标识在数据链路的每个段配置不同的值。网络标识必须保证相互连接的每个段的 址不相重复。而相同段内相连的主机必须有相同的网络地址。IP地址的“主机标识”则不允许在同一个网段内重复出现。【即同一网段内,网络标识相同,主机标识不同】
由此,可以通过设置网络地址和主机地址,在相互连接的整个网络中保证每台主机的IP地址都不会相互 重叠。即IP地址具有了唯一性。
如图,IP包被转发到途中某个路由器时,正是利用目标IP地址的网络标识进行路由。因为即使不看主机标识,只要一见到网络标识就能判断出是否为该网段内的主机。
IP地址的分类
IP地址分为四个级别,分别为A类、B类、C类、D类(还有一个一直未使用的E类。) 。它根据IP地址 中从第1位到第4位的比特列对其网络标识和主机标识进行区分。
- A类IP地址是首位以“0”开头的地址。从第1位到第8位(去掉分类位剩下7位。) 是它的网络标识。用十 进制表示的话,0.0.0.0~127.0.0.0是A类的网络地址。A类地址的后24位相当于主机标识。因此,一个网段内 可容纳的主机地址上限为16,777,214个
- B类IP地址是前两位为“10”的地址。从第1位到第16位(去掉分类位剩下14位。) 是它的网络标识。用 十进制表示的话,128.0.0.1~191.255.0.0是B类的网络地址。B类地址的后16位相当于主机标识。因此,一个 网段内可容纳的主机地址上限为65,534个
- C类IP地址是前三位为“110”的地址。从第1位到第24位(去掉分类位剩下21位。) 是它的网络标识。用 十进制表示的话,192.168.0.0~239.255.255.0是C类的网络地址。C类地址的后8位相当于主机标识。因此, 一个网段内可容纳的主机地址上限为254个
- D类IP地址是前四位为“1110”的地址。从第1位到第32位(去掉分类位剩下28位。) 是它的网络标识。用十进制表示的话,224.0.0.0~239.255.255.255是D类的网络地址。D类地址没有主机标识,常被用于多播。
■ 关于分配IP主机地址的注意事项
分配IP地址时不可以全部为0或全部 为1。因为全部为只有0在表示对应的网络地址或IP地址不可获知的情况下才使用。而全部为1的主机地址通 常作为广播地址。 因此,在分配过程中,应该去掉这两种情况。这也是为什么C类地址每个网段最多只能有254(2 8 -2=254)个主机地址的原因。
广播地址
广播地址用于在同一个链路中相互连接的主机之间发送数据包。将IP地址中的主机地址部分全部设置为 1,就成为了广播地址。
把172.20.0.0/16用二进制表示如下:
■ 两种广播
广播分为本地广播和直接广播两种。
-
在本网络内的广播叫做本地广播。例如网络地址为192.168.0.0/24的情况下,广播地址是192.168.0.255。 因为这个广播地址的IP包会被路由器屏蔽,所以不会到达192.168.0.0/24以外的其他链路上。
-
在不同网络之间的广播叫做直接广播。例如网络地址为192.168.0.0/24的主机向192.168.1.255/24的目标地址发送IP包。收到这个包的路由器,将数据转发给192.168.1.0/24,从而使得所有192.168.1.1~192.168.1.254的主机都能收到这个包(由于直接广播有一定的安全问题,多数情况下会在路由器上设置为不转发)
IP多播
■ 同时发送提高效率
多播用于将包发送给特定组内的所有主机。由于其直接使用IP协议,因此也不存在可靠传输。
多播这种既可以穿透路由器,又可以实现只给那些必要的组发送数据包的技术。
■ IP多播与地址
多播使用D类地址。因此,如果从首位开始到第4位是“1110”,就可以认为是多播地址。而剩下的28位 可以成为多播的组编号。
从224.0.0.0到239.255.255.255都是多播地址的可用范围。其中从224.0.0.0到224.0.0.255的范围不需要路由控制,在同一个链路内也能实现多播。而在这个范围之外设置多播地址会给全网所有组内成员发送多播的包
此外,对于多播,所有的主机(路由器以外的主机和终端主机)必须属于224.0.0.1的组,所有的路由器必须属于224.0.0.2的组。
子网掩码
■ 分类造成浪费?
按照每个分类所表示的网络标识的范围如下所示。
转为10进制
网络标识相同的计算机必须同属于同一个链路。例如,架构B类IP网络时,理论上一个链路内允许6万5 千多台计算机连接。然而,在实际网络架构当中,一般不会有在同一个链路上连接6万5千多台计算机的情 况。因此,这种网络结构实际上是不存在的。 因此,直接使用A类或B类地址,确实有些浪费。为此,人们已经开始一种新的组合 方式以减少这种浪费。
■ 子网与子网掩码
现在,一个IP地址的网络标识和主机标识已不再受限于该地址的类别,而是由一个叫做“子网掩码”的识别码通过子网网络地址细分出比A类、B类、C类更小粒度的网络。这种方式实际上就是将原来A类、B类C 类等分类中的主机地址部分用作子网地址,可以将原网络分为多个物理网络的一种机制。
自从引入了子网以后,一个IP地址就有了两种识别码。一是IP地址本身,另一个是表示网络部的子网掩码。子网掩码用二进制方式表示的话,也是一个32位的数字。它对应IP地址网络标识部分的位全部为“1”, 对应IP地址主机标识的部分则全部为“0”。由此,一个IP地址可以不再受限于自己的类别,而是可以用这样的子网掩码自由地定位自己的网络标识长度。当然,子网掩码必须是IP地址的首位开始连续的“1”。
对于子网掩码,目前有两种表示方式。以172.20.100.52的前26位是网络地址的情况为例,以下是其中一 种表示方法,它将IP地址与子网掩码的地址分别用两行来表示。
另一种表示方式如下所示。它在每个IP地址后面追加网络地址的位数(这种方式也叫“后缀”表示 法。) 用“/”隔开。
CIDR与VLSM
采用任意长度分割IP地址的网络标识和主机标识,这种方式叫做CIDR,意为“无类型域间选路”。-合并两个网络
根据CIDR,连续多个C类地址(CIDR汇总的C类地址以2的幂次(4,8,16,32,……)划分,因此必须有一个能够按位分割的边界)就可以划分到一个较大的网络内。CIDR更有效地利用了当前IPv4地址, 同时通过路由集中降低了路由器的负担。
应用CIDR技术将203.183.224.1到203.183.225.254的地址合为同一个网络(它们本来是2个C类地址)。
该例子中实际 上是将8个C类地址合并为一个网络。
在CIDR被应用到互联网的初期,网络内部采用固定长度的子网掩码机制。也就是说,当子网掩码的长度被设置为/25以后,域内所有的子网掩码都得使用同样的长度。然而,有些部门可能有500台主机,另一些 部门可能只有50台主机。如果全部采用统一标准,就难以架构一个高效的网络结构。为此人们提出组织内要 使用可变长度的、高效的IP地址分配方式。
于是产生了一种可以随机修改组织内各个部门的子网掩码长度的机制——VLSM(可变长子网掩码),**根据VLSM可以将网络地址划分为主机数为500个时子网掩码长度为/23,主机数为50个时子网掩码长 度为/26。**从而在理论上可以将IP地址的利用率提高至50%。
全局地址与私有地址
随着互联网的迅速普及,IP地址不足的问题日趋显著。如果一直按照现行的方法采用唯一地址的话,会有IP地址耗尽的危险。 于是就出现了一种新技术。它不要求为每一台主机或路由器分配一个固定的IP地址,而是在必要的时候只为相应数量的设备分配唯一的IP地址。
尤其对于那些没有连接互联网的独立网络中的主机,只要保证在这个网络内地址唯一,可以不用考虑互联网即可配置相应的IP地址。不过,即使让每个独立的网络各自随意地设置IP地址,也可能会有问题(例如 因运维方案发生变化该网络需要连接到互联网时,或者不小心误被连接到了互联网时,再例如连接两个本来就各自独立的网络时,都容易发生地址冲突)。于是又出现了私有网络的IP地址。它的地址范围如下所示:
包含在这个范围内的IP地址都属于私有IP,而在此之外(A类~C类范围中除去0/8、127/8。) 的IP地址 称为全局IP(也叫公网IP)。
私有IP最早没有计划连接互联网,而只用于互联网之外的独立网络。然而,当一种能够互换私有IP与全 局IP的NAT 技术诞生以后,配有私有地址的主机与配有全局地址的互联网主机实现了通信。
现在有很多学校、家庭、公司内部正采用在每个终端设置私有IP,而在路由器(宽带路由器)或在必要的服务器上设置全局IP地址的方法。而如果配有私有IP的地址主机连网时,则通过NAT进行通信。
全局IP地址基本上要在整个互联网范围内保持唯一,但私有地址不需要。只要在同一个域里保证唯一即可。在不同的域里出现相同的私有IP不会影响使用。
4、路由控制
发送数据包时所使用的地址是网络层的地址,即IP地址。然而仅仅有IP地址还不足以实现将数据包发送 到对端目标地址,在数据发送过程中还需要类似于“指明路由器或主机”的信息,以便真正发往目标地址。保存这种信息的就是路由控制表(Routing Table)。实现IP通信的主机和路由器都必须持有一张这样的表。它们也正是在这个表格的基础上才得以进行数据包发送的
该路由控制表的形成方式有两种:一种是管理员手动设置,另一种是路由器与其他路由器相互交换信息时自动刷新。前者也叫静态路由控制,而后者叫做动态路由控制。为了让动态路由及时刷新路由表,在网络上互连的路由器之间必须设置好路由协议,保证正常读取路由控制信息。
IP协议始终认为路由表是正确的。然而,IP本身并没有定义制作路由控制表的协议。即IP没有制作路由控制表的机制。该表是由一个叫做“路由协议”(这个协议有别于IP)的协议制作而成。
IP地址与路由控制
IP地址的网络地址部分用于进行路由控制
路由控制表中记录着网络地址与下一步应该发送至路由器的地址。
在发送IP包时,首先要确定IP包首部中的目标地址,再从路由控制表中找到与该地址具有相同网络地址的记录,根据该记录将IP包转发给相应的下一个路由器。如果路由控制表中存在多条相同网络地址的记录,就选择一个最为吻合的网络地址。所谓最为吻合是指相同位数最多的意思(也叫最长匹配)。
■ 默认路由
如果一张路由表中包含所有的网络及其子网的信息,将会造成无端的浪费。这时,默认路由(Default Route)是不错的选择。默认路由是指路由表中任何一个地址都能与之匹配的记录。默认路由一般标记为0.0.0.0/0或default(表示子网掩码时,IP地址为0.0.0.0,子网掩码也是 0.0.0.0)这里的0.0.0.0/0并不是指IP地址是0.0.0.0。由于后面是“/0”,所以并没有标识IP地址(0.0.0.0 的IP地址应该记述为0.0.0.0/32)它只是为了避免人们误以为0.0.0.0是IP地址。有时默认路由也被标记 为default,但是在计算机内部和路由协议的发送过程中还是以0.0.0.0/0进行处理。
■ 主机路由
“IP地址/32”也被称为主机路由(Host Route)。例如,192.168.153.15/32(表示子网掩码时,若IP地址 为192.168.153.15,其对应的子网掩码为255.255.255.255) 就是一种主机路由。它的意思是整个IP地址 的所有位都将参与路由。进行主机路由,意味着要基于主机上网卡上配置的IP地址本身,而不是基于该地址的网络地址部分进行路由。
■ 环回地址
环回地址是在同一台计算机上的程序之间进行网络通信时所使用的一个默认地址。计算机使用一个特殊的IP地址127.0.0.1作为环回地址。与该地址具有相同意义的是一个叫做localhost的主机名。使用这个IP或主机名时,数据包不会流向网络。
路由控制表的聚合
利用网络地址的比特分布可以有效地进行分层配置。对内即使有多个子网掩码,对外呈现出的也是同一个网络地址。这样可以更好地构建网络,通过路由信息的聚合可以有效地减少路由表的条目-也叫做路由汇总。
如图所示,在聚合之前需要6条路由记录,聚合之后只需要2条记录。且可以将已知的路由信息传送给周围其他的路由器,以达到控制路由信息的目的。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nDO3UZY8-1636960679984)(C:/Users/77/AppData/Roaming/Typora/typora-user-images/image-20211115142412721.png)]
5、IP分割处理与再构成处理
数据链路不同,MTU则相异
前面的介绍中,每种数据链路的最大传输单元(MTU)都不尽相同。每种数据链路的MTU之所以不同,是因为每个不同类型的数据链路的使用目的不同。使用 目的不同,可承载的MTU也就不同。鉴于IP属于数据链路上一层,它必须不受限于不同数据链路的MTU大小。
IP报文的分片与重组
任何一台主机都有必要对IP分片(IP Fragmentation)进行相应的处理。分片往往在网络上遇到比较大的报文无法一下子发送出去时才会进行处理。
如下图所示为一个分片的例子,**路由器虽然分片但是不会重组。**只能由主机进行重组
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l0MXbg7o-1636960679985)(C:/Users/77/AppData/Roaming/Typora/typora-user-images/image-20211115143050177.png)]
为什么路由去不能重组?
这样的处理是由诸多方面的因素造成的。例如,现实当中无法保证IP数据报是否经由同一个路径传送。 因此,途中即使等待片刻,数据包也有可能无法到达目的地。此外,拆分之后的每个分片也有可能会在途中丢失(在目标主机上进行分片的重组时,可能有一部分包会延迟到达。因此,一般会从第一个数据报的分片到达的那一刻起等待约30秒再进行处理)。即使在途中某一处被重新组装,但如果下一站再经过其他路由时还会面临被分片的可能。这会给路由器带来多余的负担,也会降低网络传送效率。出于这些原因,在终结点(目标主机)端重组分片了的IP数据报成为现行的规范。
路径MTU发现
分片机制也有它的不足。首先,路由器的处理负荷加重。随着时代的变迁,计算机网络的物理传输速度不断上升。这些高速的链路,对路由器和计算机网络提出了更高的要求。另一方面,随着人们对网络安全的要求提高,路由器需要做的其他处理也越来越多。因此,只要允许,是不希望由路由器进行IP数据包的分片处理的。其次,在分片处理中,一旦某个分片丢失,则会造成整个IP数据报作废。为了避免此类问题,TCP的初期设计还曾使用过更小(包含TCP的数据限制在536字节或512字节)的分片进行传输。其结果是网路的利用率明显下降。 为了应对以上问题,产生了一种新的技术“路径MTU发现”(Path MTU Discovery(也可以缩写为 PMTUD))。所谓路径MTU(Path MTU)是指从发送端主机到接收端主机之间不需要分片时最大MTU的大小,即路径中存在的所有数据链路中最小的MTU。
而路径MTU发现从发送主机按照路径MTU的大小将数据报分片后进行发送。进行路径MTU发现,就可以避免在中途的路由器上进行分片处理,也可以在TCP中发送更大的包。现在,很多操作系统都已经实现了路径MTU发现的功能。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vehAHyeG-1636960679985)(C:/Users/77/AppData/Roaming/Typora/typora-user-images/image-20211115143408342.png)]
路径MTU发现的工作原理如下:
- 首先在发送端主机发送IP数据报时将其首部的分片禁止标志位设置为1。根据这个标志位,途中的路由器即使遇到需要分片才能处理的大包,也不会去分片,而是将包丢弃。
- 随后,通过一个ICMP的不可达消息将数据链路上MTU的值给发送主机(具体来说,以ICMP不可达消息中的分片需求(代码4)进行通知。然而,在有些老式的路由器中,ICMP可能不包含下一个MTU值。这时,发送主机端必须不断增减包的大小,以此来定位一个合适的MTU值。)。
- 下一次,从发送给同一个目标主机的IP数据报获得ICMP所通知的MTU值以后,将它设置为当前MTU。 发送主机根据这个MTU对数据报进行分片处理。如此反复,直到数据报被发送到目标主机为止没有再收到任何ICMP,就认为最后一次ICMP所通知的MTU即是一个合适的MTU值。
那么,当MTU的值比较多时,最少可以缓存(缓存是指将反复使用的信息暂时保存到一个可以即刻获取的位置)约10分钟。在这10分钟内使用刚刚求得的MTU,但过了这10分钟以后,则重新根据链路上的MTU做一次路径MTU发现。
前面是UDP的例子。那么在TCP的情况下,根据路径MTU的大小计算出最大段长度(MSS),然后再根据这些信息进行数据报的发送。因此,在TCP中如果采用路径MTU发现,IP层则不会再进行分片处理。
6、IPv6
IPv6(IP version 6)是为了根本解决IPv4地址耗尽的问题而被标准化的网际协议。IPv4的地址长度为4个8位字节,即32比特。而IPv6的地址长度则是原来的4倍,即128比特(因此IPv6的地址空间是IPv4的2 96 =7.923×10 28 倍),一般写成8个16位字节。
IPv6的特点
IPv6具有以下几个特点。这些功能中的一部分在IPv4中已经得以实现。然而,即便是那些实现IPv4的操作系统,也并非实现了所有的IPv4功能。这中间不乏存在根本无法使用或需要管理员介入才能实现的部分。 而IPv6则将这些通通作为必要的功能,减轻了管理员的负担(这些只能在IPv6的情况下使用。如果想要在 IPv4和IPv6都投入使用,工作量恐怕会是原来的两倍不止)。
- IP地址的扩大与路由控制表的聚合
- IP地址依然适应互联网分层构造。分配与其地址结构相适应的IP地址,尽可能避免路由表膨大。
- 性能提升
- 包首部长度采用固定的值(40字节),不再采用首部检验码。
- 简化首部结构,减轻路由器负荷。路由器不再做分片处理(通过路径MTU发现只由发送端主机进行分片处理)。
- 支持即插即用功能
- 即使没有DHCP服务器也可以实现自动分配IP地址。
- 采用认证与加密功能
- 应对伪造IP地址的网络安全功能以及防止线路窃听的功能(IPsec)。
- 多播、Mobile IP成为扩展功能
- 多播和Mobile IP被定义为IPv6的扩展功能。
由此可以预期,曾在IPv4中难于应用的这两个功能在IPv6中能够顺利使用。
IPv6中IP地址的标记方法
由于用16个数字序列表示显得有些麻烦,因此,将IPv6和IPv4在标记方法上进行区分。一般人们将128比特IP地址以每16比特为一组,每组用冒号(“:”)隔开进行标记。而且如果出现连续的0时还可以将这些0省略,并用两个冒号(“::”)隔开。但是,一个IP地址中只允许出现一次两个连续的冒号。
IPv6地址的结构
- 在互联网通信中,使用一种全局的单播地址。它是互联网中唯一的一个地址,不需要正式分配IP地址。
- 限制型网络,即那些不与互联网直接接入的私有网络,可以使用唯一本地地址。该地址根据一定的算法 生成随机数并融合到地址当中,可以像IPv4的私有地址一样自由使用。
- 在不使用路由器或者在同一个以太网网段内进行通信时,可以使用链路本地单播地址。
- 而在构建允许多种类型IP地址的网络时,在同一个链路上也可以使用全局单播地址以及唯一本地地址进行通信。
- 在IPv6的环境下,可以同时将这些IP地址全都配置在同1个NIC上,按需灵活使用。
全局单播地址
全局单播地址是指世界上唯一的一个地址。它是互联网通信以及各个域内部通信中最为常用的一个IPv6 地址。
全局单播地址的格式如图所示。现在IPv6的网络中所使用的格式为,n=48,m=16以及128-n-m=64。 即前64比特为网络标识,后64比特为主机标识。
链路本地单播地址
链路本地单播地址是指在同一个数据链路内唯一的地址。它用于不经过路由器,在同一个链路中的通信。通常接口ID保存64比特版的MAC地址。
唯一本地地址
唯一本地地址是不进行互联网通信时所使用的地址。
设备控制的限制型网络以及金融机关的核心网等会与互联网隔离。为了提高安全性,企业内部的网络与互联网通信时通常会通过NAT或网关(代理)进行。而唯一本地地址正是在这种不联网或通过NAT以及代理联网的环境下使用的。
IPv6分段处理
IPv6的分片处理只在作为起点的发送端主机上进行,路由器不参与分片。这也是为了减少路由器的负荷,提高网速。因此,IPv6中的“路径MTU发现”功能必不可少。不过IPv6中最小MTU为1280字节。
7、IPv4首部
通过IP进行通信时,需要在数据的前面加入IP首部信息。IP首部中包含着用于IP协议进行发包控制时所有的必要信息。
■ 版本(Version)
由4比特构成,表示标识IP首部的版本号。IPv4的版本号即为4,因此在这个字段上的值也是“4”。此外,关于IP的所有版本在以下表中列出。关于IP版本的最新情况,也可以在以下网址发布的信息中查看: http://www.iana.org/assignments/version-numbers
■ 首部长度(IHL:Internet Header Length)
由4比特构成,表明IP首部的大小,单位为4字节(32比特)最大长度位60比特。对于没有可选项的IP包,首部长度则设置 为“5”。也就是说,当没有可选项时,IP首部的长度为20字节(4×5=20)【默认位20】。
■ 区分服务(TOS:Type Of Service)
由8比特构成,用来表明服务质量。每一位的具体含义如表所示。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9BL4jJ4B-1636960679991)(C:/Users/77/AppData/Roaming/Typora/typora-user-images/image-20211115150108580.png)]
■ DSCP段与ECN段
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qNEikPgG-1636960679992)(C:/Users/77/AppData/Roaming/Typora/typora-user-images/image-20211115150125194.png)]
DSCP(Differential Services Codepoint,差分服务代码点)是TOS(Type Of Service)的一部分。现在统称为DiffServ(关于DiffServ的更多细节请参考5.8.3节),用来进行质量控制。
ECN(Explicit Congestion Notification,显式拥塞通告)用来报告网络拥堵情况,由两个比特构成。
第6位的ECT用以通告上层TCP层协议是否处理ECN。当路由器在转发ECN为1的包的过程中,如果出现网络拥堵的情况,就将CE位设置为1。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vbnJyub1-1636960679992)(C:/Users/77/AppData/Roaming/Typora/typora-user-images/image-20211115150218811.png)]
■ 总长度(Total Length)
表示IP首部与数据部分合起来的总字节数。该字段长16比特。因此IP包的最大长度为65535字 节。
■ 标识(ID:Identification)
由16比特构成,用于分片重组。同一个分片的标识值相同,不同分片的标识值不同。通常,每发送一个IP包,它的值也逐渐递增。此外,即使ID相同,如果目标地址、源地址或协议不同的话,也会被认为是不同的分片
■ 标志(Flags)
由3比特构成,表示包被分片的相关信息。每一位的具体含义请参考下表。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JhRB2wld-1636960679993)(C:/Users/77/AppData/Roaming/Typora/typora-user-images/image-20211115150401943.png)]
■ 片偏移(FO:Fragment Offset)
由13比特构成,用来标识被分片的每一个分段相对于原始数据的位置。第一个分片对应的值为0。由于FO域占13位,因此最多可以表示8192个相对位置。单位为8字节,因此最大可表示原始数据 8×8192=65536字节的位置。
■ 生存时间(TTL:Time To Live)
由8比特构成,它最初的意思是以秒为单位记录当前包在网络上应该生存的期限。然而,在实际中它是指可以中转多少个路由器的意思。每经过一个路由器,TTL会减少1,直到变成0则丢弃该包。
■ 协议(Protocol)
由8比特构成,表示IP首部的下一个首部隶属于哪个协议。目前常使用的协议如表所示已经分配相应的协议编号
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZCE3gRDG-1636960679993)(C:/Users/77/AppData/Roaming/Typora/typora-user-images/image-20211115150528333.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sKzfUGlt-1636960679994)(C:/Users/77/AppData/Roaming/Typora/typora-user-images/image-20211115150556150.png)]
■ 首部校验和(Header Checksum)
由16比特(2个字节)构成,也叫IP首部校验和。该字段只校验数据报的首部,不校验数据部分。它主要用来确保IP数据报不被破坏。校验和的计算过程,首先要将该校验和的所有位置设置为0,然后以16比特为单位划分IP首部,并用1补数计算所有16位字的和。最后将所得到这个和的1补数赋给首部校验和字段。
【1补数 :通常计算机中对整数运算采用2补数的方式。但在校验和的计算中采用1补数运算方法。这样做的优点在于即使产生进位也可以回到第1位,可以防止信息缺失并且可以用2个0区分使用。】
■ 源地址(Source Address)
由32比特(4个字节)构成,表示发送端IP地址。
■ 目标地址(Destination Address)
由32比特(4个字节)构成,表示接收端IP地址。
■ 可选项(Options)
长度可变,通常只在进行实验或诊断时使用。该字段包含如下几点信息:
- 安全级别
- 源路径
- 路径记录
- 时间戳
■ 填充(Padding)
也称作填补物。在有可选项的情况下,首部长度可能不是32比特的整数倍。为此,通过向字段填充0, 调整为32比特的整数倍。
■ 数据(Data)
存入数据。将IP上层协议的首部也作为数据进行处理。
8、IPv6首部
IPv6中为了减轻路由器的负担,省略了首部校验和字段。因此路由器不再需要计算校验和,从而也提 高了包的转发效率。
此外,分片处理所用的识别码成为可选项。为了让64位CPU的计算机处理起来更方便,IPv6的首部及可 选项都由8字节构成。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cH5Rzcgc-1636960679994)(C:/Users/77/AppData/Roaming/Typora/typora-user-images/image-20211115150819444.png)]
■ 版本(Version)
与IPv4一样,由4比特构成。IPv6其版本号为6,因此在这个字段上的值为“6”。
■ 通信量类(Traffic Class)
相当于IPv4的TOS(Type Of Service)字段,也由8比特构成。
■ 流标号(Flow Label)
由20比特构成,准备用于服务质量(QoS:Quality Of Service) 控制
■ 有效载荷长度(Payload Length)
有效载荷是指包的数据部分。
■ 下一个首部(Next Header)
相当于IPv4中的协议字段。由8比特构成。通常表示IP的上一层协议是TCP或UDP。不过在有IPv6扩展首部的情况下,该字段表示后面第一个扩展首部的协议类型。
■ 跳数限制(Hop Limit)
由8比特构成。数据每经过一次路由器就减1,减到0则丢弃数据
■ 源地址(Source Address)
由128比特(8个16位字节)构成。表示发送端IP地址。
■ 目标地址(Destination Address)
由128比特(8个16位字节)构成。表示接收端IP地址。
IPv6扩展首部
IPv6的首部长度固定,无法将可选项加入其中。取而代之的是通过扩展首部对功能进行了有效扩展。
扩展首部通常介于IPv6首部与TCP/UDP首部中间。在IPv4中可选项长度固定为40字节,但是在IPv6中没有这样的限制。也就是说,IPv6的扩展首部可以是任意长度。扩展首部当中还可以包含扩展首部协议以及下 一个扩展首部字段。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yiXgnzV2-1636960679995)(C:/Users/77/AppData/Roaming/Typora/typora-user-images/image-20211115151136088.png)]
具体的扩展首部如表,当需要对IPv6的数据报进行分片时,可以设置为扩展域为44
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-48djUeqR-1636960679996)(C:/Users/77/AppData/Roaming/Typora/typora-user-images/image-20211115151230027.png)]
P。不过在有IPv6扩展首部的情况下,该字段表示后面第一个扩展首部的协议类型。
■ 跳数限制(Hop Limit)
由8比特构成。数据每经过一次路由器就减1,减到0则丢弃数据
■ 源地址(Source Address)
由128比特(8个16位字节)构成。表示发送端IP地址。
■ 目标地址(Destination Address)
由128比特(8个16位字节)构成。表示接收端IP地址。
IPv6扩展首部
IPv6的首部长度固定,无法将可选项加入其中。取而代之的是通过扩展首部对功能进行了有效扩展。
扩展首部通常介于IPv6首部与TCP/UDP首部中间。在IPv4中可选项长度固定为40字节,但是在IPv6中没有这样的限制。也就是说,IPv6的扩展首部可以是任意长度。扩展首部当中还可以包含扩展首部协议以及下 一个扩展首部字段。
[外链图片转存中…(img-yiXgnzV2-1636960679995)]
具体的扩展首部如表,当需要对IPv6的数据报进行分片时,可以设置为扩展域为44
[外链图片转存中…(img-48djUeqR-1636960679996)]
这篇关于IP协议 | IP基础知识 | 路由控制 | IP分割处理 | IPv4首部格式 | IPv6首部格式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!