计算机网络——传输层

文章目录

    • **1 传输层提供的服务**
      • **1.1 传输层的功能**
      • **1.2 传输层的寻址与端口**
    • **2 UDP协议**
      • **2.1 UDP数据报**
      • **2.2 UDP校验**
    • **3 TCP协议**
      • **3.1 TCP协议的特点**
      • **3.2 TCP报文段**
      • **3.3 TCP连接管理**
      • **3.4 TCP可靠传输**
      • **3.5 TCP流量控制**
      • **3.6 TCP拥塞控制**

1 传输层提供的服务

1.1 传输层的功能

向应用层提供通信服务,属于面向通信部分的最高层,也是用户功能中的最低层

(1)提供应用进程之间的逻辑通信,即端到端的通信

(2)复用和分用,复用:发送方不同的应用进程都可使用同一个传输层协议传送数据;分用:指接收方的传输层在剥去报文的首部后能够把这些数据正确交付到目的应用进程

网络也有复用和分用,效果类似

(3)对收到的报文进行差错检测(首部和数据部分);网络层只检查IP数据报的首部

(4)提供两种不同的传输协议,即UDP和TCP

在这里插入图片描述

1.2 传输层的寻址与端口

端口的作用

应用进程将其数据通过端口向下交付给传输层,以及让传输层知道应当将其报文段中的数据向上通过端口交付给应用层相应的进程

端口是传输层服务访问点TSAP,标识的是主机中的应用进程

端口号

长度16比特,只具有本地意义,根据端口号的范围分为两类:

(1)服务器端使用的端口号

熟知端口号:数值为0~1023,这些端口号指派给TCP/IP最重要的一些应用程序

登记端口号:数值1024~49151,供没有熟知端口号的应用程序使用,必须在IANA登记,防止重复

在这里插入图片描述

(2)客户端会用的端口号

数值为49152~65535,仅在客户进程运行时才动态选择,又称短暂端口号,通信结束,用过的客户端口号就不复存在

套接字

端口号拼接到IP地址即构成套接字Socket,采用发送方和接收方的套接字来识别端点,套接字,实际上是一个通信端点,即套接字Socket=(IP地址:端口号)

唯一的表示网络中一台主机和其上的一个应用进程

TCP:文件传输协议FTP,超文本传输协议HTTP,远程登录TELNET等

UDP:小文件传送协议TFTP,DNS,SNMP和实时传输协议RTP

IP数据报在网络层要经过路由的存储转发;而UDP数据报会封装成IP数据报在网络中传输,UDP数据报的信息对路由不可见

网络层采用虚电路无法提供无连接服务,传输层采用TCP不影响网络层提供无连接服务

2 UDP协议

2.1 UDP数据报

UDP概述

UDP仅在IP数据报服务增加了:复用和分用,以及差错检测

优点:

(1)无须建立连接,没有这方面的时延

(2)无连接状态,某些专用应用服务器使用UDP时, 一般都能支持更多的活动客户机

(3)分组首部开销小,只有8B

(4)应用层能更好的控制发送的数据和发送时间;某些实时应用要求稳定的速度发送,能容忍一些数据的丢失,但不允许有较大的时延,UDP正好满足

(5)UDP支持一对一,一对多,多对一和多对多的交互通信

常用于一次性传输较少数据的网络应用;UDP面向报文,应用层的报文直接添加首部后交付给IP层,一次发送一个报文,既不合并,也不拆分,因此应用程序必须选择合适大小的报文

UDP的首部格式

(1)源端口

(2)目的端口

(3)长度:数据报的长度(包括首部和数据),最小值是8

(4)检验和

在这里插入图片描述

在这里插入图片描述

如果接收方发现目的端口号不正确,丢弃报文,ICMP发送端口不可达的差错报文给发送方

2.2 UDP校验

计算校验和时要在UDP数据报之前增加12B伪首部,仅供计算校验和使用

在这里插入图片描述

IP数据报校验和检验只首部,UDP校验和检验首部和数据

发送方把全0放入校验和字段并添加伪首部,然后以16位作为子串拼接;若UDP不是偶数字节,则需要添加一个全0字节,但是不发送,仅供计算;然后按反码计算出这些16位字的和,将和的反码写入校验和字段,发送;接收方收到后加上伪首部,再按反码求和,无差错时结果全1,否则就是有错,丢弃UDP

