zoukankan      html  css  js  c++  java
  • IP协议

    网络层协议主要包含:IP协议、ARP(地址解析协议)、RARP(反向地址解析协议)和 ICMP(互联网控制消息协议)。今天将会讲解 IP 协议的功能,IP 数据报的解析以及 IP 分片。

    IP 协议

    IP协议功能

    • 寻址和路由
    • 传递服务
      • 不可靠,可靠性由上层协议提供
      • 无连接
    • 数据报分段和重组

    寻址和路由:比如要从北京往南京发一封邮件,找到南京这个地方就叫寻址;北京到南京有好多条路线,选择走哪条路就叫路由。

    传递服务:IP 协议是不可靠的,其可靠性由上层协议来保证,比如用 TCP 协议来保证。IP 协议就是尽最大努力来做事,不保证一定能做到。

    数据报的分段是充足:从北京往南京发货物,货物比较大,一车装不下。那就要拆成好几个部分发送。到达目的地再把各个部件组合起来。

    IP协议

    IP 数据报由首部和数据部分组成。

    字段 比特 作用
    版本 4 bit IP协议的版本,一般为 4,即 IPv4
    首部长度 4 bit 1111 可表示的最大值为 15 单位, 1个单位4个字节,所以首部长度的最大值是60字节
    服务类型 8 bit 用来获得更好的服务,以前一直没有被人们使用
    总长度 16 bit 首部长度 + 数据长度,单位为字节,
    因此数据报的最大长度为 2^16-1=65535 字节。
    总长度 <= 最大传送单元 MTU
    标识 16 bit 一个计数器,用来产生数据报的标识,同一段数据即使分片其标识任然是相同的
    标志 3 bit 第1位,无意义
    当 DF = 0 时,表示允许分片
    当 MF = 1 时,表示后面“还有分片”。MF = 0 表示最后一个分片。
    片偏移 13 bit 较长的分组在分片后,某片在原分组中的相对位置。片偏移以 8 个字节为偏移单位。
    生存时间 8 bit TTL (Time To Live)表示数据报在网络中的生存时间,一般以以「跳数」为单位
    协议 8 bit 字段指出此数据报携带的数据使用何种协议。以便目的主机的 IP 层将数据部分上交给哪个处理过程。
    首部检验和 16 bit 字段只检验数据报的首部不包括数据部分。这里不采用 CRC 检验码而采用简单的计算方法。
    源地址 4 bit 发送数据的机器的 IP 地址
    目的地址 4 bit 接收数据的机器的 IP 地址

    注:其中标识、标志和片偏移和 IP分片相关。

    设置 TTL 可以避免发生环路,避免网络资源的浪费。最开始 TTL 的计时单位是秒,现在一般使用跳数来表示,每经过一个路由器,这个值就会减少1,减到0的时候就会将这个报文丢弃。

    IP 数据报首部的可变部分

    • IP 首部的可变部分就是一个选项字段,用来支持排错、测量以及安全 等措施,内容很丰富
    • 选项字段的长度可变,从 1 个比特到 32个比特不等,取决于所选择 的项目
    • 增加首部的可变部分是为了增加 IP 数据报的功能,但这同时也使得 IP 数据报的首部长度成为可变的。这就增加了每一个路由器处理数据报的开销
    • 实际上这些选项很少被使用

    IP 分片

    IP分片

    IP 数据报由首部和数据部分组成。数据部分存储我们要传输的数据,数据体积如果太大,就需要将其拆分开来,分成多次传输。这就是 IP 分片

    在 TCP/IP 分层中,数据链路层用 MTU(Maximum Transmission Unit,最大传输单元)来限制所能传输的数据包大小,MTU是指一次传送的数据最大长度,不包括数据链路层数据帧的帧头,如以太网的MTU为1500字节,实际上数据帧的最大长度为1512字节,其中以太网数据帧的帧头为12字节。

    当发送的 IP 数据报的大小超过了 MTU 时,IP 层就需要对数据进行分片,否则数据将无法发送成功。

    比如说我们用火车从北京向南京送一批苹果,这批苹果就相当于是 IP 数据报中的数据部分。

    但是火车的承载容量有限,火车最多能装多少就相当于 MTU。

    一车装不下,我们把这一批苹果分装到不同的火车上,这就相当于 IP 分片。

    比如说上图中的数据大小为 3800 字节,将其分成三个数据包片:0~1399、1400~2799、2800~3799。

    我们分片之后,我们还需要将其按照序号组装起来,如何组装就要通过 IP 数据报的首部来进行标记了。

    IP协议

    在 IP 首部中有 4 个字节是和 IP 分片相关的:

    1. 标识(identification) : 占 16 bit,其本质是一个计数器,用来产生数据报的标识,同一个数据报的各个分片的标识是一样的。
    2. 标志(flag):占 3 bit,其中有1位用来表示是否有更多的分片,如果是最后一个分片,该标志位为0,否则为1
      1. R:目前只有后两个比特有意义。
      2. DF:Don’t Fragment,“不分片”位,DF=1表示不分片;
      3. MF:More Fragment,“更多的片”,除了最后一片外,其它每个组成数据报的片都要把比特置1
    3. 片偏移:占13 bit,某片在原分组中的相对位置。片偏移以 8 个字节为偏移单位,所以要除以8

    参考:

    IP分片浅析

    TCP层的分段和IP层的分片之间的关系 & MTU和MSS之间的关系

  • 相关阅读:
    github fork项目后,代码更新
    UIScrollView的用法,属性
    调整屏幕亮度,调整字体大小
    iOS UIFont 字体名字大全
    ios 6以后,UILabel全属性
    oc中的各种遍历(迭代)方法
    判断app是否是第一次启动
    ios 显示代码块(show the code snippet library)
    ios 添加动画的方法
    添加app第一次启动页面
  • 原文地址:https://www.cnblogs.com/shuiyj/p/13185180.html
Copyright © 2011-2022 走看看