计算机网络-笔记-第五章-运输层

目录

五、第五章——运输层

1、运输层概述

2、运输层端口号、复用、分用

(1)熟知端口号、登记端口号、短暂端口号

(2)熟知端口号

(3)发送方复用、接收方分用

3、UDP与TCP对比

(1)UDP

(2)为什么TCP面向字节流、UDP面向报文?

4、TCP各种机制

(1)TCP——流量控制

(2)拥塞控制

(2)拥塞控制 ——慢开始 & 拥塞避免

(2)拥塞控制 ——快重传 & 快恢复

(2)拥塞控制 ——总结

(3)TCP——超时重传

(4)TCP——可靠传输

(5)TCP——连接建立(※)

(6)TCP——连接释放(※)

(7)TCP——首部格式

(8)TCP——首部格式——端口、序号、确认号

(9)TCP——首部格式——数据偏移、保留、窗口

(10)TCP——首部格式——标志位、紧急指针

(11)TCP——首部格式——校验和、填充、选项


五、第五章——运输层

1、运输层概述

网络层实现了主机与主机

运输层实现端口到端口(进程与进程)

运输层协议 = 端到端协议

 

 

 

2、运输层端口号、复用、分用

(1)熟知端口号、登记端口号、短暂端口号

注意:端口号的范围——0~65535

 

端口号是用于标识应用程序或服务的通信端口。它是一个16位的数字,范围从0到65535。

0到1023是熟知端口号(Well-known Ports),

1024到49151是登记端口号(Registered Ports),

49152到65535是短暂端口号(Dynamic or Private Ports)。

熟知端口号是广泛使用和标准化的一些常用端口号,由IANA指定。

登记端口号是由IANA进行登记但没有被广泛使用或标准化的一些端口号,范围在1024到49151之间。

短暂端口号是临时分配给客户端的端口号,范围在49152到65535之间。

(2)熟知端口号

 

(3)发送方复用、接收方分用

发送方复用(Sender Multiplexing)和接收方分用(Receiver Demultiplexing)是指通过端口号来将多个应用程序的数据进行区分和传输的过程。

发送方复用是指发送方的运输层将来自不同应用程序的数据进行合并,并使用源端口号将这些数据分配给不同的传输连接。每个传输连接都与一个唯一的目标端口号相关联,这样在接收端可以根据目标端口号将数据正确地交付给对应的应用程序。

接收方分用是指接收方的运输层根据目标端口号将到达的数据进行分发,确保这些数据被正确地交付给相应的应用程序。接收方依靠目标端口号来识别传输连接,并将数据传递给相应的应用程序,从而实现数据的分发和传输。

通过发送方复用和接收方分用,不同应用程序的数据可以共享同一个网络连接,并通过运输层使用端口号进行区分和传输。

这种复用和分用的机制有效地提高了网络资源的利用率和通信效率。

 

3、UDP与TCP对比

注意:TCP面向字节流、UDP面向报文

 

特性

TCP

UDP

连接性

面向连接

无连接

可靠性

提供可靠的数据传输

不保证可靠性

传输顺序

保证数据按照发送顺序进行传输

不保证数据按照发送顺序进行传输

消息边界

无消息边界,数据流进行分段和重组

有消息边界,保持消息的完整性

开销

较大的开销,提供错误检测、重传和流量控制机制

较小的开销,不提供错误检测和重传机制

(1)UDP

UDP是一个无连接协议,传输数据之前源端和终端不建立连接,当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。在发送端,UDP传送数据的速度仅仅是受应用程序生成数据的速度、计算机的能力和传输带宽的限制;在接收端,UDP把每个消息段放在队列中,应用程序每次从队列中读一个消息段。

(2)为什么TCP面向字节流、UDP面向报文?

TCP 面向字节流:

TCP 将数据视为字节流,发送端将连续的字节流分成合适的大小(根据网络状况动态调整)进行发送,接收端再将其按照相同的字节顺序重组成原始数据。