在这里插入图片描述

校验出数据报是错误的,可以丢弃,也可以交付给上层,但是需要附上错误报告

这种校验方法校错能力不强,但简单,处理速度快

3 TCP协议

3.1 TCP协议的特点

(1)面向连接,是一条逻辑连接

(2)每一条只能有两个断点,一对一

(3)提供全双工通信,两端设有发送缓存和接收缓存

(4)面向字节流,应用程序和TCP的交互是一个数据块,但TCP会视为一连串无结构的字节流

(5)提供可靠交付的服务,保证传送的数据无差错,不丢失,不重复且有序

且UDP报文的长度由程序决定, 但TCP会根据窗口值和网络拥塞程度来决定,过长会划分短一些,过短会积累足够再发

3.2 TCP报文段

TCP报文段可以运载数据,可以用来建立连接,释放连接和应答;首部20B固定,最短为20,增加的部分必须是4B的整数倍

在这里插入图片描述

(1)序号,TCP是面向字节流,所有字节按顺序编号;例如一个报文段的序号字段为301,携带的数据共有100B,表明最后一个字节的序号是400,因此下一个报文段的序号从401开始

(2)确认号,期望收到对方下一个报文段的第一个数据字节的序号,若确认号为N,表明序号N-1之前的数据都正确接收

(3)数据偏移,表示首部的长度,4B为计算单位,因此首部最长60B

(4)紧急位URG,URG=1,表明紧急位有效,告诉系统此报文段中有紧急数据,应尽快传送,要和紧急指针字段配合使用,即数据从第一个字节到紧急指针所指字节就是紧急数据

(5)确认位ACK,ACK=1时确认号字段有效,TCP规定,连接建立后所有发送的报文ACK置1

(6)推送位PSH,收到PSH=1的报文段,尽快交付,不用等缓存满

(7)复位位RST,RST=1表明TCP连接出现严重差错,必须释放连接

(8)同步位SYN,SYN=1,ACK=0,表明这是一个连接请求报文,对方若同意连接,则应在响应报文中使用SYN=1,ACK=1

(9)终止位FIN,FIN=1,表明此报文段的发送方的数据已发送完毕,要求释放连接

(10)窗口:指出现在允许对方发送的数据量,接收方的数据缓存空间有限,因此窗口值作为接收方让发送方设置发送窗口的依据

如,确认号701,窗口值1000,表明从701算起,发送此报文段的一方还有1000B的接收缓存空间

(11)校验和,与UDP类似,只是协议字段17改为6

(12)紧急指针:指出本报文段中紧急数据共有多少字节

3.3 TCP连接管理

TCP连接的端口即为套接字或插口,每条TCP连接唯一的被通信的两个端点(即两个套接字)确定

TCP连接的建立擦爱用客户/服务器模式,主动发起连接的称为客户,被动等待的称为服务器

TCP连接的建立

在这里插入图片描述

常称为三次握手

第一步:客户发TCP连接请求报文,SYN=1,选一个初始序号seq=x,SYN报文段不能携带数据,但要消耗序号,然后客户进入SYN-SENT同步已发送状态

第二步:服务器若同意,发回Queen,并分配好缓存和变量,SYN=1,ACK=1,确认号ack=x+1,且自己选一个初始序号seq=y;服务器进入SYN-RCVD同步收到状态

第三步:客户收到确认后还要发送确认,并分配缓存和变量,确认报文段ACK=1,确认号ack=y+1,序号seq=x+1,该报文段可以携带数据,客户进入ESTABLISHED已建立连接状态

服务器的资源时第二次握手时分配的,客户的资源是完成第三次握手时分配的,因此服务器易于收到SYN洪泛攻击

TCP连接的释放

在这里插入图片描述

常称为四次握手

第一步:客户机发送连接释放报文段,并停止发送数据,主动关闭TCP连接,FIN=1,序号seq=u,TCP是全双工,发送FIN的一方不能发数据,但对方还能发

第二步:服务器收到后发出确认,然后服务器进入CLOSE-WAIT关闭等待状态,此时从客户机到服务器的连接就释放了,但服务器到客户机的连接还未关闭

