《图解TCP/IP》阅读笔记(第六章 6.5、6.6)——其他代表性的传输层协议与UDP、TCP首部

news2024/12/28 9:49:13

6.5 其他传输层协议

实际上,UDP与TCP在很长的一段时间,霸占了“传输至尊榜”中的前两位,难以分出高下,但是仍有几款“神兵利器”,被收入兵器榜前十位,接下来就来介绍一些已经被提案且在今后可能会被广泛使用的传输层协议。


UDP-Lite(Lightweight User Datagram Protocol,轻量级用户数据报协议)

是一种用于扩展UDP技能的传输层协议。应对的情况是,基于UDP的通信中如果校验和出现错误,就会将所有包全部丢弃,但是有些应用(例如,对于我们做音视频的而言,有些编码数据即使被破坏了部分,也是可以使用的)在面对这种情况时,并不希望将所有已收到的包丢弃。

有一种方法是,不启用校验和,但是这并不是很好的方法,因为如果是UDP首部中的端口号被破坏或者IP首部的IP地址被破坏,就会导致严重后果。

所以,UDP-Lite应运而生,其本质与UDP几乎完全一样,区别在于计算校验和的范围可以由应用自行决定。该范围可以是“包+伪首部的校验和”的计算,也可以是“首部+伪首部的校验和”的计算,还可以是“首部+伪首部+数据从起始到中间某个位置的校验和”的计算。

后续我们会讲到,UDP首部中有个字段表示为包长,该值就决定了协议首部第一个字节到第多少个字节要进行校验和计算。

使用了此机制,就可以只检验那些决不允许发生错误的部分。对于其他内容,就可以睁一只眼闭一只眼了。


SCTP(Stream Control Transmission Protocol,流控制传输协议)

以下内容引用自百度词条“SCTP”:

在客户和服务器之间提供关联(association),并像TCP那样给应用提供可靠性、排序、流量控制以及全双工的数据传输。SCTP中使用“关联”一词替代“连接”是为了避免这样的内涵:一个连接只涉及两个IP地址间的通信。一个关联指代两个系统之间的一次通信,它可能因为SCTP支持多宿而涉及不止两个地址。

其有以下特点:

  • 单位是消息(message)。在TCP中接收端并不知道发送端应用决定的消息大小(回顾一下,TCP中有约束发送端自身的拥塞控制,以及借由接收端告知发送端的流控制)
  • 支持多个宿主,即使网络接口控制器(NIC)发生变化,也可以继续通信,相较于TCP提高了故障应对能力。
  • 支持多数据流通信,TCP中建立多个连接才能实现通信的效果,在SCTP中一个连接就可以。
  • 可以定义消息的生存期限,超过生存期限的消息不会被重发

该协议用于发送众多较小消息(又名数据块,chunk)的情况。多重宿主的意思,以笔记本为例,笔记本电脑既可以连接以太网,又可以连接无线LAN,这是NIC会获取不同的IP地址,即使中途发生以太网和无线LAN的切换,也可以保持通信不中断。

总的来说,SCTP可以给具备多个NIC的主机提供更可靠的传输。


DCCP(Datagram Congestion Control Protocol,数据报拥塞控制协议),辅助UDP,因为UDP中没有拥塞控制机制。所以当用UDP发送大量数据的时候,就很容易出现问题。

其特点如下:

  • 不提供发送数据的可靠性传输
  • 具备建立和断开连接的处理,在此方面具有可靠性
  • 可根据网络拥堵情况进行拥塞控制,根据RFC4340,DCCP可以提供类似TCP(TCP-Like)拥塞控制TCP友好升级控制(TCP-Friendly Rate Control)
  • 使用了ACK机制,用于重发与否的判断

6.6 UDP首部的格式

此前的内容中一直或多或少的提到过UDP和TCP首部中的某些字段的作用,其就好比武林秘籍一般,死读书是很难有用处的,需要将其化为一种意向。(我的想法就是,想到该怎么用的时候,就查一查就好了)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z8N6IIuD-1671900247492)(2022年12月23日.assets/image-20221223215646865.png)]