发送的字节流被切割成多个 TCP 分段(Segment),每个分段都有序号,以便接收端可以按正确的顺序重组。TCP 在传输过程中会提供流量控制、拥塞控制和丢失重传等机制,确保数据可靠地到达。由于 TCP 的可靠性保证,它能够提供一个高层次的抽象,将应用程序的数据传输看作一个连续的字节流。

UDP 面向报文:

UDP 则将数据视为报文,每个 UDP 分组(Datagram)都是一个独立的消息单元,具有自己的头部和标识信息。

UDP 不对数据进行切割或重新组装,发送方的每个报文都作为一个独立的实体发送给接收方。每个报文都有自己的标识信息,接收方根据报文的边界来区分不同的报文。

由于 UDP 不提供可靠性保证,发送的报文可能会丢失、重复或乱序到达。应用程序需要自己处理这些问题,因此 UDP 提供了一个更加轻量级和低开销的传输机制。

总结:

TCP 是面向字节流的协议,它提供可靠的、有序的、基于连接的数据传输。

UDP 是面向报文的协议,它提供简单的、无连接的、不可靠的数据传输。

TCP 的面向字节流特性使其适合于需要可靠性和顺序性的应用,

 UDP 的面向报文特性使其适合于快速传输和对实时性要求较高的应用。

报文:就是独立的数据单元(所以丢了也问题不大)

字节流:就是连续的数据,相互是需要拼接的(所以要保障可靠性)

4、TCP各种机制

(1)TCP——流量控制

不太发送太快,速度要一致!!!

 

1、建立连接:主机告诉服务器,自己的窗口大小(服务器就会调整自己的流量窗口,和目的主机同步)

2、当窗口中的数据包发送后,就开始计时,如果一直到超时,都没有得到ACK确认,就重发!

3、服务器当得到ACK确认后,就可以根据相关信息,移动和调整窗口,继续发数据

 

1、当主机窗口为0时,服务器会开启(0窗口计时器)

2、持续发送探测报文,以此等待主机有空闲窗口,进行接收信息

3、期间,如果报文如果有丢失,就会进入死锁局面

4、在TCP中,当出现网络丢包或连接中断情况时,并不会直接导致死锁局面。TCP具有超时重传机制和连接恢复机制,可以通过重发数据、重新建立连接等措施来处理异常情况。

 

习题

 

(2)拥塞控制

 

慢开始、拥塞避免、快重传、快恢复

 

(2)拥塞控制 ——慢开始 & 拥塞避免

通过(慢开始 & 拥塞避免)算法,让发送数据的量维持在一定的值!!!

 

cwnd:可发送一次性报文段的个数

swnd:发送窗口

ssthresh:慢开始门限阈值

 

这两个算法——容易让传输效率降低!!(具体原因看下图)

 

(2)拥塞控制 ——快重传 & 快恢复

快重传:报文段丢失了,就让对方快速告诉我(连续喊我3次,那么我就信了,就重传)

不会因为报文段的丢失,傻傻的等着超时再重传,而导致后面传输的数据都失效!

(其实,就是两者约定好,当发生了这种情况该怎么做)协议就是这样滴~

 

快恢复:不是像拥塞避免那样,直接把发送窗口的值置为1(太der了)

 

(2)拥塞控制 ——总结

慢开始:发送数据的段数,从1开始,当段数小于【门限阈值】时,段数为指数上升

拥塞避免:当段数大于【门限阈值】时,段数逐步+1

注意:当发生了【超时重传】时,将会把发送窗口大小设为1

快重传:当发生【个别报文段】丢失时(不是通道拥塞,超时造成的),由接受方喊3次,然后重传

快恢复:当出现【个别掉点】时,就让【发送窗口大小】和【门限阈值】设置为【当前发送窗口大小的一半】——以此实现快恢复(与超时重传情况下不同哟!)

 

习题:

 慢开始(Slow Start):

  • 在 TCP 建立连接后,发送方会将发送窗口大小初始化为一个较小的值。
  • 发送方起初以指数级别递增发送段的数量,即每次窗口大小翻倍,因此称为慢开始。
  • 当达到一个门限阈值(通常由拥塞窗口大小决定)时,发送方会进入拥塞避免阶段。

