【计算机网络】 传输层
一、传输层提供的服务
1.1 传输层的功能
1.1.1 传输层的功能如下:
传输层提供应用进程之间的逻辑通信(即端到端的通信)。与网络层的区别是:网络层提供的是主机之间的逻辑通信。
1.1.2 复用和分用
传输层要还要对收到的报文进行差错检测(首部和数据部分)。而网络层只检测IP数据报的首部,不检验数据部分是否出错。
提供两种不同的传输协议,即面向连接的TCP和无连接的UDP。而网络层无法同时实现两种协议(即在网络层要么只提供面向连接的服务:虚电路...;要么只提供无连接的服务:数据报...
当传输层采用的是面向连接的TCP时,尽管下面的网络是不可靠的,但这种逻辑通信的信道就相当于一条全双工的可靠信道。但当传输层采用无连接的UDP服务时,这种逻辑通信仍然是不可靠的信道。
1.2 传输层的寻址与端口
1.2.1 端口的作用
端口能够让应用层的各种应用进程将其数据通过端口向下交付给传输层,以及让传输层知道应当将其报文段的数据向上交付给应用层相应的进程。端口时传输层服务访问点,它在传输层的作用类似于IP地址在网络层的作用或MAC在数据链路层的作用,只不过IP地址和MAC地址标识的是主机,而端口标识的是主机中的应用进程。
1.2.2 端口号
应用进程通过端口号进行标识,端口号的长度为16bit,能够表示65536个不同的端口号。端口号只具有本地意义,即端口号只标识本计算机应用层中的各进程。
根据端口号的范围将端口号分为两类:
- 服务器端使用的端口号:其又分为两类,最重要的是熟知端口号,数值为0~1023;另一类是登记端口号,数值为1024~49151。它是供没有熟知端口号的应用进程使用的,必须进行登记,以防重复。
- 客户端使用的端口号,短暂性端口号,可以让客户进程反复使用
1.2.3 套接字
在网络中通过IP地址来标识和区别不同的主机,通过端口号来标识和区分一台主机中的不同应用进程,端口号拼接到IP地址即构成了套接字Socket。套接字,实际上是一个通信断点
套接字Socket = IP地址 + 端口号,可以唯一地标识网络中的一台主机和其上的一个应用进程。
1.3 无连接服务和面向连接服务
面向连接服务就是在通信双方进行通信之前,必须建立连接,在通信过程中,整个连接的情况一直被实时地监控和管理。通信结束后,必须释放连接。
无连接服务是指两个实体之间的通信不需要先建立好连接,需要通信时,直接将信息发送到”网络“中,让该信息的传递在网上尽力而为地往目的地传送。
TCP提供面向连接的服务,在传送数据之前必须建立连接,数据传送结束后要释放连接。TCP不提供广播或组播服务。TCP主要适用于可靠性更重要的场合:文件传输协议(FTP),超文本传输协议(HTTP),远程登陆(TELNET)
UDP是一个无连接的非可靠传输协议。它在IP之上提供了两个附加服务:多路复用和对数据的错误检查。使用UDP的应用主要包括小文件输送协议(TETP),DNS,SNMP和实时传输协议(RTP)。
IP数据报和UDP数据报的区别:
IP数据报在网络层要经过路由的存储转发;而UDP数据报在传输层的端到端的逻辑信息中传输,封装成IP数据报在网络层中传输时,UDP数据报的信息对路由是不可见的。
TCP和网络层虚电路的区别:
TCP报文段在传输层抽象的逻辑信道中传输,对路由器不可见;虚电路所经过的交换节点都必须保存虚电路状态信息,在网络层中若采用虚电路方式,则无法提供无连接服务;而传输层采用TCP不影响网络层提供无连接服务。
二、UDP协议
2.1 UDP数据报
2.1.1 UDP概述
UDP仅在IP数据报服务之上增加了两个最基本的服务:复用和分用以及差错检测
UDP的优点:
- UDP无须建立连接
- 无连接状态
- 分组首部开销小
- 应用层能更好地控制要发送的数据和发送时间
- UDP支持一对一,一对多,多对一和多对多的交互通信
- UDP是面向报文的。报文是不可拆分的,是UDP数据报处理的最小单位。
2.1.2 UDP的首部格式
UDP数据报包含两个部分:UDP首部和用户数据。
UDP首部有8B,由四个字段组成:
- 源端口:源端口号,在需要对方回信时使用,不需要时可用全0
- 目的端口:目的端口号,在终点交付报文时必须使用到
- 长度:UDP数据报的长度(包括首部和数据)其最小值是8(仅有首部)
- 检验和:检测UDP数据报在传输中是否有错,有错就进行丢弃。该字段是可选的,如果计算机不想计算校验和时,则直接使这些校验和为0。
2.2 UDP校验
在计算校验和之前,要在UDP数据报之前增加12B的伪首部,临时添加在UDP数据前面,将UDP数据报视为许多个16位的字串,将这些16位数进行无进制相加,最后按二进制反码求这些16位字的和。
注意:
检验时,若UDP数据报部分的长度不是偶数字节,则需填入一个全0字节。但是此字节和位首部一样是不发送的
如果UDP校验和校验出UDP数据报是错误的,那么可以丢弃,也可以上传,但是要附上错误报告,告诉上层这是错误的数据报。
通过伪首部,不仅可以检查源端口号,目的端口号和UDP用户数据报的数据部分,还可以检查IP数据报的源IP地址和目的地址。
三、TCP协议
3.1 TCP协议的特点
- TCP连接是面向连接的传输层协议,TCP连接是一个逻辑连接
- 每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点(一对一)
- TCP提供可靠传输服务,保证传输的数据无差错,不丢失,不重复且有序
- TCP提供全双工通信,允许通信双方的应用进程在任何时候都能发送数据,为此TCP连接的两端都设有发送缓存和接受缓存,用来临时存放双向通信的数据
- TCP是面向字节流的,虽然应用程序和TCP的交互是一次一个数据快(大小不等)但TCP把应用程序交下来的数据仅视为一连串无结构的字节流。
3.2 TCP报文段
TCP传送的数据单元称为报文段。TCP的报文段既可以用来运载数据,又可以用来建立连接、释放连接和应答。一个报文段分为首部和数据两个部分,整个TCP报文报作为IP数据报的数据部分封装到IP数据报中,其首部的前20B是固定的。TCP首部最短为20B,后面有4N字节是根据需要而增加的选项,长度为4B的整数倍。
TCP的全部功能体现在其首部的各个字段中,各字段的意义是:
源端口和目标端口
序号
确认号
数据偏移
保留
紧急位
确认位ACK
推送位PSH
复位位RST
同步位SYN
终止位FIN
窗口
检验和
紧急指针
选项
填充
3.3 TCP连接管理
TCP是面向连接的协议,因此每一个TCP连接都有三个阶段:连接建立,数据传送,连接释放。TCP连接的管理就是使运输连接的建立和释放都能正常进行。
在TCP建立连接的过程中,我们需要解决一下三个问题:
- 要使每一方能够确定对方的存在
- 要允许双方协商一些参数
- 能够运输实体资源进行分配
3.3.1 TCP连接的建立(3次握手)
建立连接前,服务器进程处于LISTEN状态,等待客户的连接请求
第一步,客户机的TCP首先向服务器的TCP发送连接请求报文段。
第二步,客户机的TCP收到确认报文段后,还要向服务器给出确认,并为该TCP连接分配缓存和变量
第三步,当客户机收到确认报文段后,还要向服务器给出确认,并为该TCP连接分配缓存和变量。
3.3.2 TCP连接的释放(4次握手)
第一步,客户机打算关闭连接时,向其TCP发送连接释放报文段,并停止发送数据,主动关闭TCP连接。该报文段的终止位FIN置1,序号seq = u,它等于前面已传送过的数据的最后一个字节的序号+1,FIN报文段即使不携带数据,也消耗一个序号。
第二步,服务器收到解释报文段后发出确认
第三步,若服务器已经没有要向客户机发送的数据,就通知TCP释放连接
第四步,客户机收到连接释放报文段后,必须发出确认。
3.4 TCP的可靠传输
TCP的任务是在IP层不可靠的、尽力而为服务的基础上,建立一种可靠的数据传输服务。TCP使用; 校验、序号、确认和重传等机制来达到这一目的。
3.4.1 序号
TCP首部的序号字段用来保证数据能有序地提交给应用层,TCP把数据视为一个无结构但有序的字节流,序号建立在传送的字节流上。
3.4.2 确认
TCP首部的确认号是期望收到对方的下一个报文段的数据的第一个字节的序号。发送缓存区会继续存储那些已发送但未接收到确认的报文段,以便在需要时重传。
TCP默认使用累积确认,即TCP只确认数据流中至第一个丢失字节为止的字节。
3.4.3 重传
3.4.3.1 超时重传
TCP每发送一个报文段,就对这个报文段设置一个计时器。计时器设置的重传时间到期但还未收到确认时,就要重传这个报文段。
为了计算超时计时器的重传时间,TCP采用了一种自适应的算法,它记录一个报文段发出的时间,以及收到相应确认的时间,这两个时间之差称为报文段的往返时间。
3.4.3.2 冗余ACK(冗余确认)
发送方通常可以在超时事件发生之前通过所谓的冗余ACK来较好的检测丢包情况。冗余ACK就是再次确认某个报文段的ACK,而发送方先前已经收到了该报文段的确认。TCP规定每当比期望序号大的失序报文段到达时,就发送一个冗余ACK,指明下一个期待字节的序号。
TCP规定当发送方收到对同一个报文段的3个冗余ACK时,就可以认为跟在这个被确认报文段之后的报文段已经丢失。
3.5 TCP的流量控制
TCP提供流量控制服务来消除发送方(发送速度太快)使接收方缓存区溢出的可能性,因此,可以说流量控制是一个速度匹配服务(匹配发送方的发送速率和接收方的接收速率)
3.6 TCP的拥塞控制
拥塞控制和流量控制的区别:拥塞控制是让网络能够承担先有的网络负荷,是一个全局性过程,涉及所有主机,所有路由器,以及与见地网络传输性能有关的所有因素。相反,流量控制往往是指点对点的通心量的控制,是一个端到端的问题,它所要做的是抑制发送端发送数据的速率,以便接收端来得及接收。
TCP协议要求发送发维护一下两个窗口:接收窗口和发送窗口
- 接收窗口:
- 发送窗口:
3.6.1 慢开始和拥塞避免
3.6.1.1 慢开始
在TCP刚刚好连接好并开始发送TCP报文段,先令拥塞窗口cwnd = 1,即一个最大报文段长度MSS,每收到一个对新报文段的确认后,将cwnd + 1,即增大一个MSS。从1->2->4->8...
慢开始到了一个规定的慢开始门限,然后改用拥塞避免算法。
3.6.1.2 拥塞避免算法
拥塞避免算法的思路是让拥塞窗口cwnd慢慢增大,具体做法是:让拥塞窗口cwnd按线性规律缓慢增长,
3.6.1.3 网络拥塞的处理
当出现网络拥塞,就要把慢开始门限设置为出现拥塞时的发送方的cwnd的一半,但不能小于2。
3.6.2 快重传和快恢复
3.6.2.1 快重传
当发送方连续收到三个重复的ACK报文,直接重传对方尚未收到的报文段,而不必等待那个报文段设置的重传计时器超时。
3.6.2.2 快恢复
快恢复算法:当发送方连续收到三个重复的ACK报文,执行:乘法减小:算法,把慢开始门限设置为此时发送方cwnd的一半,开始执行线性增长。
相关文章:
【计算机网络】 传输层
一、传输层提供的服务 1.1 传输层的功能 1.1.1 传输层的功能如下: 传输层提供应用进程之间的逻辑通信(即端到端的通信)。与网络层的区别是:网络层提供的是主机之间的逻辑通信。 1.1.2 复用和分用 传输层要还要对收到的报文进行…...
山东大学软件学院项目实训-创新实训-基于大模型的旅游平台(二十七)- 微服务(7)
11.1 : 同步调用的问题 11.2 异步通讯的优缺点 11.3 MQ MQ就是事件驱动架构中的Broker 安装MQ docker run \-e RABBITMQ_DEFAULT_USERxxxx \-e RABBITMQ_DEFAULT_PASSxxxxx \--name mq \--hostname mq1 \-p 15672:15672 \-p 5672:5672 \-d \rabbitmq:3-management 浏览器访问1…...
Java Web应用,IPv6问题解决
在Java Web程序中,如果使用Tomcat并遇到了IPv6相关的问题,可以通过以下几种方式来解决: 1. 配置Tomcat以使用IPv4 默认情况下,Java可能会优先使用IPv6。如果你希望Tomcat使用IPv4,最简单的方法是通过设置系统属性来强…...
MyBatis二级缓存开启条件
MyBatis缓存为俩层体系。分为一级缓存和二级缓存。 一级缓存: 一级缓存默认开启,一级缓存的作用域是SqlSession级别的,这意味着当你更换SqlSession之后就不能再利用原来的SqlSession的一级缓存了。不同的SqlSession之间的一级缓存是隔离的。…...
golang 不用sleep如何实现实现每隔指定时间执行一次for循环?
今天介绍的是在go语言里面不用time.Sleep, 使用for range 定时器管道 来实现按照我们指定的时间间隔来执行for循环, 即: for range ticker.C { } 这样就实现了for每隔指定时间执行一次,除非管道被关闭,否则for而且会一直柱塞当前线…...
【el-tooltips改造】Vue实现文本溢出才显示el-tooltip,否则不显示el-tooltips
实现原理: 使用disabled属性控制el-tooltip的content显示与隐藏; 目标: 1行省略、多行省略、可缩放页面内的文本省略都有效。 实现方式: 1、自定义全局指令,tooltipAutoShow.js代码如下(参考的el-table中的…...
【Python数据类型的奥秘】:构建程序基石,驾驭信息之海
文章目录 🚀Python数据类型🌈1. 基本概念⭐2. 转化👊3. 数值运算💥4. 数值运算扩展(math库常用函数) 🚀Python数据类型 🌈1. 基本概念 整数(int):整数是没有小数部分的数…...
vue使用html2canvas截图下载时,存在svg或者img或者特殊字体时截图不全的解决办法
使用html2canvas进行div截图时,存在svg和img的解决办法 写在前面:vue使用html2canvas截图时,存在svg或者img或者特殊字体时截图时空白,或者不全解决办法如下第一步,svg或者img先转base64(如果是特殊字体&am…...
机器学习----奥卡姆剃刀定律
奥卡姆剃刀定律(Occam’s Razor)是一条哲学原则,通常表述为“如无必要,勿增实体”(Entities should not be multiplied beyond necessity)或“在其他条件相同的情况下,最简单的解释往往是最好的…...
【设计模式】行为型设计模式之 模板方法模式
介绍 GOF 定义 模板方法模式 Template Method Design Pattern :模板方法模式在一个方法中定义一个算法骨架,并将某些步骤推迟到子类中去实现;模板方法在不改变算法整体结构的情况下,可以重新定义算法中的某些步骤。 代码举例 …...
智能合约中断言失败
断言失败: 断言(assert)在智能合约中用于确保内部逻辑的一致性和正确性,但如果使用不当,确实可能导致意外的合约终止或资金锁定。这是因为assert主要用于检测程序内部的错误,例如算法错误或逻辑错误&#…...
flink读取hive写入http接口
目录 0、创建hive数据 1、pom.xml 2、flink代码 3、sink 4、提交任务jar 5、flink-conf.yaml 6、数据接收 flink-1.17.2jdk1.8hive-3.1.3hadoop3.3.6passwordhttp0、创建hive数据 /cluster/hive/bin/beeline !connect jdbc:hive2://ip:10000 create database demo; d…...
【论文阅读】MODELING AND SOLVING THE TRAVELING SALESMAN PROBLEM WITH PRIORITY PRIZES
文章目录 论文基本信息摘要1.引言2. INTEGER QUADRATIC PROGRAM FOR TSPPP3. MIXED INTEGER LINEAR PROGRAMS FOR TSPPP4. TABU SEARCH ALGORITHM FOR TSPPP5. COMPUTATIONAL RESULTS6. CONCLUDING REMARKS补充 论文基本信息 《MODELING AND SOLVING THE TRAVELING SALESMAN P…...
【CS.SE】使用 docker pull confluentinc/cp-kafka 的全面指南
文章目录 1 引言2 准备工作2.1 安装 Docker2.1.1 在 Linux 上安装 Docker2.1.2 在 macOS 上安装 Docker2.1.3 在 Windows 上安装 Docker 2.2 验证 Docker 安装 3 拉取 confluentinc/cp-kafka Docker 镜像3.1 拉取镜像3.2 验证镜像 4 运行 Kafka 容器4.1 启动 ZooKeeper4.2 启动…...
STM32快速入门(ADC数模转换)
STM32快速入门(ADC数模转换) 前言 ADC数模转换存在的意义就是将一些温度传感器、各自数据传感器产生的模拟信号转换成方便识别和计算的数字信号。 导航 图24 通用定时器框图: 图片截取自STM32 F1XX中文参考手册。还是以框图为中心&#x…...
Linux环境在非root用户中搭建(java-tomcat-redis)
注: 本文在内网(离线)环境,堡垒机中搭建,服务器不同可能有所差异,仅供参考 本文安装JDK-20.0.1版本,apache-tomcat-10.1.10版本,redis-6.2.15版本 本文服务器IP假设:192.168.88.133 root用户创建子用户并…...
Unity 之 代码修改材质球贴图
Unity 之 代码修改材质球贴图 代码修改Shader:ShaderGraph:材质球包含属性 代码修改 meshRenderer.material.SetTexture("_Emission", texture);Shader: ShaderGraph: 材质球包含属性 materials[k].HasProperty("…...
spark-3.5.1+Hadoop 3.4.0+Hive4.0 分布式集群 安装配置
Hadoop安装参考: Hadoop 3.4.0HBase2.5.8ZooKeeper3.8.4Hive4.0Sqoop 分布式高可用集群部署安装 大数据系列二-CSDN博客 一 下载:Downloads | Apache Spark 1 下载Maven – Welcome to Apache Maven # maven安装及配置教程 wget https://dlcdn.apache.org/maven/maven-3/3.8…...
Matlab实现GWO-CNN-LSTM-Mutilhead-Att灰狼算法卷积长短期记忆神经网络融合多头注意力机制预测 SCI顶级优化
数据预处理:准备和清理数据,包括数据的加载、特征提取、归一化等。 GWO (灰狼算法) 的实现:根据灰狼算法的原理和公式,编写 MATLAB 代码来初始化灰狼群体、计算适应度函数、更新位置等。 CNN (卷积神经网络) 的构建:使…...
RTKLIB之RTKPLOT画图工具
开源工具RTKLIB在业内如雷贯耳,其中的RTKPLOT最近正在学习,发现其功能之强大,前所未见,打开了新的思路。 使用思博伦GSS7000卫星导航模拟器,PosApp软件仿真一个载具位置 1,RTKPLOT支持DUT 串口直接输出的NMEA数据并…...
本地部署 RAGFlow
本地部署 RAGFlow 0. RAGFlow 是什么?1. 安装 wsl-ubuntu2. (可选)配置清华大学软件源3. 系统更新和安装构建工具4. 安装 Miniconda35. 安装 CUDA Toolkit6. 安装 git lfs7. 配置 Hugging Face 的缓存路径8. 配置 vm.max_map_count9. 安装 Docker Engine10. 安装 nginx11. 本地…...
php常用数据库操作
文章目录 PHP操作1. mysqli_connect() 连接数据库2. mysqli_close() 关闭数据库3. mysqli_num_rows 查询结果集中的行数4. mysqli_select_db 选择数据库的函数5. mysqli_query 常规的插入查找等6. header( )7.防止 sql 注入 PHP操作 1. mysqli_connect() 连接数据库 2. mysql…...
判断经纬度是否在某个城市内
一、从高德获取指定城市边界经纬度信息 通过apifox操作: 二、引入第三方jar包: maven地址:https://mvnrepository.com/ maven依赖: <dependency><groupId>org.locationtech.jts</groupId><artifactId>…...
Java——数组排序和查找
一、排序介绍 1、排序的概念 排序是将多个数据按照指定的顺序进行排列的过程。 2、排序的种类 排序可以分为两大类:内部排序和外部排序。 3、内部排序和外部排序 1)内部排序 内部排序是指数据在内存中进行排序,适用于数据量较小的情况…...
Flutter中防抖动和节流策略
什么是防抖和节流? 函数节流(throttle)与 函数防抖(debounce)都是为了限制函数的执行频次,以优化函数触发频率过高导致的响应速度跟不上触发频率,出现延迟,假死或卡顿的现象 是应对频…...
设计模式-中介者(调停者)模式(行为型)
中介者模式 中介者模式是一种行为型模式,又叫调停者模式,它是为了解决多个对象之间,多个类之间通信的复杂性,定义一个中介者对象来封装一些列对象之间的交互,使各个对象之间不同持有对方的引用就可以实现交互…...
HC-05蓝牙模块配置连接和使用
文章目录 1. 前期准备 2. 进入AT模式 3. 电脑串口配置 4. 配置过程 5. 主从机蓝牙连接 6. 蓝牙模块HC-05和电脑连接 1. 前期准备 首先需要准备一个USB转TTL连接器,电脑安装一个串口助手,然后按照下面的连接方式将其相连。 VCCVCCGNDGNDRXDTXDTXD…...
云上小知识:企业选择云服务的小Tips
企业在选择云服务模式时,应综合考虑以下几个关键因素: 1. 业务需求与场景 企业需要根据自身的业务特点和需求来选择合适的云服务模式。例如,如果企业的用户分布广泛,需要跨地域提供服务,那么公有云可能是更好的选择。…...
生成式人工智能 - Stable Diffusion 都使用了哪些技术?
一、Stable Diffusion简述 1、简述 Stable Diffusion在2022年8月开源,是由慕尼黑大学的CompVis研究团队开发的生成式人工神经网络。该项目由初创公司StabilityAI、CompVis和Runway合作开发,并得到了EleutherAI和LAION的支持。截至2022年10月,StabilityAI已筹集了1.01亿美元…...
React的useState的基础使用
import {useState} from react // 1.调用useState添加状态变量 // count 是新增的状态变量 // setCount 修改状态变量的方法 // 2.添加点击事件回调 // userState实现计数实例import {useState} from react// 使用组件 function App() {// 1.调用useState添加状态变量// coun…...
wordpress发信设置/许昌网站推广公司
1.安装依赖 pip install --upgradetools pip install numpy Matplotlib 2.安装opencv-python(网络一定要通畅) pip install opencv-python...
漯河网做网站/互联网推广是什么
这是【综合类型第 5 篇】,如果觉得有用的话,欢迎关注专栏。 文章目录一:安装 Homebrew 失败问题描述二:安装 Homebrew 过程三:验证是否安装成功四:更新 Homebrew五:卸载 Homebrew一:…...
中小企业网站查询/网站维护主要做什么
传统超级计算机:“看上去很美”“盲目追求Linpack排名的炒作、无休止的价格战、热衷堆砌集群硬件规模,把软件和应用全推给客户、忽视对HPC应用人才培养,掠夺性策略..”在3月2日浪潮“倚天”万亿次桌面超级计算机发布会上,浪潮高性…...
wordpress 访客/广州全网推广
目录 一.静态代理 二.动态代理: 一.静态代理 1)静态代理角色分析: a:抽象角色:一般使用接口 或者 抽象类来实现。 b:真实角色:被代…...
中铁建设集团有限公司官方网站/百度指数的基本功能
因为虽然匿名内部类在方法的内部,但实际编译的时候,内部类编译成Outer.Inner,这说明内部类所处的位置和外部类中的方法处在同一个等级上,外部类中的方法中的变量或参数只是方法的局部变量,这些变量或参数的作用域只在这个方法内部…...
网站上的报名表链接是怎么做的/抖音广告怎么投放
模板介绍 本套管理好自己的健康下载PPT模板,模板编号:P87161,大小10MB,共27页,比例为16:9,由封面、目录、转场页、内容、结尾5个部分构成。 内含青色,橙色,灰色多种配色,精美风格设计,动态播放效果,精美实用。 一份设…...