第一节 2. IP数据包与IP分片

通过上一节课帧格式知道,数据在传输过程中要封装包,在到达上层协议时需层层拆包。

帧==帧头+数据data+帧尾 ,数据在到达上层协议后,拆分帧头帧尾后,取data数据解析。

Etherent_II帧中,数据传输使用的协议版本在 Type中包含,其次才是传输的数据。 Type为0X0800(2018)是IP数据协议,下面我们就讲解IP数据包。

以太网帧的MTU是1500字节,因此它的数据部分最大为1480字节(IP头部占用20字节)。这20字节的具体情况如图:

各个字段的意义如下:

   1. 目前的协议版本号是4,因此I P有时也称作I P v 4。
   2. 首部长度指的是首部占 32 bit字的数目,包括任何选项。由于它是一个 4比特字段,因此首部最长为6 0个字节
   3. 服务类型(TOS):现在大多数的T C P / I P实现都不支持TO S特性
   4. 总长度字段是指整个 I P数据报的长度,以字节为单位。利用首部长度字段和总长度字段,就可以知道 I P数据报中数据内容的起始位置和长度。由于该字段长 1 6比特,所以 I P数据报最长可达 6 5 5 3 5字节
    5.标识字段唯一地标识主机发送的每一份数据报。通常每发送一份报文它的值就会加 1
    6.标志字段和片偏移字段:在分片时使用,当发送的IP数据报的大小超过了MTU时,IP层就需要对数据进行分片,否则数据将无法发送成功。IP分片发生在IP层,不仅源端主机会进行分片,中间的路由器也有可能分片,因为不同的网络的MTU是不一样的,如果传输路径上的某个网络的MTU比源端网络的MTU要小,路由器就可能对IP数据报再次进行分片。而分片数据的重组只会发生在目的端的IP层。
    7.生存时间字段设置了数据报可以经过的最多路由器数。它指定了数据报的生存时间。T T L的初始值由源主机设置,一旦经过一个处理它的路由器,它的值就减去 1。当该字段的值为 0时,数据报就被丢弃,并发送 I C M P报文通知源主机
    8.协议字段: TCP/UDP
    9.首部检验和字段是根据I P首部计算的检验和码。它不对首部后面的数据进行计算
    10.源 I P地址
    11.目的 I P地址
    12.任选项,是数据报中的一个可变长的可选信息T C P首部如果不计任选字段,它通常是 2 0个字节。
 

IP分片:如上图,当IP数据报超过帧的MTU(最大传输单元)时,它将会被分片传输。分片能发生在发送端或者中转路由器,且在传输过程中可能被多次分片,就像“水管”会越来越窄,也就是MTU会越来越小。IP报文也会一分再分。每个IP分片的报头基本相同,只是片偏移不一样在最后的目标机器上这些分片才会被内核的的IP模块重新组装。

---------------------抄录别人的

请看红色框入的部分:解释:对于不同的传输层协议,在IP层上,需不需要进行分片是不同的:
1:对于TCP来说,它是尽量避免分片的。因为当在IP层进行了分片后,如果其中的某片数据丢失,则需对整个数据报进行重传。因为IP层本身没有超时重传机制,当来自TCP报文段的某一片丢失后,TCP在超时后重发整个TCP报文段,该报文段对应于一份IP数据报,没有办法只重传数据报中的一个数据报片。而且如果对数据报分片的是中间路由器,而不是起始端系统,那么起始端系统就无法知道数据报是如何被分片的,因此基于这种原因,TCP是经常要避免分片的。
那么TCP层是如何避免IP层的分片呢?首先,TCP在建立连接时会进行3次握手,而在这3次握手中,客户端和服务端通常会协商一个值,那就是MSS(最长报文大小),用来表示本段所能接收的最大长度的报文段。MSS=MTU-TCP首部大小-IP首部大小,MTU值通过查询链路层得知。当两端确认好MSS后进行通信,TCP层往IP层传输数据时,如果TCP层缓冲区的大小大于MSS,那么TCP层都会将其中的数据分组进行传输,这样就避免了在IP层进行分片。

