从通信信息处理的角度看,运输层向它下面的应用层提供通信服务,它属于面向通信局部的最高层,同时也是用户性能的最底层。
传输层位于应用层和数据链路层之间,次要有两个协定,用户数据报协定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的首部
的内容 , 更多无关 前端
、网络协议
的内容能够参考我其它的博文,继续更新中~