以下就是老生常谈的每个字段的集体用处介绍:

  • 源端口号 16bits

    可以设置为0,表示没有源端口号,用于不需要返回的通信中

  • 目标端口号 16bits

  • 包长度 8bits

    UDP首部的长度和数据的长度之和,单位为字节;

    此前讲述UDP-Lite协议的时候,提到过该字段

  • 校验和

    这部分用于提供可靠的UDP首部和数据而设计(可能有人会问UDP不是不可靠的吗?确实如此,但是不能妨碍想要实现较为可靠的传输的应用对其进行处理)。UDP使用的是附加在首部之前的伪首部 + 首部 + 数据,用于计算校验和。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hEYkJVN1-1671900247493)(2022年12月23日.assets/image-20221224103411032.png)]

    下图(来源于《计算机网络》一书)可以较为直观的了解具体是如何进行计算的

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Vu1dXm7G-1671900247493)(2022年12月23日.assets/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2V0aGFuMGx5,size_10,color_FFFFFF,t_70.png)]

    如上图所示,接收端收到UDP后,从IP首部知悉IP地址构造UDP伪首部,再进行校验和计算。校验和等于校验和字段以外部分的1的补码和。因此,包括校验和字段在内的所有数据之和结果为“16位全部是1”时,才会认为收到的数据是正确的。

    UDP中也可以不使用校验和,此时在校验和字段中填入0。此时,协议处理开销会降低,数据转发速度会相应有所提高。

    书中也提到了为什么要是用伪首部,归根到底原因还在于五元组多数情况下是不能出错的,UDP首部中仅有五元组中源端口与目标端口两元,如果其余三元在传输过程中出现问题,就极有可能导致要收包的应用收不到包,不该收包的却收到了。

    另外,IP首部没有校验和字段,正是通过UDP的伪首部,实现了IP首部并不可靠的情况下仍可以提供可靠的通信传输。

6.7 TCP 首部格式

如下图所示,明显要比UDP复杂很多。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ogY5USyj-1671900247494)(2022年12月23日.assets/image-20221224111532839.png)]

  • 源端口号 16bits

  • 目标端口号 16bits

  • 序列号 32bits

    用以表示“累积发送字节数”的值。该值不会从0或1开始,而是建立连接时,有系统生成的随机数作为初始值。

    另外,连接和断开连接时发送的SYN与FIN包,虽然不携带数据,但是也会作为一个字节,增加相应的序列号的值。

  • 确认应答号 32bits

    下一次应该收到的数据的序列号。实际上指已收到确认应答号减一为止的数据,表示此前数据都已正常接收。

  • 数据偏移 4bits

    表示TCP传输的数据部分应该从TCP包的那个位开始计算,也可以把它看做是TCP的首部长度。例如,该字段设置为5,TCP首部长20字节,4x5 = 20,说明从TCP包的一开始到20字节为止都是TCP首部。

  • 保留 4bits

    用于扩展,一般设置为0。

  • 控制位 8bits

    该字段应该属于重中之重的内容了(因为内容多所以重)。其每一位的具体含义可以见下图(图中还包括数据偏移字段和保留字段)。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MDGbxVEG-1671900247494)(2022年12月23日.assets/image-20221224230817357.png)]

    • CWR = Congestion Window Reduced

      与ECE位一同作用于IP首部的ECN字段;为1是表示通知对方已将拥塞窗口缩小。

    • ECE = ECN-Echo

      该位置1时,表示通知对方,从对方到这边的网络有拥塞。

      若在IP首部的ECN为1,则也会将TCP首部中的ECE设置为1.

    • URG = Urgent Flag

      该位置1时,表示包中有需要紧急处理的数据。

    • ACK = Acknowledgement Flag

      该位置1时,表示确认应答的字段有效。

      TCP规定,除了起初建立连接的SYN包,该位必须置1.

    • PSH = Push Flag

      该位置1时,表示需要将收到的数据立刻传给上层应用协议。

      该位置0时,表示不需要立即传而是先进行缓存。

    • RST = Reset Flag

      该位置1时,表示TCP中出现异常必须强制断开连接。

      例如程序宕掉,主机电源断开等导致重启,从一个未被使用的端口发来通信等情况,所有用于连接的信息将被全部初始化。

    • SYN = Synchronize Flag

      该位置1时,表示希望建立连接,并在序列号的字段中进行序列号初始值的设定。

    • FIN = Fin Flag

      该位置1时,表示希望断开连接,今后不再有数据发送。值得注意的是,主机收到FIN包时,不必立即回复FIN包,而是可以等到缓冲区中的所有数据都已成功发送而被自动删除后再发。

  • 窗口大小 16bits

    用于通知相同TCP首部确认应答号所指位置开始,能够接受的数据大小。如果窗口为0,表示可以发送窗口探测,以了解最新的窗口大小,但这个数据必须是一个字节。

  • 校验和

    见下图

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tt8NtUwg-1671900247494)(2022年12月23日.assets/image-20221225002709154.png)]

    TCP校验和的计算方式与UDP相似,一样使用到了伪首部,一样使用到了填充0技巧,一样时通过二进制反码计算,区别在于其无法被关闭。

    此处书中特意提了一下,为什么数据链路的FCS检验了噪声干扰带来的位错误,还需要在传输层再次进行校验和计算。其实,TCP与UDP的校验和更是一种进行路由器内存故障或程序漏洞导致的数据是否被破坏的检查。

  • 紧急指针 16bits

    仅有在URG控制位为1时有效,表示本报文段中紧急数据的指针。紧急数据为“从数据部分的首位到紧急指针所指示的位置为止”。

    如何处理紧急数据则属于应用的问题。

  • 选项

    该字段用于提高TCP的传输性能。因为根据数据偏移进行控制,其长度最大为40字节。

    选项字段尽量调整为32位的整数倍。书中列了一个表格,点出具有代表性的TCP选项。

    其中重要的有MSS,窗口扩大,时间戳字段等。

