IP协议报

97 阅读6分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第33天,点击查看活动详情

大家好,我是bug郭,一名双非科班的在校大学生。对C/JAVA、数据结构、Spring系列框架、Linux及MySql、算法等领域感兴趣,喜欢将所学知识写成博客记录下来。 希望该文章对你有所帮助!如果有错误请大佬们指正!共同学习交流

作者简介:

网络层(IP协议)

我们知道网络层协议保存着两台设备的IP地址! 所以网络层最重要的协议就是IP协议! 并且博主学习的就是TCP_IP协议栈! 所以这里的IP协议的学习也是重中之重!

我们先来了解一下IP报头格式 IP协议报头格式: 在这里插入图片描述

  • 四位版本号

这里是4个bite位,当前IP协议的版本号有IPv4IPv62个版本,所以版本号只有两个取值,01100100分别表示不同的IP协议版本!

  • 4位首部长度

这里的4位首部长度和TCP协议报类似,就是IP协议报头的长度大小!这里的单位是4字节,也就是说当取值1111时表示最大的首部长度是15*4,60字节,这里的IP协议报头中的选项也使得这里的协议报头长度是可变长度的!

  • 8位服务类型(TOS)

这里的8位服务类型,目前只有4位有效! 这四种状态分别吧表示如下含义:

  • 最小延时
  • 最大吞吐量
  • 最高可靠性
  • 最小成本

并且这里的TOS同一时刻只能选择一种状态! 比如:你想要传输过程的最大吞吐量,那就无法保证最高的可靠性,只能4选一! 这里的TOS就相当于切换形态,为了给IP协议报规划一条合适的线路,这里的合适就是你想要选择的一种传输状态!

  • 16位总长度(字节数)

这里的16位总长度表示IP协议报大小最大为64k字节! 而我们知道TCP中的协议报大小可能不止64k! 如果一个超过64k大小的TCP协议报交给传输层IP协议该如何进行分装处理呢?

如果一个报文大小超过了64k,我们可以将IP协议报文进行拆包处理! 将一个TCP协议报拆成多个然后进行传输! 我们知道IP协议报中保存的数据载荷就是一个TCP协议报! 我们就可以把这个TCP协议报拆成多个! 在这里插入图片描述我们就将一个TCP数据报拆成了多个,交个多个IP协议报进行传输! 问题又来了,我们传输过去后,如何确认那几个IP协议报传输的是一个TCP数据报呢?

我们通过下面3个标识位的学习就可以将一个TCP协议数据报进行重新组装! 在这里插入图片描述

  • 16位标识位

传输相同的TCP协议报,IP协议报头的16位标识位相同,通过这个16位标识位,我们就可以知道那几个IP协议报是一个TCP协议数据报! 就好比快递一个包裹装不下,那就拆成了2个包裹,当时这两个包裹具有相同的快递单号!

  • 3位标志位

第一位保留(现在IP协议报头还没想好怎么用) 第二位为1,表示禁止分片,就是禁止拆分,如果报文长度超过了MTU(数据链路层中一个以太网数据帧所能承受的最大数据范围),就丢弃该报文! 第三位表示更多分片,就是刚刚当一个协议报拆成多个协议报时,当该IP协议报中的该位为1表示该协议是这个TCP协议数据报拆包后的最后一个IP协议报,否者该位为0!

  • 13位片偏移

是分片相对于原始IP报文开始处的偏移。其实就是在表示当前分片在原报文中处在哪个位置。实际偏移的字节数是这个值 * 8 得到的。因此,除了最后一个报文之外,其他报文的长度必须是8的整数倍(否则报文就不连续了)。 简单讲就是这个片偏移可以知道该IP协议报在原来未拆包前报文的位置信息,然后再重新组包时才能将数据组织回去!

在这里插入图片描述

  • 8位生存时间(TTL)

(Time To Live):这里的TTL表示一个IP协议报设备之间最大的转发次数,一般设为128或者64,我们知道两个设备之间的通信要经过中间很多台设备的传输过程,一次传输过程就是一次转发经过一个路由器或者交换机TTL就减一!如果TTL的值减小到0,我们就视为该数据永远也传输不到目的IP,就将其丢弃!就好比我们发送的目的IP压根不存在,那无论如何转发传输到到达不了,防止出现路由循环!

  • 8位协议

8位协议的取值就表示这个IP协议数据传输的数据载荷传输层是应用的那种协议!不同传输层的协议类型有不同的取值.

  • 16位首部校验和

16位首部校验这里采用的是CRC算法进行校验,来验证IP头部是否破损!

  • 32位源IP地址

就是发送方的IP地址

  • 32位目的IP地址

接收方的IP地址

我们知道IP地址是由32位比特位构成(这里针对的是IPv4版本)! 我们通常采用点分十进制的格式进行展示! 将32位比特位分成4组每组表示一个字节,然后每组之间用:分割开! 例如:192.168.107.89这就是一个IP地址,但是在计算机内部还是采用2进制格式存储!

  • 选项

这里的选项字段长度不定最多40个字节!

我们介绍完了IP报头格式,我们再来了解一下IP协议报的主要功能! 我们的IP协议在整个网络传输过程中主要完成两件事情!

  • 地址管理
  • 路由选择