【TCP/IP】第四章 IP协议

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/HelloZEX/article/details/82454498


4.1 即网际协议

TCP/IP的心脏是互联网层。这一层主要是由IP(Internet Protocol)和ICMP(Internet Control Message Protocol)两个协议组成

IP相当于OSI参考模型的第3层

IP(IPv4、IPv6)相当于OSI参考模型中的第3层–网络层。

网络层的主要作用是“实现终端节点之间的通信”。这种终端节点之间的通信也叫“点对点(end-to_end)通信”。

网络层的下一层—数据链路层的主要作用是在互联同一种数据链路的节点之间进行包传递。


IP基础知识

IP大致分为三大作用模块,它们是IP寻址路由(最终节点为止的转发)以及IP分包与组包

IP地址属于网络层地址

MAC地址在数据链路层,是用来标识同一个链路中不同计算机的一种识别码。

网络层的IP,也有这种地址信息。一般叫做IP地址。IP地址用于在“连接到网络中的所有主机中识别出进行通信的目标地址”。因此,在TCP/IP通信中所有主机或路由器必须设定自己的IP地址。

不论一台主机与哪种数据链路连接,其IP地址的形式都保持不变。以太网、无线局域网、PPP等,都不会改变IP地址的形式。网络层对数据链路层的某些特性进行了抽象。数据链路的类型对IP地址形式透明,这本身就是其中抽象化的一点。

另外,在网桥或交换集线器等物理层或数据链路层数据包转发设备中,不需要设置IP地址(在用SNMP进行王阔管理时有必要设置IP地址)。因为这些设备只负责将IP包转化为0,、1比特流转发或对数据链路帧的数据部分进行转发,而不需要应对IP协议。

路由控制

路由控制(Routing)是指将分组数据发送到最终目标地址的功能。一个数据包之所以能够成功地到达最终的目标地址,全靠路由控制。

发送数据至最终目标地址

Hop译为中文“跳”。它是指网络中的一个区间。IP包正式在网络中一个跳间被转发。因此IP路由也叫做多跳路由。在每个区间决定着包在下一跳被转发的路径。

多跳路由是指路由器或主机在转发IP数据包时只指定下一个路由器或主机,而不是将到最终目标地址为止的所有通路全都指定出来。因为每一个区间(跳)在在转发IP数据包时会分别指定下一跳的操作,直至包达到最终的目标地址。

以火车旅游为例,可以将旅行者看作IP数据包,将车站和工作人员看作路由器。当某个IP包达到路由器时,路由器首先查找其目标地址(IP包被转发到途中的某个路由器时,实际上是装入数据链路层的数据帧以后再被送出。以以太网为例,目标MAC地址就是下一个路由器的MAC地址),从而再决定下一步应该将这个包发往哪个路由器,然后将包发送过去。当这个IP包到达那个路由器以后,会再次经历查找下一目标地址的过程,并由该路由器转发给下一个被找到的路由器。这个过程可能会反复多次,直到找到最终目标地址将数据包发送给这个节点。

路由控制表

为了将数据包发给目标主机,所有主机都维护着一张路由控制表(Routing Table)。该表记录IP数据在下一步应该发给哪个路由器。IP包将根据这个路由表在各个数据链路上传输。

数据链路的抽象化

IP是实现多个数据链路之间通信的协议。数据链路根据种类的不同各有特点。对这些不同数据链路的相异特性进行抽象化也是IP的重要作用之一。数据链路的地址可以被抽象化为IP地址。因此,对IP的上一层来说,不论底层数据链路使用以太网还是无线LAN、PPP,都将被视为同仁。

不同数据链路有个最大的区别,就是它们各自最大传输单位(MTU:Maximum Transmission Unit)不同。就好像人们在邮寄或行李时有各自的大小限制一样。

MTU的值在以太网中是1500字节,在FDDI中是4352字节,而ATM则为9180字节。IP的上一层可能会要求传送比这些MTU更多字节的数据,因此必须在线路上传送比包长还要小的MTU。

为了解决这个问题,IP进行分片处理(IP Fragmentation),所谓分片,就是讲较大的IP包分成多个较小的IP包。分片的包到了对端目标地址后再被组合起来传给上一层。从IP的上层看,它完全可以忽略数据包在途中的各个数据链路上的NTU,而只需要按照源地址发送的长度接收数据包。IP以这种方式抽象化了数据链路层,使得从上层更不容易看到底层网络构造的细节。