第三步:若服务器没有要发送的数据,就通知TCP释放连接,此时发出FIN=1的连接释放报文段,服务器进入LAST-ACK最后确认状态

第四步:客户机收到后发出确认,ACK=1,此时TCP连接还没有释放,必须经过时间等待计时器设置的时间2MSL(最长报文段寿命后),客户机才进入CLOSED连接关闭状态

3.4 TCP可靠传输

TCP使用校验,序号,确认和重传来达到可靠传输

序号

即每个字节的序号,首部的序号字段用来保证数据有序提交给应用层

确认

TCP首部的确认号是期望收到对方的下一个报文段的数据的第一个字节的序号

TCP默认使用累积确认,即TCP只确认数据流中至第一个丢失字节为止的字节,例如接收方B收到了A发送的包含字节0~2,6~7的报文段,没有收到3~5,那么B的下一个报文段确认号置为3

重传

(1)超时

TCP每发送一个报文段,就设置一次计时器,重传时间到期还没收到确认,就重传报文段

为了计算超时计时器的重传时间,TCP采用一种自适应算法,记录一个报文发出的时间到收到相应确认的时间,两个时间之差称为往返时间RTT,TCP保留了RTT的一个加权平均往返时间RTTs,会随着RTT样本值的变化而变化

超时计时器的时间略大于RTTs

(2)冗余ACK(冗余确认)

超时重传的超时周期往往太长,因此可以通过冗余ACK来检测丢包情况

如发送1,2,3,4,5,其中2号丢失,3,4,5就是失序报文段,TCP规定每当比期望序号大的失序报文段到达时,就发送一个冗余ACK,指明下一个期待字节的序号,即发送三个对1号报文段的冗余ACK,表示自己期望接收2号,TCP规定当发送方收到对同一个报文段的3个冗余ACK时,就可以认为跟在这个被确认报文段之后的报文段已经丢失,那么进行重传,这种技术通常称为快速重传

3.5 TCP流量控制

消除发送方发送速率过快使接收方缓存溢出的可能性

调整TCP报文段首部的窗口的值,来限制发送方向网络注入报文的速率;接收方动态调整发送方的发送窗口大小称为接收窗口rwnd;发送方根据网络拥塞程度估计而确定的窗口值,称为拥塞窗口cwnd

实际发送窗口的大小取rwnd和cwnd中的最小值

在这里插入图片描述

数据链路层的窗口不能动态变化,传输层的可以动态变化

3.6 TCP拥塞控制

拥塞控制是让网络能够承受现有的网络负荷,是一个全局性的过程,涉及所有主机,路由器和其他因素;流量控制仅仅只是端到端的速率问题

拥塞控制的算法:慢开始,拥塞避免,快重传,快恢复

假设接收方有足够大的缓存空间,即发送窗口由拥塞窗口决定

(1)慢开始算法

先令拥塞窗口=1,即一个最大报文段长度MSS;每经过一个传输轮次RTT,cwnd就会加倍

慢不是指增长速率慢,而是指初始值为1;当cwnd增大到一个慢开始门限ssthresh(阈值),然后该用拥塞避免算法

(2)拥塞避免算法

每经过一个RTT就把cwnd加1,而不是加倍;并不能完全避免拥塞

cwnd<ssthresh,慢开始

cwnd=ssthresh,慢开始和拥塞避免都可以

cwnd>ssthresh,拥塞避免算法

(3)网络拥塞的处理

无论在慢开始还是拥塞避免,只要出现拥塞,就把门限ssthresh设为出现拥塞时发送方的cwnd值的一半(但不能小于2),然后把cwnd置为1,重新开始执行慢开始算法

在这里插入图片描述

慢开始阶段,当2cwnd>ssthresh时,则下一个cwnd=ssthresh,因为cwnd不能越过ssthresh

慢开始和拥塞避免使用了乘法减小和加法增大方法

(1)快重传

快重传技术使用冗余ACK来检测丢包的发送,同样冗余ACK也用于网络拥塞的检测

发送方收到连续三个重复的ACK报文,直接重传对方未收到的报文段,不必等待计时器超时

(2)快恢复

原理:当收到三个冗余ACK,执行乘法减小,把ssthresh设置为cwnd的一半

