你懂什么叫IPv4么?

1.1 IPV4的生命

近年来Internet呈指数级的飞速发展,导致IPv4地址空间几近耗竭。IP地址变得越来越珍稀,迫使许多企业不得不使用NAT将多个内部地址映射成一个公共IP地址。地址转换技术虽然在一定程度上缓解了公共IP地址匮乏的压力,但它不支持某些网络层安全协议以及难免在地址映射中出现种种错误,这又造成了一些新的问题。而且,靠NAT并不可能从根本上解决IP地址匮乏问题,随着连网设备的急剧增加,IPv4公共地址总有一天会完全耗尽。

IP层安全需求的增长。在Internet这样的公共媒体上进行专用数据通信一般都要求加密服务,以此保证数据在传输过程中不会泄露或遭窃取。虽然目前有IPSec协议可以提供对IPv4数据包的安全保护,但由于该协议只是个可选标准,企业使用各自私有安全解决方案的情况还是相当普遍。

更好的实时QoS支持的需求。IPv4的QOS标准,在实时传输支持上依赖于IPv4的服务类型字段(TOS)和使用UDP或TCP端口进行身份认证。但IPv4的TOS字段功能有限,而同时可能造成实时传输超时的因素又太多。此外,如果IPv4数据包加密的话,就无法使用TCP/UDP端口进行身份认证。

为了解决上述问题,Internet工程任务组(IETF)开发了IPv6。这一新版本,也曾被称为下一代IP,综合了多个对IPv4进行升级的提案。在设计上,IPv6力图避免增加太多的新特性,从而尽可能地减少对现有的高层和低层协议的冲击。

1.2 IPV6与IPV4

IPv4从出生到如今几乎没什么改变的生存了下来。1983年TCP/IP协议被ARPAnet采用,直至发展到后来的互联网。那时只有几百台计算机互相联网。到1989年联网计算机数量突破10万台,并且同年出现了1.5Mbit/s的骨干网。因为IANA把大片的地址空间分配给了一些公司和研究机构,90年代初就有人担心10年内IP地址空间就会不够用,并由此导致了IPv6 的开发 。

IPv6与IPv4相比有以下特点和优点:

(1)更大的地址空间。IPv4中规定IP地址长度为32,即有2^32-1
 个地址;而IPv6中IP地址的长度为128,即有2^128-1个地址。夸张点说就是,如果IPV6被广泛应用以后,全世界的每一粒沙子都会有相对应的一个IP地址。 
⑵更小的路由表。IPv6的地址分配一开始就遵循聚类(Aggregation)的原则,这使得路由器能在路由表中用一条记录(Entry)表示一片子网,大大减小了路由器中路由表的长度,提高了路由器转发数据包的速度。 
(3)增强的组播(Multicast)支持以及对流的支持(Flow-control)。这使得网络上的多媒体应用有了长足发展的机会,为服务质量(QoS)控制提供了良好的网络平台。 
(4)加入了对自动配置(Auto-configuration)的支持。这是对DHCP协议的改进和扩展,使得网络(尤其是局域网)的管理更加方便和快捷。 
(5)更高的安全性。在使用IPv6网络中,用户可以对网络层的数据进行加密并对IP报文进行校验,这极大地增强了网络安全。

1.3 IPV4包首部格式

IPv4首部一般是20字节长。在以太网帧中,IPv4包首部紧跟着以太网帧首部,同时以太网帧首部中的协议类型值设置为080016。IPv4提供不同,大部分是很少用的选项,使得IPv4包首部最长可扩展到60字节(总是4个字节4个字节的扩展)。

IP包头字段说明:版本:4位,指定IP协议的版本号。包头长度(IHL):4位,IP协议包头的长度,指明IPv4协议包头长度的字节数包含多少个32位。由于IPv4的包头可能包含可变数量的可选项,所以这个字段可以用来确定IPv4数据报中数据部分的偏移位置。IPv4包头的最小长度是20个字节,因此IHL这个字段的最小值用十进制表示就是5(5x4=20字节)。就是说,它表示的是包头的总字节数是4字节的倍数。服务类型:定义IP协议包的处理方法,它包含如下子字段::过程字段:3位,设置了数据包的重要性,取值越大数据越重要,取值范围为:0(正常)~7(网络控制)::延迟字段:1位,取值:0(正常)、1(期待低的延迟)::流量字段:1位,取值:0(正常)、1(期待高的流量)::可靠性字段:1位,取值:0(正常)、1(期待高的可靠性)::成本字段:1位,取值:0(正常)、1(期待最小成本)::未使用:1位长度:IP包的总长标识:唯一地标识主机所发送的一个数据段,通常每发送一个数据段后加一。但IP包被分割后,分割得到的IP包拥有相同的标识标志:是一个3位的控制字段,包含:::保留位:1位::不分段位:1位,取值:0(允许数据报分段)、1(数据报不能分段)::更多段位:1位,取值:0(数据包后面没有包,该包为最后的包)、1(数据包后面有更多的包)段偏移量:当数据段被分割时,它和更多段位(MF,Morefragments)进行连接,帮助目的主机将分段的包组合。TTL:表示数据包在网络上生存多久,每通过一个路由器该值减一,为0时将被路由器丢弃。协议:8位,这个字段定义了IP数据报的数据部分使用的协议类型。常用的协议及其十进制数值包括ICMP(1)、TCP(6)、UDP(17)。校验和:16位,是IPv4数据报包头的校验和。