IP属于面向无连接型

IP面向无连接。即在发包之前,不需要建立与对端目标地址之间的连接。上层如果遇到需要发送给IP的的数据,该数据会立即被压缩成IP包发送出去。

面向有连接的情况下,需要事先建立连接。一个没有建立连接的主机也不能发送数据过来。

面向无连接的情况不同,即使对端主机关机或不存在,数据包还是会被发送出去。反之,对于一台主机来说,它会何时从哪里收到数据也是不得而知的。

为什么IP要采用面向无连接呢? 
一是简化,二是为了提速。

为了提高可靠性,上一层的TCP采用面向有连接型 
IP只负责将数据发给目标主机,TCP负责保证对端主机却是接收到数据。


IP地址基础知识

在用TCP/IP通信时,用IP地址识别主机和路由器。

IP地址的定义

IP地址(IPv4地址)由32位正整数来表示。TCP/IP通信要求将这样的IP地址分配给每个参与通信的主机。IP地址在计算机内部已二进制(二进制是指0,1标识数组的方法)方式被处理。采用人类更习惯的标记方式,就是将32位的IP地址以每8位为一组,分成4组,每组以“.”隔开,再将每组数转换为十进制数。

实际上,IP地址并非是根据主句台数来配置的,而是每台主机上的每一块网卡(NIC)都要设置IP地址。通常一块网卡只设置一个IP地址,其实一块网卡也可以配置多个IP地址。此外,一台路由器通常都会配置两个以上的网卡,因此可以设置两个以上的IP地址。

IP地址由网络和主机两部分标识组成

IP地址由“网络标识(网络地址)”和“主机标识(主机地址)”两部分组成。

网络标识在数据链路的每个段配置不同的值。网络标识必须保证相互连接的每个段的地址不香重复。而相同段内相连的主机必须有相同的网络地址。IP地址的“主机标识”则不允许在同一个网段内重复出现。

可以通过设置网络地址和主机地址,在相互连接的整个网络中保证每台主机的IP地址都不会相互重叠,即IP地址具有了唯一性。


IP地址的分类

IP地址分为四个级别,A、B、C、D类(还有一个一直未使用的E类)。它根据IP地址中从第1位到第4位的比特列对其网络标识和主机标识进行区分。

A类地址

A类IP地址是首位以“0”开头的地址,从第1位到第8位(去掉分类位剩下7位)是它的网络标识。用十进制表示的话,0.0.0.0-127.0.0.0是A类网络地址。A类地址的后24位相当于主机标识。因此,一个网段内可容纳的主机地址上限为16,777,214个。

“B类地址”

B类地址是前两位为“10”的地址,从第1位到第16位是它的网络标识,用十进制表示,128.0.0.1-191.255.0.0是B类网络地址,B类地址的后16位相当于主机地址。因此,一个网段内可容纳主机地址上限为65,534个。

C类地址

C类IP地址是前三位为“110”的地址。从第1位到第24位是它的网络标识。用十进制表示的话,192.168.0.0-239.255.255.0是C类的网络地址。C类地址的后8位相当于主机标识。因此,一个网段内可容纳主机地址上限为254个(全0和全1的都不能作为地址,所以256-2!)。

D类地址

D类IP地址是前四位为“1110”的地址。从第1位到第32位是它的网络标识,用十进制表示,224.0.0.0-239.255.255.255是D类的网络地址。D类没有主机标识,常被用于多播。

关于分配IP主机地址的注意事项

要用比特位表示主机地址时,不可以全部为0或全部为1。因为全部为0在标识对应的网络地址或IP地址不可获知的情况下才使用。全部为1的主机通常作为广播地址。


广播地址

广播地址用于在同一个链路中相互连接的主机之间发送数据包。将IP地址中的主机地址部分全部设置为1,就变成了广播地址。

两种广播

广播分为本地广播和直接广播两种。

在本网络内的广播叫做本地广播。例如网络地址为192.168.0.0/24的情况下,广播地址是192.168.0.255。因为这个广播地址的IP包会被路由器屏蔽,所以不会到达192.168.0.0/24以外的其他链路上。