但发送方现在认为网络没有那么拥塞,否则就不会有报文连续到达接收方,因此与慢开始不同的是它把cwnd设置为门限ssthresh改变后的数值,然后执行拥塞避免

在这里插入图片描述

TCP连接建立和网络超时时,采用慢开始和拥塞避免;发送方收到冗余ACK,采用快重传和快恢复

存中…(img-1mClfeER-1690297536034)]

TCP连接建立和网络超时时,采用慢开始和拥塞避免;发送方收到冗余ACK,采用快重传和快恢复

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

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

相关文章

某拍房数据采集

某拍房数据采集 某拍房数据采集声明1.逆向目标2.寻找加密位置3.分析加密参数4.python代码书写 某拍房数据采集 声明 本文章中所有内容仅供学习交流&#xff0c;抓包内容、敏感网址、数据接口均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的…

flask创建数据库连接池

flask创建数据库连接池 在Python中&#xff0c;您可以使用 Flask-SQLAlchemy 这个扩展来创建一个数据库连接池。Flask-SQLAlchemy 是一个用于 Flask 框架的 SQLAlchemy 操作封装&#xff0c;实现了 ORM(Object Relational Mapper)。ORM 主要用于将类与数据库中的表建立映射关系…

接口自动化测试-Jmeter+ant+jenkins实战持续集成(详细)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、下载安装配置J…

uniapp实现带参数二维码

view <view class"canvas"><!-- 二维码插件 width height设置宽高 --><canvas canvas-id"qrcode" :style"{width: ${qrcodeSize}px, height: ${qrcodeSize}px}" /></view> script import uQRCode from /utils/uqrcod…

Stable-Diffusion-Webui部署SDXL0.9报错参数shape不匹配解决

问题 已经在model/stable-diffusion文件夹下放进去了sdxl0.9的safetensor文件&#xff0c;但是在切换model的时候&#xff0c;会报错model的shape不一致。 解决方法 git pullupdate一些web-ui项目就可以&#xff0c;因为当前项目太老了&#xff0c;没有使用最新的版本。

【【51单片机AD/DA的分析】】

51单片机AD/DA的分析 看似单片机实验&#xff0c;其实是要学好数电 模数转换 与 数模转换 运算放大器 DA的转换就是利用运算放大器实现的 输出电压v0-(D7~D0)/256 x (VrefxRfb)/R D7~D0 就是我们控制的按键看输入多少 然后再划分256份 Vref是我们设置的一个基准电压 PWM 这种…

用牛鲨水豚赚取SUI的机会又来喽,500万SUI奖励等你来领!

刚刚结束的第一轮Bullshark Quest真是一次惊心动魄的体验&#xff01;我们非常感激社区成员的积极参与以及对Sui生态系统的关注。此轮获奖者的奖励已于美国时间2023年7月28日&#xff0c;在Quest门户网站上公布。参与者点击“Claim”即可将奖励领取至Sui钱包。请注意&#xff0…

Opencv Win10+Qt+Cmake 开发环境搭建

文章目录 一.Opencv安装二.Qt搭建opencv开发环境 一.Opencv安装 官网下载Opencv安装包 双击下载的软件进行解压 3. 系统环境变量添加 二.Qt搭建opencv开发环境 创建一个新的Qt项目(Non-Qt Project) 打开创建好的项目中的CMakeLists.txt&#xff0c;添加如下代码 # openc…

neo4j教程-Cypher操作

Cypher基础操作 Cypher是图形存储数据库Neo4j的查询语言&#xff0c;Cypher是通过模式匹配Neo4j数据库中的节点和关系&#xff0c;从而对数据库Neo4j中的节点和关系进行一系列的相关操作。 下面&#xff0c;通过一张表来介绍一下常用的Neo4j操作命令及相关说明&#xff0c;具…

docker 部署 mysql8.0 无法访问

文章目录 &#x1f5fd;先来说我的是什么情况&#x1fa81;问题描述&#x1fa81;解决方法&#xff1a;✔️1 重启iptables✔️2 重启docker &#x1fa81;其他有可能连不上的原因✔️1 客户端不支持caching_sha2_password的加密方式✔️2 my.conf 配置只有本机可以访问 &#…