1.4 IPV4路由

Ipv4并不区分作为网络终端的主机(host) 和网络中的中间设备如路由器中间的差别。每台电脑可以即做主机又做路由器。路由器用来联结不同的网络。所有用路由器联系起来的这些网络的总和就是互联网。 IPv4技术即适用于局域网(LAN) 也适用于广域网。一个IP包从发送方出发,到接送方收到,往往要穿过通过路由器连接的许许多多不同的网络。每个路由器都拥有如何传递IP包的知识,这些知识记录在路由表中。路由表中记录了到不同网络的路径,在这儿每个网络都被看成一个目标网络。路由表中记录由路由协议管理,可能是静态的记录比如由网络管理员写入的,也有可能是由路由协议动态的获取的。有的路由协议可以直接在IP协议上运行。 常用的路由协议有

 - 路由信息协议(Routing Information Protocol, RIP),   
- 开放式最短路径优先协议,Open Shortest Path Fast, OSPF) ,  
 - 中介系统对中介系统协议(Intermediate System – Intermediate System, IS-IS) ,   
- 边界网关协议(Border Gateway Protocol, BGP) .
  • 在网络负荷很重或者出错的情况下,路由器可以将收到的IP包丢弃。在网络负荷重的时候,同样一个IP包有可能由路由器决定走了不同的路径。路由器对每一个IP包都是单独选择路由的。这也提高了IP通信的可靠性。但单是IP层上的包传输,并不能保证完全可靠。IP包可能会丢失; 可能会有重复的IP包被接受方收到; IP包可能会走不同的路径,不能保证先发的先到; 接受方收到的可能是被分割了的IP包。在IP之上再运行TCP协议则解决这些缺点提供了一个可靠的数据通路。

一份IP报文包含一个首部和一份数据

4.1 首部

IPv4报文的首部包含14个字段,其中13个是必须的,第14个是可选的(在表中用红色标出),并贴切地命名为:“选项”。首部中的字段均以大端序包装,在以下的图表和讨论中,最高有效位被标记为0,因此例如版本字段实际上可在第一个字节的前四高有效位中被找到(详见图003-点击可看大图)。 

版本 IP报文首部的第一个字段是4位版本字段。对IPv4来说,这个字段的值是4。

首部长度(IHL) 第二个字段是4位首部长度,说明首部有多少32位字长。由于IPv4首部可能包含数目不定的选项,这个字段也用来确定数据的偏移量。这个字段的最小值是5(RFC 791),最大值是15。

DiffServ(DSCP) 最初被定义为服务类型字段,但被RFC 2474重定义为DiffServ。新的需要实时数据流的技术会应用这个字段,一个例子是VoIP。

显式拥塞通告(ECN) 在RFC 3168中定义,允许在不丢弃报文的同时通知对方网络拥塞的发生。ECN是一种可选的功能,仅当两端都支持并希望使用,且底层网络支持时才被使用。

全长 这个16位字段定义了报文总长,包含首部和数据,单位为字节。这个字段的最小值是20(20字节首部+0字节数据),最大值是65,535。所有主机都必须支持最小576字节的报文,但大多数现代主机支持更大的报文。有时候子网会限制报文的大小,这时报文就必须被分片。

标识符 这个字段主要被用来唯一地标识一个报文的所有分片。一些实验性的工作建议将此字段用于其它目的,例如增加报文跟踪信息以协助探测伪造的源地址。

标志 这个3位字段用于控制和识别分片,它们是: 位0:保留,必须为0; 位1:禁止分片(DF); 位2:更多分片(MF)。 如果DF标志被设置但路由要求必须分片报文,此报文会被丢弃。这个标志可被用于发往没有能力组装分片的主机。 当一个报文被分片,除了最后一片外的所有分片都设置MF标志。不被分片的报文不设置MF标志:它是它自己的最后一片。