拥塞避免(Congestion Avoidance):

  • 在拥塞避免阶段,发送方每经过一个往返时间就将拥塞窗口(发送窗口大小)加1,使得发送段的数量逐渐增加
  • 通过逐渐增加发送段的数量来控制发送速率,以避免网络拥塞。

超时重传(Timeout Retransmission):

  • 如果发送方在一定时间内未收到接收方的确认 ACK,就会认为有段丢失或网络状况不佳,触发超时重传机制。
  • 在超时重传时,将发送窗口大小设置为1,重新发送丢失的数据段。

快重传(Fast Retransmit):

  • 当接收方接收到乱序的报文段,但后续的报文段已经到达时,会立即向发送方发送重复的 ACK 确认。
  • 当发送方连续收到3个相同的确认 ACK 时,会立即重传下一个未收到确认的报文段,而无需等待超时。

快恢复(Fast Recovery):

  • 当发送方收到快重传的确认 ACK 后,会将拥塞窗口大小设置为当前发送窗口大小的一半,并进行拥塞避免。
  • 这样可以快速恢复发送方的发送速率,而不需要执行慢开始的过程。

流量控制(Flow Control):

  • TCP 使用滑动窗口机制来进行流量控制,确保发送方不会淹没接收方。
  • 接收方通过发送窗口大小告知发送方自己的可接收能力,发送方会根据接收窗口大小来控制发送速率。

(3)TCP——超时重传

超时重传时间的选择是TCP最复杂的问题之一

超时阈值太小(容易超时)、太大(空闲时间较大,传输效率降低)

超时重传时间(计算公式采用——加权平均)——在每一次成功传输后

 

但是!难以正确计算【超时重传时间】(具体情况,看下图)

 

Karn算法:

既然你重传后,无法正确计算【往返时间】,那么我就不管【重传这一情况】。

弊端:如果网络环境一直保持拥塞,就会一直导致重传(因为你没有考虑重传的计算,就不会修改超时时间阈值)

修正:重传后,把RTO增大一些

 

模拟练习 (这个公式有点难记,忘记了,可以再去看看视频结尾)

5.6 TCP超时重传时间的选择_哔哩哔哩_bilibili

 

公式

 

(4)TCP——可靠传输

字节为单位——滑动窗口

利用三个指针——我们可以确认很多东西(窗口大小,已发送数据,未发送数据)

 

注意事项!!!

双方窗口可能不一样大、全双工、数据如何处理、如何确认收到?

 

习题

 

 

(5)TCP——连接建立(※)

 

不能用两报文握手(毕竟,相当于你主机发送一个建立连接,服务器就会进入连接状态)

这是非常不好滴(对服务器来说,太容易被恶搞了)

虽然对于这个三报文握手,仍有SYN洪水和ACK洪水,但是总比两报文要好一点点

 

seq:随机的值

 

通过三次握手的过程,双方确认了对方的能力与意愿建立连接,并确保了初始序列号的一致性。这有助于避免恶意主机的滥用和预防网络中的重复连接。

尽管三次握手不能完全消除洪水攻击的风险,但它是确保连接可靠性和安全性的基本机制。

在实际应用中,还可以采取其他安全措施,如防火墙、入侵检测系统(IDS)、反洪水限制等来进一步增强网络的安全性和可靠性。

(6)TCP——连接释放(※)

四次挥手

 

当主机故障后,服务器如何判别?

每隔一段时间,就发送一个【探测报文】,如果连续10次无响应,就自动断开连接!

 

(7)TCP——首部格式

 

 

这里可以和IP数据报、数据帧;进行对比记忆(源IP/MAC地址和目的IP/MAC地址)

源端口、目的端口

 

序号、确认号、确认标志位ACK

 

重点!!!(千万别被搞混了)

认真看看下面的图!(客户和服务器发送的信息)

我已经写上了每一个数据的意义!(这两个是在相互交流的哟!!!)

 

(8)TCP——首部格式——端口、序号、确认号

 

(9)TCP——首部格式——数据偏移、保留、窗口

 

注意:偏移量(重点!!!)窗口(用来流量控制的!) 

(10)TCP——首部格式——标志位、紧急指针

 