本篇小结

这篇内容也是第六章的最后一篇,主要可以分为两部分

第一部分,对其他的一些传输层协议进行了简单介绍,包括UDP-Lite(制定校验和范围),SCTP(支持多宿主的系统性协议),DCCP(为UDP添加了拥塞控制机制)。

第二部分则对UDP和TCP首部进行了介绍,重点需要理解的内容应该是校验和的计算,其余内容在有困惑时查阅书籍即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/113417.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

控制图简明原理及Plotly实现控制图Python实践

1. 控制图简明原理 1.1. 关于控制图概述 控制图(Control Chart)又叫管制图,图上有三条平行于横轴的直线:中心线(CL,Central Line)、上控制限(UCL,Upper Control Limit&…

2023跨面代码(烟花+自定义文字+背景音乐+雪花+倒计时)

2023年快要到来啦,很高兴这次我们又能一起度过~ 目录 一、前言 二、跨年烟花 三、效果展示 倒计时 2023​编辑 兔圆圆​编辑 四、编码实现 index.html 烟花,雪花,背景音乐,页面样式 index.js 自定义文字 五、获取代码 需…

RabbitMQ 第一天 基础 2 RabbitMQ 的安装配置 2.2 RabbitMQ 管控台使用

RabbitMQ 【黑马程序员RabbitMQ全套教程,rabbitmq消息中间件到实战】 文章目录RabbitMQ第一天 基础2 RabbitMQ 的安装配置2.2 RabbitMQ 管控台使用2.2.1 RabbitMQ 控制台的使用第一天 基础 2 RabbitMQ 的安装配置 2.2 RabbitMQ 管控台使用 2.2.1 RabbitMQ 控制台…

算法学习笔记

最近无意中看到一个算法的网站,看着感觉介绍得挺系统的,虽然做算法以及指导学生开发各种算法这么些年了,却没有真正系统的学习过(几年前啃过算法导论,但是苦于那蹩脚的中文翻译,也没有去看英文原文&#xf…

车用DC-DC模块 1224V转8V3A过认证大塑料外壳

名称:车用12V转8V3A电源转换器 型号:LM40J8V3A3S 性质:非隔离型的BUCK电源转换器, 特点:采用集成IC设计,具有转换效率高,体积小,稳定可靠的特点,采用灌胶工艺&#xf…

从零搭建机器学习平台Kubeflow

1 Kubeflow简介 1.1 什么是Kubeflow 来自官网的一段介绍: Kubeflow 项目致力于使机器学习 (ML) 工作流在 Kubernetes 上的部署变得简单、可移植和可扩展。 Kubeflow的目标不是重新创建其他服务,而是提供一种直接的方法,将用于 ML 的同类最佳…

Java项目:springboot田径运动会管理系统

作者主页:源码空间站2022 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本项目分为管理员、学生两种角色, 管理员主要功能包括: 功能:登录、查看个人资料、修改密码、选手管理、赛事…

SpringBoot 2.7.1学习---构建SpringBoot的几种方式

开发环境: SpringBoot2.7.1需要JDK版本8,Spring版本需要5.3.20或更高版本 maven版本3.5以上 如果不使用内置Tomcat,需要tomcat9.0或以上 Tomcat9好像没有,先搞个 SpringBoot 2.7.1快速入门 构建SpringBoot的几种方式 1.maven方式构建 写一个启动类 且加上SpringBootAppli…

还在手动发早安吗?教你用java实现每日给女友微信发送早安

摘要:教你如何用java实现每日给女友微信发送早安等微信信息。本文分享自华为云社区《java实现每日给女友微信发送早安等微信信息》,作者:穆雄雄 。 前言 据说这个功能最近在抖音上很火,我没有抖音,没有看到。 但是我…

排序

章节目录:一、排序算法1.1 概述1.2 分类1.3 算法复杂度1.4 时间复杂度1.5 空间复杂度二、冒泡排序2.1 概述2.2 算法分析2.3 代码示例三、选择排序3.1 概述3.2 算法分析3.3 代码示例四、插入排序4.1 概述4.2 算法分析4.3 代码示例五、希尔排序5.1 概述5.2 算法分析5.…

裸露土堆识别系统 yolov7

裸露土堆识别系统基于yolov7深度学习架构模型,对现场画面实时分析检测,如检测到画面中的土堆有超过40%部分没被绿色防尘网覆盖,则立即抓拍存档告警。我们使用YOLO(你只看一次)算法进行对象检测。YOLO是一个聪明的卷积神经网络(CNN)&#xff0…

我靠steam搬砖,日赚几千,投入不到万元

什么做苦力、技能、直播卖货,电商等等对比我这个都是小钱。我这个方法是利用了大部分人的信息差来赚钱。 我就不藏着掖着了,授人以鱼不如授人以渔,反正你赚的又不是我的钱。 什么是“Steam游戏搬砖”呢? 简单来说,就…

Docker网络

网络基础知识 网络相关命令 查看Linux中的网卡 [rootlocalhost ~]# ip link show[rootlocalhost ~]# ls /sys/class/net[rootlocalhost ~]# ip a 状态: UP、DOWN、UNKNOW link/ether:MAC地址 inet:该网卡绑定的IPv4地址 [rootlocalhost ~]# ip link …

Python和MySQL对比(1):用Pandas 实现MySQL语法效果

文章目录一、前言二、语法对比数据表SELECTASWHEREDISTINCTGROUP BYORDER BYHAVINGLIMIT三、小结一、前言 环境: windows11 64位 Python3.9 MySQL8 pandas1.4.2 本文主要介绍 MySQL 中的关键字:SELECT、AS、WHERE、DISTINCT、GROUP BY、ORDER BY、HAVING…

文献检索

文献检索第一篇检索作业总结第一章检索任务1.1检索课题1.2确定选题所属学科1.3中英文检索词第二章检索策略与结果2.1检索中文期刊文献2.1.1 CNKI中国期刊全文数据库2.1.2 维普期刊全文数据库2.1.3 万方期刊数据库2.1.4 超星期刊全文2.2检索中文学位论文2.2.1 CNKI博硕学位论文数…

Java项目:SpringBoot美容院后台管理系统

作者主页:源码空间站2022 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本项目为美容院后台管理系统, 操作员包含以下功能:操作员登陆,操作员首页,会员列表,添加会员,添加美容产品,购买商品,添…

YOLOV7学习记录之mAP计算

如何评估一个训练好模型的好坏,是目标检测中一个很重要的因素,如常见的TP、FP、AP、PR、map等 TP、FP、TN、FN TP:被正确分类为正样本的数量;实际是正样本,也被模型分类为正样本 FP:被错误分类为正样本的…

Node.js - 数据库与身份认证

文章目录目标一、数据库的基本概念1、什么是数据库2、常见的数据库及分类3、传统型数据库的数据组织结构(1)Excel 的数据组织结构(2)传统型数据库的数据组织结构(3)实际开发中库、表、行、字段的关系二、安…

RV1126笔记十二:实现RTMP多路拉流

若该文为原创文章,转载请注明原文出处。 一、介绍 通过RV1126实现RTMP的多路拉流,并在屏幕上显示出来,这里涉及到ffmpeg几个重要知识点,和RV1126如何在屏幕分屏显示。 二、流程图 流程和单路拉流类似,这里只是涉及拉取后的图像需要解码缩放,在合成分屏显示出来。 具…

阳过→阳康,数据里的时代侧影;谷歌慌了!看各公司如何应对ChatGPT;两份优质AI年报;本周技术高光时刻 | ShowMeAI每周通讯 #003-12.24

这是ShowMeAI每周通讯的第3期。通讯聚焦AI领域本周热点,及其在各圈层泛起的涟漪;关注AI技术进步,并提供我们的商业洞察。欢迎关注与订阅! 本周在 CSDN 积极答题一路升到 Top2,被系统误判为 ChatGPT 机器人X﹏X 可见压力…