在不同网络之间的广播叫做直接广播。例如网络地址为192.168.0.0/24的主机向102.168.1.255/24的目标主机发送IP包。收到这个包的路由器,将数据转发给192.168.1.0/24,从而使所有192.168.1.1-192.168.1.254的主机都能收到这个包。

IP多播

多播用于将包发送给特定组内的所有主机。由于其直接使用IP协议,因此也不存在可靠传输。

在电视会议系统中对于1对N、N对N通信的需求明显上升。而具体实现上网采用赋值1对1通信的数据,将其同时发送给多个主机的方式。

在人们使用多播功能之前,一直采用广播,再由这些主机IP之上的一层去判断是否有必要接收数据。而且广播无法穿越路由,想给其他网段发同样的包,就必须采取另一种机制。多播纠正了必选之路。

IP多播与地址

多播使用D类地址。因此,如果从首位开始到第4位是“1110”,就可以认为是多播地址。而剩下的29位可以成为多播的组编号。

从224.0.0.0到239.255.255.255都是多播地址的可选范围。其中从224.0.0.0到224.0.0.255的范围不需要路由控制。在同一个链路内也能实现多播。而在这个范围之外设置多播地址会给全网所有组内成员发送多播的包(可以利用生存时间TTL Time to Live限制包的达到范围)。

此外,对于多播,所有主机(路由器以外的主机和终端主机)必须属于224.0.0.1的组,所有的路由器必须属于224.0.0.2的组。类似,多播地址中众多已知的地址:

利用IP多播实现通信,除了地址外还需要IGMP等协议的支持。


子网掩码

直接使用A、B、C类地址显得浪费资源。

子网和子网掩码

现在,一个IP地址的网络标识和主机标识已不再受限于该地址的类别,而是一个叫做“子网掩码”的识别码通过子网网络地址细分出比A、B、C更小粒度的网络。这种方式实际上就是将原来A、B、C类等分类中的主机地址部分用作子网地址,可以将原网络分为多个物理网络的一种机制。

子网划分实际上就是将原来的两级IP地址转变为三级IP地址,表示如下:

IP地址 ::= {<网络号>, <子网号>, <主机号>}

从上面的表示可以看出,子网划分就是在32位中借了几位用来表示子网号,注意,这里的网络号的位数是不变的,子网号是从主机号中借走的,子网划分实际上就是减少了主机数,分配到不同的子网,每个子网包含一定的主机数。

子网的概念也就可以理解为,将一个大的网络在其内部划分成几个小的子网,但是需要注意的是,对于该网络的外层来看,还是一个大的网络,只有该网络内部才可以看到其进行了子网划分

自从引入子网后,一个IP地址就有了两种识别码。一是IP地址本身,另一个是标识网络部的子网掩码。那么什么是子网掩码呢?在传输的过程中,路由器是怎么识别子网划分后的IP地址中的网络地址的?如果不提供任何信息,路由器肯定还是傻傻分不清楚,所以就出现了子网掩码。

子网掩码用二进制标识,也是一个32位的数字。它对应IP地址网络标识部分的位全部是“1”,对应IP地址主机标识的部分全部为“0”。由此,一个IP地址可以不再受限于自己的类别,而是可以用这样的子网掩码自由的定位自己的网络标识长度。当然,子网掩码必须是IP地址的首位开始连续的“1”。

对于子网掩码,目前有两种表示方法。以172.20.100.52的前26位是网络地址的情况为例,以下是其中一种表示方法,它将IP地址与子网掩码地址分别用两行来表示。

第二种方式下记述网络地址时可以省略后面的“0”。例如172.20.0.0/16跟172.20/16其实是一个意思。


CIDR与VLSM

CIDR中文全称是无分类域间路由选择,英文全称是Classless Inter-Domain Routing,在平常,大家多称之为无分类编址,它也是构成超网的一种技术实现。CIDR在一定程度上解决了路由表项目过多过大的问题。CIDR之所以称为无分类编址,就是因为CIDR完全放弃了之前的分类IP地址表示法,它真正消除了传统的A类、B类、C类地址以及划分子网的概念,它使用如下的IP地址表示法:

IP地址 ::= {<网络前缀>, <主机号>} / 网络前缀所占位数