(11)TCP——首部格式——校验和、填充、选项

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

什么是响应式图片?如何在网页中实现响应式图片?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 响应式图片&#xff08;Responsive Images&#xff09;⭐ 实现响应式图片的方法1. 使用<img>标签的srcset属性2. 使用<picture>元素3. 使用CSS的max-width属性4. 使用响应式图片库 ⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&…

【AI】数学基础——高数(函数微分部分)

参考&#xff1a;https://www.bilibili.com/video/BV1mM411r7ko?p1&vd_source260d5bbbf395fd4a9b3e978c7abde437 唐宇迪&#xff1a;机器学习数学基础 文章目录 1.1 函数1.1.1 函数分类1.1.2 常见函数指/对数函数分段函数原函数&反函数sigmod函数Relu函数(非负函数)复…

nlp系列(7)三元组识别(Bert+CRF)pytorch

模型介绍 在实体识别中&#xff1a;使用了Bert模型&#xff0c;CRF模型 在关系识别中&#xff1a;使用了Bert模型的输出与实体掩码&#xff0c;进行一系列变化&#xff0c;得到关系 Bert模型介绍可以查看这篇文章&#xff1a;nlp系列&#xff08;2&#xff09;文本分类&…

windows环境下QuestaSim软件的使用

文章目录 前言一、QuestaSim使用方法1、编译vlog2、映射vmap3、仿真vism4、ifndef和define&#xff08;常用&#xff09;5、QuestaSim的仿真界面6、完整QuestaSim仿真——TCL脚本 前言 2023.8.29 一、QuestaSim使用方法 1、编译vlog vlog&#xff1a;questasim的编译命令 -s…

开始MySQL之路——MySQL 事务(详解分析)

MySQL 事务概述 MySQL 事务主要用于处理操作量大&#xff0c;复杂度高的数据。比如说&#xff0c;在人员管理系统中&#xff0c;你删除一个人员&#xff0c;你即需要删除人员的基本资料&#xff0c;也要删除和该人员相关的信息&#xff0c;如信箱&#xff0c;文章等等&#xf…

Andorid 属性动画ObjectAnimation整理

属性动画相关内容可参考官网 动画资源 属性动画概览 来自官网的说明&#xff0c; 属性动画与视图动画的区别 视图动画系统仅提供为 View 对象添加动画效果的功能&#xff0c;因此&#xff0c;如果您想为非 对象添加动画效果&#xff0c;则必须实现自己的代码才能做到。视图动…

【桌面小屏幕项目】ESP32开发环境搭建

视频教程链接&#xff1a; 【【有手就行系列】嵌入式单片机教程-桌面小屏幕实战教学 从设计、硬件、焊接到代码编写、调试 ESP32 持续更新2022】 https://www.bilibili.com/video/BV1wV4y1G7Vk/?share_sourcecopy_web&vd_source4fa5fad39452b08a8f4aa46532e890a7 一、esp…

使用亥姆霍兹线圈的注意事项

亥姆霍兹线圈由一对完全相同的圆形导体线圈组成。采用直角坐标系&#xff0c;两个半径为R的圆形线圈的中心轴与z轴同轴。两个圆形线圈的z坐标分别为和。每个导体线圈都有相同的电流I。 设置可以减少两个线圈中心O(即原点)的磁场不均匀性。这种动作促使&#xff0c;也意味着非零…

从0开始配置eslint

