关于网络:传输层之UDP与TCP的首部

54次阅读

共计 1553 个字符,预计需要花费 4 分钟才能阅读完成。

从通信信息处理的角度看,运输层向它下面的应用层提供通信服务,它属于面向通信局部的最高层,同时也是用户性能的最底层。

传输层位于应用层和数据链路层之间,次要有两个协定,用户数据报协定 UDP(User Datagram Protocol)、传输控制协议 TCP(Transmission Control Protocol)。

UDP 在发送数据前不须要建设连贯,所以首部不须要存储太多数据,只有四局部(源端口、目标端口、长度、测验和),各占 2 个字节,其中长度属性并没必要,因为齐全能够在数据链路层计算出来,这里存在是为了保障头部占据 8 字节。

这里减少了一个【伪首部】,伪首部的数据是不会发送到下一层的,仅仅是用于测验和加强校验的性能,测验和将首部(包含伪首部)和数据局部一起计算。

UDP 申请抓包后能够看到只有几项数据,源端口 52364,目标端口 53,总长度 43 字节,测验和看起来有效。

但 TCP 就不同了,发送数据前须要建设连贯,并且尽可能的保障数据牢靠交付,首部会有更多的属性来记录信息。

  • 序号(Sequence Number) — 4 字节,TCP 传输过程中每一个字节都有编号,建设连贯后,序号示意 TCP 数据局部的第一个字节编号(理论是一个十分大的值,十分大的值 – 固定值 = 小的编号,同一申请有一个固定值,固定值来源于建设连贯时 seq= 0 时的值)
  • 确认号(Acknowledgment Number) — 冀望对方下一次传过来的 TCP 数据局部的第一个字节编号
  • 数据偏移 — 4 位,范畴 0x0101-0x1111,换成十进制乘以以 4 为首部长度(20-60 字节)
  • 保留 — 临时没什么用,占 6 位(标记位有三位没什么用就划到了保留位中),有些材料会说占 3 位,标记位占 9 位
  • 标记位(Flags) — 6 位

    • urg: urgent(紧急)— 为 1 时,紧急指针中的数据才有作用
    • ack: acknowledgment(确认)— 为 1 时,确认号字段才无效
    • pus: push — 交互式网络通信才有用
    • res: reset(重置)— 为 1 时,示意 tcp 连贯中呈现问题,要开释连贯并从新建设连贯
    • syn: synchronization(同步,用于建设连贯)— syn=1,ack= 0 时表明建设连贯,服务器批准时回复 syn=1,ack=1
    • fin: finish(终止连贯)— 为 1 时,示意要求开释连贯
  • 窗口(Window) — 2 字节,流量管制性能,告知下一次容许发送的数据大小
  • 测验和(checksum) — 2 字节,计算伪首部(12 字节、不会传递给网络层)+ 首部 + 数据
  • 紧急指针:2 字节,urg 为 1 时失效,搁置的是长度,示意 tcp 数据中前 x 位是紧急数据,尽快传送
  • 选项:长度可变,当建设连贯时,牢靠传输和流量管制时须要

从抓包数据能够看到,序号为 0,但它实在的序号是一个十分大的数字(631127820),确认号为 0,数据偏移为 8,乘以 4 得出的首部长度为 32 字节,标记位折叠起来了,外面的 syn 是 1,其余都是 0,这里是建设连贯的时候。

窗口大小 64240,测验和看起来有效,紧急指针为 0,选项中有 12 字节,外面定义了一些建设连贯须要用的其它数据,加上首部其余属性的默认 20 字节,与总长度 32 字节对应。

首部存储信息的不同决定着 UDP 和 TCP 存在很大的差别。

UDP 适宜实时的场景,比方直播、视频通话,即便有些时候卡顿,没听清内容、没看到画面,也不影响通信的失常进行。

TCP 正好相同,实用于须要数据残缺的场景,比方邮件、浏览器、文件传输等,这些场合如何失落了一些文字和数据,可能语义就齐全变了,会对内容完整性有较大影响。

而 TCP 又如何做到保障数据的牢靠传输呢?敬请期待我下一篇文章~

以上就是 传输层之 UDP 与 TCP 的首部 的内容,更多无关 前端 网络协议 的内容能够参考我其它的博文,继续更新中~

正文完
 0