CIDR仅将IP地址划分为网络前缀和主机号两个部分,可以说又回到了二级IP地址的表示,不过大家要注意,最后面用“/”斜线分隔,在其后写上了网络前缀所占的位数,这样就不需要告知路由器地址掩码,仅需要通过网络前缀所占的位数就可以得到地址掩码,为了统一,CIDR中的地址掩码依然称为子网掩码

CIDR表示法给出任何一个IP地址,就相当于给出了一个CIDR地址块,这是由连续的IP地址组成的,所以CIDR表示法构成了超网,实现了路由聚合,即从一个IP地址就可以得知一个CIDR地址块。例如:已知一个IP地址是:128.14.35.7/20,那么这个已知条件告诉大家的并不仅仅是一个IP地址这么简单,我们来分析一下。

128.14.35.7/20 = 10000000  00001110  00100011  00000111

即前20位是网络前缀,后12位是主机号,那么我们通过令主机号分别为全0和全1就可以得到一个CIDR地址块的最小地址和最大地址,即:

最小地址是:128.14.32.0    = 10000000  00001110  00100000  00000000 
最大地址是:128.14.47.255  = 10000000  00001110  00101111 11111111     
子网掩码是:255.255.240.0  = 11111111  11111111  11110000  00000000

因此就可以看出来,这个CIDR地址块可以指派(47-32+1)*256=4096个地址,这里没有把全0和全1除外。

在CIDR被应用到互联网的初期,网络内部采用固定长度的子网掩码机制。也就是说域内所有子网掩码都要使用相同的长度。而部门之间要求的主机数是不同的,如果全部采用统一标准,就难以架构一个高效的网路结构。为此人们提出组织内要是用可变长度的、高效的IP地址分配方式。

于是产生了一种可以随机修改组织内各个部门子网掩码长度的机制–VLSM(Verable Length Subnet Mask 可变长子网掩码)。它可以通过域间路由协议转换为RIP2以及OSPF实现。

在CIDR表示法中也可以进行进一步的子网划分,和子网划分类似,我们只需要从主机号中借走一定的位数即可,这里与前面的基本子网划分不同,借走2位时可以划分成4个子网,不用减2,其他位数类似。

目前已经广泛使用CIDR表示法,之前的分类方法和子网划分已经很少使用。


全局地址与私有地址

一种新的技术,它不要求为每一台主机或路由器分配一个固定的IP地址,而是在必要的时候只为相应数据的设备分配唯一的IP地址。

尤其对那些没有连接互联网的独立网络中的主机,只要保证在这个网络内地址唯一,可以不用考虑互联网即可配置相应的IP地址。不过,即使让每个独立的网络随意设置IP地址,也可能会有问题。于是又出现了私有网络的IP地址

包含在这个范围内的IP地址都属于私有IP,而在此之外的IP地址称为全局IP(也叫公网IP)

私有IP最早没有计划连接互联网,而只用于互联网之外的独立网络。然而,当一种能够互换私有IP与全局IP的NAT技术的出现,配有私有地址的主机与配有全局地址的互联网主机实现了通信。

私有IP地址结合NAT已成为现在解决IP地址分配问题的主流方案。它与使用全局IP地址相比有各种限制。为了解决这些问题IPv6出现了。然而由于现在IPv6没有得到普及,IPv4地址又将耗尽,人们正努力使用IPv4和NAT技术解决现有问题。这是互联网的现状之一。


路由控制

发送数据包时所使用的地址是网络层的地址,即IP地址。然而仅仅有IP地址还不足以实现将数据包发送到对端目的地址,在数据发送过程中还需要类似于“指明路由器或主机”的信息,以便真正发往目标地址。保存这种信息的就是路由控制表(Routing Table)。实现IP通信的主机和路由器都必须持有一张这样的表,它们也正是在这个表格的基础上才得以进行数据包发送的。

路由控制表的形成方式有两种:一种是管理员手动设置,另一种是路由器与其他路由器相互交换信息时自动刷新。前者叫静态路由控制,后者叫动态路由控制。为了让动态路由即时刷新路由表,在网络上互连的路由器之间必须设置好路由协议,保证正常读取路由控制信息。

IP协议始终认为路由表是正确的。然而,IP本身并没有定义制作路由控制表的协议。即IP没有制作路由控制表的机制。该表是由一个叫做“路由协议”的协议制作而成。

