IP协议原理详解

描述

1. 网络地址转换

网络地址转换(Network Address Translation,NAT)诞生于1994年,它的提出是在IPv4地址资源面临枯竭的背景下,NAT在一定程度上,能够有效的解决公网地址不足的问题。

NAT的工作原理就是重写通过路由器的数据包的识别信息。 NAT路由器将其管理的内部主机发送的数据包的源IP地址由局部地址变为全局地址,从外部传输过来的数据包则做相反转换以分配到合适的内部主机。

路由器

2. IP数据报

IP协议提供不可靠无连接的数据报传输服务,IP层提供的服务是通过IP层对数据报的封装与拆封来实现的。 IP数据报是一个与硬件无关的虚拟包,由IP首部和数据区两大部分,其中IP首部是为了正确传输高层数据而加的各种控制信息,数据区包括高层协议需要传输的数据。

IP数据报的格式如下图示:

路由器

IP数据报各字段功能如下:

版本:占据4bit空间,该字段规定了数据报的IP协议版本,对于IPv4,该值为4; 对于IPv6,该值为6; 通过查看版本号,路由器能够确定如何解释IP数据报的其他部分,不同的IP版本使用不同的数据报格式

首部长度:占据4bit空间,用于记录IP首部的数据的长度; 可表示的最大十进制数是15,但是该字段所表示的数的单位是字(32bit),即当该字段为15时,首部长度就达到15*4=60字节

服务类型(TOS):占据8bit空间,包含在IPv4首部中,以便使不同类型的IP数据报能相互区别开来。 也就是路由器根据这个字段的值来为数据报选择最合理的路径

数据报长度:占据16bit空间,是指整个IP数据报的长度(首部区+数据区),以字节为单位。 由于该字段长度为16位二进制数,因此理论上IP数据报最长可达65536个字节(事实上受物理网络的限制,要比这个数值小很多)

标识:占据16bit空间,用于表示IP层发送出去的每一份IP数据报,在发送每一份报文,该值加 1,在分片的时候,该字段会被复制到每个分片数据报中,在目标接收主机中,使用该字段判断这些数据是否属于同一个IP数据报

标志:占据3bit空间,第一位保留未用,第二位是不分片标志位,为1表示IP数据报在发送的过程中不允许进行分片,为0表示IP层在必要的时候可以对其进行分片处理; 第三位为更多分片位,为1表示该分片数据报不是整个IP数据报的最后一个分片,为0表示是整个IP数据报的最后一个分片

分片偏移量:占据13bit空间,表示当前分片所携带的数据在整个IP数据报中的相对偏移位置(以 8 字节为单位),目标主机必须受到以0偏移量开始到最高偏移量的所有分片,才能将分片进行重装为一个完整的IP数据报,并且重装IP数据报的依据就是分片的偏移量

生存时间(Time-To-Live,TTL):占据8bit空间,用来确保数据报不会永远在网络中循环。 每当IP数据报由一台路由器处理时,该字段的值减 1,若TTL字段减为0,则该数据报必须丢弃,同时会返回一个ICMP差错报文给源主机,这样数据就不会永远在网络中漂流而占据资源

上层协议:占据8bit空间,该字段仅在一个IP数据报到达其最终目的地才会有用。 该字段的值指示了IP数据报的数据部分应交给哪个特定的传输层协议。 例如,值为6表明数据部分要交给 TCP,而值为17表明数据要交给UDP。 在 IP 数据报中的协议号所起的作用,类似于运输层报文段中端口号字段所起的作用。 常用网际协议编号如下图示:

路由器

首部检验和:占据16bit空间,用于协议头数据有效性的校验,可以保证IP报头区在传输时的正确性和完整性。 头部检验和字段是根据IP协议头计算出的检验和,它不对头部后面的数据进行计算

源IP地址:占据32bit空间,表示发送端IP地址

目标IP地址:占据32bit空间,表述目的端IP地址

选项字段:占据0~40个字节,允许IP首部被扩展,首部选项在日常生活中还是比较少使用的,因此在每个IP数据报首部中必须存在的字段是不包括选项字段的,这样能够节约开销,如果与选项字段就添加,没有就无需理会

数据区域:是IP数据报的最后的一个字段,也是最重要的内容,因为有数据区域才会有数据报首部的存在,在大多数情况下,IP数据报中的数据字段包含要交付给目标IP地址的运输层(TCP协议或UDP协议),当然数据区域也可承载其他类型的报文,如ICMP报文

3. IP协议抓包分析

使用ping -l size命令对指定IP地址ping指定大小字节的数据。 如下图示,对IP地址ping了4096个字节的数据:

路由器

打开wireshark进行抓包,监听IP地址后,在对该IP地址ping 4096字节的数据,可以抓取到如下数据包:

由于以太网数据帧的最大长度为1500个字节,因此4096字节的数据被分为了3个片。 下图中标志(Flags)字段的第三位为1表示该数据报是分片数据报,分片偏移量(Fragment offset)为0

路由器

第二段数据报的标志(Flags)字段的第三位为1表示该数据报仍然是分片数据报,此时分片偏移量(Fragment offset)为1480

路由器

第三段数据报的标志(Flags)字段的第三位为0表示是整个IP数据报的最后一个分片,此时分片偏移量(Fragment offset)为1480; 三段组成一个完整的ICMP数据报

路由器

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分