销售易和管易云接口打通对接实战

销售易和管易云接口打通对接实战 来源系统:销售易 销售易CRM支持企业从营销、销售到服务的全流程自动化业务场景&#xff0c;创新性地利用AI、大数据、物联网等新型互联网技术打造双中台型CRM&#xff1b;既能帮助B2B企业连接外部经销商、服务商、产品以及最终用户&#xff0c;…

虚拟局域网VLAN

概述 广播域 使用一个或多个以太网交换机互连接起来的交互式以太网&#xff0c;其所有站点都属于同一个广播域&#xff0c;随着交换式以太网规模的扩大&#xff0c;广播域响应扩大&#xff0c;从而形成一个巨大的广播域。 但是巨大的广播域会带来很多的弊端&#xff1a; 广…

redis 高级篇4 分布式锁

一 redis架构图 1.1 redis的架构图 1.2 分布式锁满足条件 1.独占性&#xff1b;2.高可用&#xff1b;3.防死锁&#xff1b;4.不乱抢&#xff1b;5.重入性 二 分布式锁的案例情况 2.1 分布式锁1:单机分布式部署 描述&#xff1a; 使用lock锁和synchronized&#xff0c;单机…

在海外如何让应用在Google Play上得到推荐

在Google Play商店中获得推荐&#xff0c;可以为应用程序带来额外的知名度。 1、应用程序的质量。 确保我们的应用是高质量的并且具有最新的Google Play功能和更新。另外需要应用程序在所有Android设备上兼容。需要将应用程序本地化&#xff0c;从而满足世界各地用户的需求&am…

HDFS中namenode安全模式

HDFS中namenode安全模式 安全模式的现象探究step1step2step3step4 安全模式的概述控制进入时间和离开条件安全模式自动进入离开安全模式手动进入离开 安全模式的现象探究 step1 HDFS集群在停机状态下&#xff0c;使用hdfs -daemon命令逐个进程启动集群&#xff0c;观察现象首…

【Kaggle】Kaggle数据集如何使用命令语句下载?

一、Kaggle数据集如何下载 1.1 问题的起因 最近看到了 Google 组织的 Kaggle 比赛&#xff0c;想自己试一下&#xff0c;但是数据集太大了&#xff0c;将近有370G的数据。直接下载的话&#xff0c;网速太慢&#xff0c;可能要下载3-4天&#xff0c;所以萌生了用命令语句下载的…

【前端知识】React 基础巩固(三十九)——React-Router的基本使用

React 基础巩固(三十九)——React-Router的基本使用 一、Router的基本使用 Router中包含了对路径改变的监听&#xff0c;并且会将相应的路径传递给子组件。 Router包括两个API&#xff1a; BrowserRouter使用history模式 HashRouter使用hash模式&#xff08;路径后面带有#号…

RBAC三级树状菜单实现(从前端到后端)未完待续

1、表格设计 RBAC 2、前端路由 根据不同的用户id显示不同的菜单。 根据路由 3、多级菜单 展示所有权限&#xff0c;并且根据当前用户id展示它所属的角色的所有菜单。 前端树状展示 思路&#xff1a; 后端&#xff1a;传给前端map&#xff0c;map里1个是所有菜单&am…

[golang gin框架] 44.Gin商城项目-微服务实战之后台Rbac微服务之权限的增删改查微服务

上一节讲解了[golang gin框架] 43.Gin商城项目-微服务实战之后台Rbac微服务之管理员的增删改查以及管理员和角色关联,这里讲解权限管理Rbac微服务权限的增删改查微服务 一.实现后台权限管理Rbac之权限增删改查微服务服务端功能 1.创建Access模型 要实现权限的增删改查,就需要…

NIDEC COMPONENTS尼得科科宝滑动型DIP开关各系列介绍

今天AMEYA360对尼得科科宝电子滑动型DIP开关各系列参数进行详细介绍&#xff0c;方便大家选择适合自己的型号。 系列一、滑动型DIP开关 CVS 针脚数&#xff1a;1, 2, 3, 4, 8 安装类型&#xff1a;表面贴装&#xff0c;通孔 可水洗&#xff1a;无 端子类型&#xff1a;PC引脚(只…