IP地址与路由控制

IP地址的网络地址部分用于进行路由控制。

路由控制表中记录着网络地址与下一步应该发送至路由器的地址。在发送IP包时,首先要确定IP包首部中的目标地址,再从路由控制表中找到该地址具有相同网络地址的记录,根据该记录将IP包转发给相应的下一个路由器。如果路由控制表中存在多条相同网络地址的记录,就选择一个最为吻合的网络地址。最为吻合是指相同位数最多的意思。

如果路由表中下一个路由器的位置记录着某个主机或路由器网卡的IP地址,就意味着“发送的目标地址属于同一个链路”。

默认路由

如果一张路由表中包含所有的网络及其子网的信息,将会造成浪费。这时,默认路由(Default Route)是不错的选择。默认路由是指路由表中任何一个地址都能与之匹配的记录。

默认路由一般标记为0.0.0.0/0或default。这里的0.0.0.0/0并不是指地址是0.0.0.0.由于后面是“/0”,所以没有标识IP地址。它只是为了避免人们误以为0.0.0.0是IP地址。

默认路由是一种特殊的静态路由,指的是当路由表中与包的目的地址之间没有匹配的表项时路由器能够做出的选择。如果没有默认路由,那么目的地址在路由表中没有匹配表项的包将被丢弃· 默认路由在某些时候非常有效,当存在末梢网络时,默认路由会大大简化路由器的配置,减轻管理员的工作负担,提高网络性能。


主机路由

“IP地址/32”也被称为主机路由(Host Route)。例如,192.168.153.15/32就是一种主机路由。它的一是是整个IP地址的所有位都将参与路由。进行主机路由,意味着要基于主机上网卡上配置的IP地址本身,而不是基于该地址的网络地址部分进行路由。

主机路由多被用于不希望通过网络地址路由的情况。

环回地址

环回地址是在同一台计算机上的程序之间进行网络通信时所使用的一个具体地址。计算机使用一个特殊的IP地址127.0.0.1作为环回地址。与该地址具有相同意义的是一个叫做locahost的主机名,使用这个IP或主机名,数据包不会流向网络。


路由控制表的聚合

利用网络地址的比特分布可以有效地进行分层配置。对内即使有多个子网掩码,对外呈现出的也是同一个网络地址。这样可以更好的构建网络,通过路由信息的聚合可以有效地减少路由表的条目。

能够缩小路由表的大小是它的有时。路由表越大,管理它所需要的内存和CPU就越多。而且路由聚合可以将已知的路由信息传送给周围其他的路由器,以达到控制路由信息的目的。



IP分割处理与再构成处理

数据链路不同,MTU则相异

每种数据链路的最大传输单元(MTU)都不尽相同。之所以不同,是因为每个不同类型的数据链路的使用目的不同。

IP属于数据链路上一层,它必须不受限与不同数据链路的MTU大小。IP抽象化底层的数据链路。

IP报文的分片与重组

任何一台主机都有必要对IP分片(IP Fragmentation)进行相应的处理。分片往往在网络上遇到比较大的报文无法一下子发送出去时才会进行处理。

由于以太网的默认MTU是1500字节,因此4342字节的IP数据报无法在一个帧当中发送完成。这时,路由器将IP数据报分成了3个分片进行发送。这种分片处理只要路由器认为有必要,会周而复始地进行。

经过分片之后的IP数据报在被重组的时候,只能由目标主机进行。路由器虽然做分片但不会进行重组。


路径MTU发现

为了应对路由器的负荷加重,只要允许,是不希望由路由器进行IP数据包的分片处理的。且分片处理中,一旦某个分片丢失,则会造成整个IP数据报作废。

为了应对以上问题,产生了一种新的技术“路径MTU发现”(Path MTU Discovery)。所谓路径MTU(Path MTU)是指从发送端主机到接收端主机之间不需要分片时最大MTU的大小。即路径中存在的所有数据链路中最小的MTU。而路径MTU发现从发送主机按照路径MTU的大小将数据报分片后进行发送。进行路径MTU发现,就可以避免在中途的路由器上进行分片处理,也可以在TCP中发送更大的包。

路径MTU发现机制(UDP情况下) 

路径MTU发现机制(TCP情况下)



IPv6