分片偏移 这个13位字段指明了每个分片相对于原始报文开头的偏移量,以8位块作单位。 存活时间(TTL) 这个8位字段避免报文在互联网中永远存在(例如陷入路由环路)。存活时间以秒为单位,但小于一秒的时间均向上取整到一秒。在现实中,这实际上成了一个跳数计数器:报文经过的每个路由器都将此字段减一,当此字段等于0时,报文不再向下一跳传送并被丢弃。常规地,一份ICMP报文被发回报文发送端说明其发送的报文已被丢弃。这也是traceroute的核心原理。

协议 这个字段定义了该报文数据区使用的协议。IANA维护着一份协议列表(最初由RFC 790定义)。

首部检验和 这个16位检验和字段用于对首部查错。在每一跳,计算出的首部检验和必须与此字段进行比对,如果不一致,此报文被丢弃。值得注意的是,数据区的错误留待上层协议处理——用户数据报协议和传输控制协议都有检验和字段。 因为生存时间字段在每一跳都会发生变化,意味着检验和必须被重新计算,RFC 1071这样定义计算检验和的方法: The checksum field is the 16-bit one’s complement of the one’s complement sum of all 16-bit words in the header. For purposes of computing the checksum, the value of the checksum field is zero.

源地址 一个IPv4地址由四个字节共32位构成,此字段的值是将每个字节转为二进制并拼在一起所得到的32位值。 例如,10.9.8.7是00001010000010010000100000000111。 这个地址是报文的发送端。但请注意,因为NAT的存在,这个地址并不总是报文的真实发送端,因此发往此地址的报文会被送往NAT设备,并由它被翻译为真实的地址。

目的地址 与源地址格式相同,但指出报文的接收端。

选项 附加的首部字段可能跟在目的地址之后,但这并不被经常使用。请注意首部长度字段必须包括足够的32位字来放下所有的选项(包括任何必须的填充以使首部长度能够被32位整除)。当选项列表的结尾不是首部的结尾时,EOL(选项列表结束,0x00)选项被插入列表末尾。下表列出了可能的选项(详见图004):

①注:如果首部长度大于5,那么选项字段必然存在并必须被考虑。 ②注:备份、类和数字经常被一并称呼为“类型”。 宽松的源站选路(LSRR)和严格的源站选路(SSRR)选项不被推荐使用,因其可能带来安全问题。许多路由器会拒绝带有这些选项的报文。

4.2 数据

数据字段不是首部的一部分,因此并不被包含在检验和中。数据的格式在协议首部字段中被指明,并可以是任意的传输层协议。

一些常见协议的协议字段值被列在下面:

分片和组装

互联网协议是整个互联网架构的基础,使得不同的网络间交换流量成为可能。其设计容纳了物理条件不同的网络:其独立于其下的链路层传输技术。不同的链路层经常不仅在传输速度上有差异,还在结构和帧尺寸上有不同,这一整个被MTU参数描述。为了实现IP横越网络的角色,有必要实现一种自动调整传输单元大小的机制来适应其下的技术限制。这带出了IP报文的分片。在IPv4中,这个功能被放置在网络层,并由IPv4路由器完成。 与此不同的是,下一代互联网协议IPv6不要求路由器执行分片操作,而是将检测路径最大传输单元大小的任务交给了主机。

分片

当一个设备收到一个IP报文时,它阅读其目的地址并决定要在哪个设备上发送它。设备有与其关联的MTU来决定其载荷的最大长度,如报文长度比MTU大,那么设备必须进行分片。 设备将整个报文数据分成数片,每一片的长度都小于等于MTU减去IP首部长度。接下来每一片均被放到独立的IP报文中,并进行如下修改: 1、总长字段被修改为此分片的长度; 2、更多分片(MF)标志被设置,除了最后一片; 3、分片偏移量字段被调整为合适的值; 4、首部检验和被重新计算。 例如,对于一个长20字节的首部和一个MTU为1,500的以太网,分片偏移量将会是:0、(1480/8)=185、(2960/8)=370、(4440/8)=555、(5920/8)=740、等等。 如果报文经过路径的MTU减小了,那么分片可能会被再次分片。

组装

当一个接收者发现IP报文的下列项目之一为真时: 1、更多分片标志被设置; 2、分片偏移量字段不为0。 它便知道这个报文已被分片,并随即将数据、标识符字段、分片偏移量和更多分片标志一起储存起来。

当接受者收到了更多分片标志未被设置的分片时,它便知道原始数据载荷的总长。一旦它收齐了所有的分片,它便可以将所有片按照正确的顺序(通过分片偏移量)组装起来,并交给上层协议栈。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券