2:对于UDP而言,由于UDP是不需要保证可靠性的,没有超时和重传机制,这使得UDP很容易导致IP分片。
那么数据报被分片后是怎样的呢,又是以何种算法进行分片呢?首先我们回忆IP首部:对于每份IP数据报来说,其16位标识字段都包含一个唯一值。在数据报被分片时,这个值同时被复制到每个片中。在IP首部中,我们看到有一个占了3位的标志字段,其中第1位作为保留字段;第2位分段用来表示一个数据报是否允许在IP层被分片;而第3位更多分片字段,则是当数据报被分片时,让接收端知道在什么时候完成所有的分片组装,除了最后一片外,其他每个组成数据报的片都要把该比特置1。而如果将其中的分段标志比特位置1,表示不允许IP层对数据报进行分片。例如当路由器收到一份需要分片的数据报,而在IP首部又设置了不分片(DF)的标志比特,路由器会丢弃数据报并发送一个ICMP差错报文(“需要进行分片但设置了不分片比特”)。

IP首部中13位的偏移量字段表示IP分片在整个数据流中的位置,第一个数据报分片的偏移量置为0,而后续的分片偏移量则是根据网络的MTU大小设置,且必须为8的整数倍。
---------------------

IP数据报格式                                                                                 TCP数据报格式

 

TCP数据报格式:各个字段的意义如下:

源端和目的端的端口号,用于寻找发端和收端应用进程。这两个值加上I P首部中的源端I P地址和目的端I P地址唯一确定一个T C P连接
    序号用来标识从T C P发端向T C P收端发送的数据字节流,它表示在这个报文段中的的第一个数据字节。如果将字节流看作在两个应用程序间的单向流动,则 T C P用序号对每个字节进行计数。序号(Sequence Number):用来标识从TCP发端向TCP收端发送的数据字节流,它表示在这个报文段中的的第一个数据字节在数据流中的序号;主要用来解决网络报乱序的问题;
    确认序号(Acknowledgment Number):32位确认序列号包含发送确认的一端所期望收到的下一个序号,因此,确认序号应当是上次已成功收到数据字节序号加1。主要用来解决丢包的问题
    首部长度 需要这个值是因为任选字段的长度是可变的。这个字段占4 bit,因此T C P最多有6 0字节的首部。然而,没有任选字段,正常的长度是 2 0字节,在TCP首部中有6个标志比特。它们中的多个可同时被设置为 1
        URG 紧急指针,用来保证TCP连接不被中断,并且督促中间层设备要尽快处理这些数据
        ACK 确认序号有效
        PSH 接收方应该尽快将这个报文段交给应用层。这个标志位表示Push操作。所谓Push操作就是指在数据包到达接收端以后,立即传送给应用程序,而不是在缓冲区中排队
        RST 表示连接复位请求。用来复位那些产生错误的连接,也被用来拒绝错误和非法的数据包
        SYN 同步序号用来发起一个连接。
        FIN 发端完成发送任务。表示发送端已经达到数据末尾,没有数据可以传送了

    窗口大小:T C P的流量控制由连接的每一端通过声明的窗口大小来提供。窗口大小为字节数,起始于确认序号字段指明的值,这个值是接收端正期望接收的字节。窗口大小是一个 16 bit字段,因而窗口大小最大为 6 5 5 3 5字节。
    校验和:检验和覆盖了整个的T C P报文段:T C P首部和T C P数据。这是一个强制性的字段,一定是由发端计算和存储,并由收端进行验证。
    紧急指针:只有当U R G标志置1时紧急指针才有效。紧急指针是一个正的偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号。 T C P的紧急方式是发送端向另一端发送紧急数据的一种方式。备注:TCP头的信息长度为20字节

VRP升级:主要是系统升级。 配置文件一定要保存,系统一定要保存,否则升级失败,版本无法回退,恢复到之前。

不管中间经过多少条路由器,只要网络可达,即可备份升级。常用传输有FTP (TCP传输 可靠)    TFTP (UDP ),不管采用哪种方式,能保障升级即可。

升级有3种方式。
1  XMODEM        http://www.bacysoft.cn/ebook-arv180-a-031-7.html
2  FTP                 https://wenku.baidu.com/view/7771548bd0d233d4b14e69ed.html
3, TFTP               http://perso.wanadoo.fr/philippe.jounin/default.html

发布了51 篇原创文章 · 获赞 4 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/qq_34075348/article/details/90261857
今日推荐