IPv6的必要性

IPv6是为了根本解决IPv4地址耗尽的问题而被标准化的网际协议。IPv4地址长度为4个8位字节,即32比特。而IPv6地址长度则是原来的4倍,即128比特。一般写成8个16位字节。

从IPv4切换到IPv6极其耗时,需要将网络中所有主机和路由器的IP地址进行重新设置。当互联网普及后,替换所有IP地址会更为艰巨的任务。

所以,IPv6不仅仅能解决IPv4地址耗尽的问题,它甚至试图弥补IPv4中的绝大多数缺陷。目前,人们正着力于进行IPv4与IPv6之间的相互通信与兼容性方面的测试。

IPv6的特点

IPv6具有的特点中有一部分在IPv4中已经实现。然而,即便是在那些实现了IPv4的操作系统,也并非实现了所有的IPv4功能。这中间不乏存在根本无法使用或需要管理员介入才能实现的部分。而IPv6则将这些通通作为必要的功能,减轻了管理员的负担。

  • IP地址的扩大与路由控制表的聚合 
    IP地址依然适应互联网分层构造。分配与其地址结构相适应的IP地址,尽可能避免路由表膨大。
  • 性能提升 
    包首部长度采用固定的值(40字节),不再采用首部检验码。简化首部结构,减轻路由器负荷。路由器不再做分片处理(通过路径MTU发现只由发送端主机进行分片处理)
  • 支持即插即用功能 
    即使没有DHCP服务器也可以实现自动分配IP地址。
  • 采用认证与加密功能 
    应对伪造IP地址的网络安全功能以及防止线路窃听的功能(IPsec)。
  • 多播、Mobile IP成为扩展功能 
    多播和Mobile IP被定义为IPv6的扩展功能。由此可以预期,曾在IPv4中难于应用的这两个功能在IPv6中能够顺利使用。

DHCP 
DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一个局域网的网络协议,使用UDP协议工作, 主要有两个用途:给内部网络或网络服务供应商自动分配IP地址,给用户或者内部网络管理员作为对所有计算机作中央管理的手段。


IPv6中IP地址的标记方法

IPv6的IP地址长度为128位。它所能表示的数字高达38位数。

如果将IPv6的地址像IPv4的地址一样用十进制数据表示的话,是16个数字的序列(IPv4是4个数字的序列)。由于用16个数字序列表示显得麻烦,因此,将IPv6和IPv4在标记方法上进行区分。

一般人们将128比特IP地址以每16比特为一组,每组用冒号(“:”)隔开进行标记。而且如果出现连续额的0时还可以将这些0省略,并用两个冒号(“::”)隔开。但是,一个IP地址中只允许出现一次两个连续的冒号。

在IPv6当中,人们正努力使用最简单的方法标记IP地址,以便易于记忆。

全局单播地址

全局单播地址是指世界上唯一的一个地址。它是互联网通信以及各个域内部通信中最为常用的一个IPv6地址。

现在IPv6的网络中所使用的格式为,n=48,m=16以及128-n-m=64。即前64比特为网络标识,后64比特为主机标识。

链路本地单播地址

链路本地单播地址是指在同一数据链路内唯一的地址。它用于不经过路由器,在同一个链路中的通信。通常接口ID保存64比特版的MAC地址。

唯一本地地址

唯一本地地址是不进行互联网通信时所使用的地址。 
设备控制的限制型网络以及金融机关的核心网等会与互联网隔离。为了提高安全性,企业内部的网络与互联网通信时通常会通过NAT或网关(代理)进行。而唯一本地地址正是在这种不联网或通过NAT以及代理联网的环境下使用的。

唯一本地地址虽然不会与互联网连接,但是也会尽可能地随机生成一个唯一的全局ID。由于企业兼并、业务统一、效率提高等原因,很有可能会需要用到唯一本地地址进行网络之间的连接。这种情况下,人们希望可以在不改动IP地址的情况下即可实现网络的统一(全局IP不一定必须是全世界唯一的,但是完全一致的可能性也不高)。

IPv6分段处理

IPv6的分片处理只在作为起点的发送端主机上进行,路由器不参与分片。这是为了减少路由器的负荷,提高网速。因此,IPv6中的“路径MTU发现”功能必不可少。不过IPv6中最小MTU为1280字节。因此,在嵌入式系统中对于那些有一定系统资源限制的设备来说,不需要进行“路径MTU发现”,而是在发送IP包时直接以1280字节为单位分片送出。