没有在.eslintrc文件中配置parserOptions指定语言版本和模块类型 {"parserOptions": {"ecmaVersion": 7, //指定es版本为es2016"sourceType": "module", //使用import导入模块} }eslint还不能识别jsx语法 {"parserOptions"…

通义千问本地化部署不调用GPU只调用CPU的检查方法

今天部署本地版通义千问的时候遇到一个问题。 启动他的cli_demo.py调用的一直都是CPU模式的。 检查cuda已经正确安装&#xff0c;后面发现是torch即PyTorch的安装问题。 我安装torch的时候&#xff0c;用的是默认指令&#xff0c;没有增加别的参数。 检测一下&#xff0c;输出…

【大山里的女孩】

我生来就是高山而非溪流&#xff0c;我欲于群峰之巅仰视平庸的沟壑。 这是她们的呐喊&#xff01; “我不知道我还有多少时间&#xff0c;现在还能动&#xff0c;我想做点事。” 这是张桂梅平凡的宣言&#xff0c;也是她一生都在践行的梦想。 17岁的她&#xff0c;为了祖国建…

设计模式—策略模式

目录 一、定义 二、特点 三、优点 四、缺点 五、实例 六.涉及到的知识点 1、一个类里面有哪些东西&#xff1f; 2、类和实例 什么是类&#xff1f; 什么是实例&#xff1f; 什么是实例化&#xff1f; 3、字段和属性 什么是字段&#xff1f; 属性是什么&#xff1…

[论文阅读笔记25]A Comprehensive Survey on Graph Neural Networks

这是一篇GNN的综述, 发表于2021年的TNNLS. 这篇博客旨在对GNN的基本概念做一些记录. 论文地址: 论文 1. 引言, 背景与定义 对于图像数据来说, CNN具有平移不变性和局部连接性, 因此可以在欧氏空间上良好地学习. 然而, 对于具有图结构的数据(例如社交网络 化学分子等)就需要用…

RSA私钥解密操作

RSA私钥解密操作 一、背景二、操作三、常见问题3.1 invalid key format3.2 解密的数据太长3.3 Decryption error 一、背景 项目数据库中存放的敏感字段已使用rsa加密的方式&#xff0c;将内容加密成密文存放, 现在需要在使用的时候&#xff0c;使用私钥进行解密。 二、操作 …

万户协同办公平台 ezoffice存在未授权访问漏洞 附POC

文章目录 万户协同办公平台 ezoffice存在未授权访问漏洞 附POC1. 万户协同办公平台 ezoffice简介2.漏洞描述3.影响版本4.fofa查询语句5.漏洞复现6.POC&EXP7.整改意见8.往期回顾 万户协同办公平台 ezoffice存在未授权访问漏洞 附POC 免责声明&#xff1a;请勿利用文章内的相…

【MySQL】引擎类型

与其他DBMS一样&#xff0c;MySQL有一个 具体管理和处理数据的内部引擎 。在使用create table语句时&#xff0c;该引擎具体创建表&#xff0c;而在使用select或进行其他数据库处理时&#xff0c;该引擎在内部处理你的请求。多数时候&#xff0c;引擎都隐藏在DBMS内&#xff0…

[ES]二基础 |

一、索引库操作 1、mapping属性 mapping是对索引库中文档的约束&#xff0c;常见的mapping属性包括&#xff1a; 1)type&#xff1a;字段数据类型&#xff0c;常见的简单类型有&#xff1a; ①字符串&#xff1a;text(可分词的文本)、keyword&#xff08;精确值&#xff0c…

记录《现有docker中安装spark3.4.1》

基础docker环境中存储hadoop3--方便后续查看 参考&#xff1a; 实践&#xff1a; export JAVA_HOME/opt/apache/jdk1.8.0_333 export SPARK_MASTER_IP192.168.0.220 export SPARK_WORKER_MEMORY4g export SPARK_WORKER_CORES2 export SPARK_EXECUTOR_MEMORY4g export HADOOP_H…

打通数字化供需“堵点”,828 B2B企业节推出企业应用一站购平台

当前&#xff0c;数字技术与实体经济深度融合&#xff0c;为千行百业注入新动力、拓展新空间。数据显示&#xff0c;2022年中国数字经济规模超过50万亿&#xff0c;占GDP比重超过40%&#xff0c;继续保持在10%的高位增长速度&#xff0c;成为稳定经济增长的关键动力。 为加速企…

已知两地经纬度,计算两地直线距离

文章目录 1 原理公式2 代码实现2.1 JavaScript2.2 C2.3 Python2.4 MATLAB 1 原理公式 在地球上&#xff0c;计算两点之间的直线距离通常使用地理坐标系&#xff08;例如WGS84&#xff09;。计算两地直线距离的公式是根据经纬度之间的大圆距离&#xff08;Great Circle Distanc…