IPv4首部

通过IP进行通信时,需要在数据的前面加入IP首部信息。IP首部中包含着用于IP协议进行发包控制时所有的必要信息。

版本(Version)

由4比特构成,表示标识IP首部的版本号。IPv4的版本号即为4,因此在这个字段上的值也是“4”。关于IP的所有版本在下表中列出:

首部长度(IHL:Internet Header Length)

由4比特构成,表明IP首部的大小,单位为4字节(32比特)。对于没有可选项的IP包,首部长度则设置为“5”。就是说,没有可选项时,IP首部长度为20字节(4*5=20,最小值)。

区分服务(TOS:Type Of Service)

由8比特构成,用来表明服务质量。每一位的拘役含义如下:

这个值通常由应用指定。

DSCP段与ECN段

DSCP(Differential Services Codeponit,差分服务代码点)是TOS(Type Of Service)的一部分。现在统称为DiffServ,用来进行质量控制。

ECN(Explicit Congestion Notification,显式拥塞通告)。

总长度(Total Length)

表示IP首部与数据部分合起来的总字节数。该字段长16比特。因此IP包的最大长度为65535(2^16)字节。

目前还不存在能够传输最大长度的65535字节的IP包的数据链路。不过,由于有IP分片处理,从IP的上一层角度看,不论底层采用何种数据链路,都可以认为能够以IP的最大包长传输数据。

标识(ID:Identification)

由16比特构成,用于分片重组。用以分片的标识值相同,不同分片的标识值不同。通常,每发送一个IP包,它的值也逐渐增长。此外,即使IP相同,如果目标地址、源地址或协议不同的话,也会被认为是不同的分片。

标志(Flags)

由3比特构成,表示包被分片的相干信息。每一位具体含义: 

片偏移(FO :Fragment Offset)

由13比特构成,用来标识被分片的每一个分段相对于原始数据的位置。

生成时间(TTL:Time To Live)

由8比特构成,它最初的意思是以秒为单位记录当前包在网络上应该生存的期限。然而,在实际中它是指可以中转多少个路由器的意思。每经过一个路由器,TTL会减少1,直到变成0则丢弃该包。

协议(Protocol)

由8比特构成,标识IP首部的下一个首部隶属于哪个协议。常用的协议如下表:

其他

首部校验和(Header Checksum)、源地址(Source Address)、目标地址(Destination Address)、可选项(Options)、填充(Padding)、数据(Data)。



IPv6首部格式

IPv6箱比IPv4,发生了巨大变化。

PIv6中为了减轻路由器压力,省略了首部校验和字段(因为TCP和UDP在做校验和计算的时候使用伪首部,所以可以验证IP地址或协议是否正确。因此,即使在IP层无法提供可靠传输,在TCP或UDP层也可以提供可靠传输的服务)。用词路由器不再需要检验和,从而也挺高了包的转发效率。

此刻外,分片处理所用的标识码称为可选项。为了让64位CPU计算处理起来方便,IPv6首部及可选项都由8字节构成。

版本(Version)

与IPv4一样,由4比特构成。

通信量类(Traffic Class)

相当于Ipv4的TOS(Type Of Service)字段。由8比特构成。

流标号(Flow Label)

由20比特构成,准备用于服务质量(Qos:Quality Of Service)控制。

其他

有效载荷长度(Payload Length)、下一个首部(Next Header)、跳数限制(Hop Limit)、源地址(Source Address)、目标地址(Destination Address等。)

IPv6扩展首部

IPv6的首部长度固定,无法将可选项加入其中。取而代之的是通过扩展首部对功能进行了有效扩展。

扩展首部通常介于IPv6首部与TCP/IP首部中间。在IPv4中可选项长度固定为40字节,但是在IPv6中没有这样的限制。就是说,IPv6的扩展首部可以是任意长度。扩展首部当中还可以包含扩展首部协议以及下一个扩展首部字段。

IPv6首部中没有标识以及标志字段,在需要对IP数据报进行分片时,可以使用扩展首部。

猜你喜欢

转载自blog.csdn.net/HelloZEX/article/details/82454498