运输层(TCP运输协议相关)

news/2024/4/17 6:44:55/文章来源:https://blog.csdn.net/qq_43665602/article/details/131690338

运输层

  • 1. 运输层概述
  • 2. 端口号
  • 3. 运输层复用和分用
  • 4. 应用层常见协议使用的运输层熟知端口号
  • 5. TCP协议对比UDP协议
  • 6. TCP的流量控制
  • 7. TCP的拥塞控制
    • 7.1 慢开始算法、拥塞避免算法
    • 7.2 快重传算法
    • 7.3 快恢复算法
  • 8. TCP超时重传时间的选择
    • 8.1 超时重传时间计算
  • 9. TCP可靠传输的实现-滑动窗口
    • 9.1 注意事项
  • 10. TCP连接的建立与释放
    • 10.1 三次握手建立连接
    • 10.2 四次挥手释放连接
    • 10.3 TCP连接状态转移图
  • 11. TCP报文段首部格式
    • 11.1 首部中字段解析

1. 运输层概述

  • 网络层、数据链路层、物理层解决了网络中主机和主机之间的通信;
  • 运输层解决网络中不同主机上的进程之间的通信,这种服务是端到端的;
  • 进程通过唯一的端口号进行标识
  • 根据应用需求不同,运输层主要向应用层提供两种不同的运输协议:1)面向连接的TCP;2)无连接的UDP

在这里插入图片描述

2. 端口号

  • 网络中不同主机使用的操作系统可能不一致,因此在这些主机上的进程会使用不同格式的pid进行标识;
  • 为了使得不同主机上进程之间的相互通信,运输层使用端口号标识进程;
  • 端口号取值范围为 [0,65535],占用两个字节大小,可分为以下三类:
    1)熟知端口号:[0,1023],IANA(Internet号码分配机构)将此范围内端口号分配给一些重要的应用协议,比如HTTP使用80、DNS使用53、FTP使用21/20;
    2)登记端口号:[1024,49151],为一些不熟知的应用程序使用,这类端口号必须在IANA按照规定登记,放置端口号重复;
    3)短暂端口号:[49152,65535],供用户进程短暂使用,通信结束后,端口号释放;

3. 运输层复用和分用

复用

  • 发送方上不同进程向运输层发送应用报文,运输层根据应用需求选择不同的协议;
  • 网络层IP协议将运输层发送的数据(报文段或用户数据报)放入数据载荷,使用协议字段表示传输层数据使用何种协议:TCP使用6标识,UDP使用17标识;

分用

  • 发送方发送的IP数据报到达接收方以后,接收方开始对数据报进行分析;
  • 网络层IP协议通过协议字段解析出数据载荷中的数据使用了何种运输层协议,然后将数据解析为对应类型数据(报文段或用户数据报);
  • 运输层将对应数据通过不同的端口将数据传送给不同的应用进程;
    在这里插入图片描述

4. 应用层常见协议使用的运输层熟知端口号

在这里插入图片描述

5. TCP协议对比UDP协议

TCP(Transmission Control Protocol)传输控制协议UDP(User Datagram Protocol) 用户数据报协议
面向连接:1)三次握手建立连接;2)四次挥手释放连接;无连接
仅支持单播,即一对一通信支持单播、多播、广播,即支持一对一、一对多、一对全通信
面向字节流面向应用报文
向上层提供面向连接可靠传输,使用流量控制、拥塞控制机以及确认应答机制、超时重传机制、累计确认机制、捎带应答机制向上层提供无连接不可靠传输,尽最大努力交付
报文段首部最小长度20字节,最大60字节数据报首部仅占据8字节

6. TCP的流量控制

  • 目的:控制发送方的发送速率,使接收方来得及接收数据
  • 解决方案:使用滑动窗口机制可实现流量控制(TCP连接接收方通过自己的接收窗口大小限制发送方的发送窗口大小);
    1)TCP连接双方均有缓存,即发送缓存和接收缓存。建立TCP连接时,接收方告诉发送方自己的接收窗口大小,发送方随即将发送窗口设置为对应大小;
    2)发送方只能发送滑动窗口内部的数据,滑动窗口内数据发送后收到接收方的累计确认后,移动窗口,调整窗口大小,将已发送的数据从缓存中删除;
    在这里插入图片描述
    3)如果发送方收到接收方的零窗口通知,则开启持续计时器,计时器超时时发送方发送零窗口探测报文(仅携带一字节数据),接收方对该报文进行确认,告知自己当前的接收窗口大小:
    (1)如果接收窗口大小仍然为0,则重启计时器,重复操作;
    (2)如果接收窗口大小不为0,则打破TCP连接双方的死锁局面,发送方调整发送窗口,继续进行发送;
    在这里插入图片描述

7. TCP的拥塞控制

  • 网络拥塞:对网络资源的需求量超过当前所能提供的可用量,网络性能下降,此时称为网络拥塞;
  • 网络拥塞会导致网络吞吐量随输入负荷的增大而下降;
    理想情况下,网络吞吐量未达到饱和之前,输入负荷与吞吐量相等;
    在这里插入图片描述
  • TCP的4种拥塞控制算法:慢开始、拥塞避免、快重传、快恢复

7.1 慢开始算法、拥塞避免算法

  • 慢开始算法:在开始阶段向网络输入的报文段数量较少,逐渐增大;
  • 拥塞避免:降低拥塞窗口的扩大速率,改为线性增长(每次加1),使网络发生拥塞的可能性降低;
  • 发送方判断网络是否发生拥塞的标准:发生超时重传(即发送方发送的部分报文段未按时收到确认报文);
  • 拥塞窗口的维护原则:未发生拥塞则扩大,发生拥塞就缩小
  • 拥塞窗口的大小是动态变化的,取决于网络拥塞程度;
  • 发送方发送窗口swnd=拥塞窗口cwnd
  • 拥塞控制流程:
    1)一开始先执行慢开始算法(维护慢开始阈值ssthresh),初始化cwnd=1,以指数形式扩大cwnd;
    2)当cwnd<ssthresh时一直进行慢开始算法,直到cwnd=ssthresh时,转为执行拥塞避免算法,以线性规律扩大cwnd;
    3)在执行上述算法过程中,如果发生网络拥塞,则进行如下工作:
    (1)将慢开始阈值ssthresh变为当前拥塞窗口大小的一半,即ssthresh=cwnd/2;
    (2)令拥塞窗口大小为cwnd=1,重新开始执行慢开始算法;
    在这里插入图片描述

7.2 快重传算法

  • 发送方通过是否发生超时重传判断是否发生网络拥塞,此方式进行判断存在一个问题:有时报文段丢失发生超时重传时,网络并未发生拥塞,如果此时重启慢开始算法则会降低网络性能;
  • 快重传算法就是通过提前重传丢失的报文段而避免发生不必要的超时重传,以此避免错误的慢开始算法;
  • 快重传算法流程:尽早告知发送方存在报文段丢失的情况,尽快重传
    1)发送方按序发送拥塞窗口内的报文段,如果接收方发现收到了失序的报文段,说明发生了报文段丢失;
    2)接收方收到失序报文段后立马向发送方发送重复确认报文
    3)发送方一旦收到3个连续的重复确认报文,就立即重传对应报文段;
    在这里插入图片描述

7.3 快恢复算法

  • 发送方收到3个重复确认时,可知有部分报文段丢失,所以立即重传对应报文。与此同时,执行快恢复算法
  • 快恢复算法执行流程:
    (1)将慢开始阈值ssthresh变为当前拥塞窗口大小的一半,即ssthresh=cwnd/2;
    (2)令拥塞窗口大小为cwnd=ssthresh(或者cwnd=ssthresh+3),开始执行拥塞避免算法;
    在这里插入图片描述

8. TCP超时重传时间的选择

TCP超时重传时间(RTO)的选择是一个比较复杂的问题,已知报文段实际往返时间(RTT):
1)如果RTO的选择小于RTT,则会发生不必要的重传,增大网络负荷;
2)如果RTO的选择远大于RTT,则会使网络空闲时间增大,降低网络传输效率;
有上述分析,可知RTO的选择是比较复杂的,通常RTO要略大于RTT

8.1 超时重传时间计算

  • RTT不是一个固定值,因此简单测量的RTT不能直接用于计算超时重传时间;
  • 标准建议通过下列方式计算RTO:
    在这里插入图片描述
  • 在通信过程中,如果发生超时重传现象,则每发生一次便将RTO增大一些,典型做法是将RTO设置为RTO的2倍

9. TCP可靠传输的实现-滑动窗口

  • TCP使用滑动窗口机制实现可靠传输;
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

9.1 注意事项

  • TCP规定接受方只能对按序到达的最高序号进行确认
    在这里插入图片描述

10. TCP连接的建立与释放

  • 需要明确TCP连接双方有各自的角色:1)客户端:主动请求建立连接的一方;2)服务器:被动同意建立连接的一方;
  • 通信双方建立TCP连接的目的是互相确认对方的发送能力和接收能力正常,可以进行可靠传输

10.1 三次握手建立连接

  • 连接建立工作流程(客户端、服务器一开始均处于CLOSED关闭状态),下列步骤中2~4步即为“三次握手”过程:
  • 1)服务器进程创建传输控制块TCB(包括TCP连接表、指向发送和接收缓存的指针、当前发送和接收的序号等信息),进入LISTEN监听状态,等待客户端发送TCP连接请求;
  • 2)客户端进程创建传输控制块TCB,发送TCP连接请求(报文段头部SYN=1,序列号seq赋随机值x),进入SYN-SENT同步已发送状态;
  • 3)服务器接收2)发送的报文段,同意建立TCP连接,发送对应确认报文段(报文段头部SYN=1,ACK=1,序列号seq赋随机值y,确认号ack=x+1),服务器进入SYN-RCVD同步已接收状态;
  • 4)客户端收到服务器对其TCP请求报文的确认报文段,发送对该确认报文段的确认报文段(报文段头部ACK=1,序列号seq=x+1,确认号ack=y+1),发送端进入ESTABLISHED连接已建立状态;
  • 5)服务器收到3)中确认报文段后进入ESTABLISHED连接已建立状态,至此双方成功建立TCP连接,可进行可靠的数据传输了!!

在这里插入图片描述

  • 注意:1)TCP规定SYN=1的报文段不能携带数据,但会消耗一个序号;2)TCP规定普通确认报文段如果不携带数据,则不会消耗序号!!
  • 两次握手建立连接会导致,客户端失效的TCP连接请求报文段到达服务器,使得服务器误进入连接已建立状态,造成资源的浪费!!
    在这里插入图片描述
  • 四次握手是将三次握手过程的第二个步骤拆分为两步进行,即:1)服务器发送对TCP连接请求报文段的确认(ACK=1,ack=x+1);2)服务器发送TCP连接请求报文段(SYN=1,seq=y)。这两步完全可以合并,一起发送,所以三次握手刚好满足连接建立的要求!!!

10.2 四次挥手释放连接

  • TCP连接具有半关闭特性,A->B的连接释放了,但B仍可以向A发送数据,而TCP连接的释放指连接双方均释放连接;
  • 连接释放工作流程(客户端、服务器一开始均处于ESTABLISHED连接已建立状态),下列步骤中2~4步即为“四次挥手”过程:

1)客户端主动发送TCP连接释放请求报文(FIN=1,ACK=1,seq=u,ack=v),进入FIN-WAIT1中止等待1状态;
2)服务器收到连接释放请求后,发送普通确认报文(ACK=1,seq=v,ack=u+1),并通知应用进程客户端想释放连接,进入CLOSE-WAIT关闭等待状态。客户端收到确认报文进入FIN-WAIT2中止等待2状态。此时,客户端->服务器的单向连接已关闭,TCP连接处于半关闭状态,服务器仍可以给客户端发送数据。此后,服务器向客户端发送连接释放请求报文(FIN=1,ACK=1,seq=w,ack=u+1),进入LAST-ACK最后确认状态。
3)客户端收到服务器发来的释放请求报文后,发送普通确认报文(ACK=1,seq=u+1,ack=w+1),进入TIME-WAIT时间等待状态。
4)服务器收到确认报文后,进入CLOSED关闭状态。与此同时,客户端经历2MSL后进入CLOSED关闭状态。至此,TCP连接完整释放!!

在这里插入图片描述

  • TIME-WAIT状态等待2MSL(最大报文段存活时间)的作用
  • 1)确保服务器可以收到TCP连接释放请求的确认报文,避免持续重发释放请求报文,服务器一直处于LAST-ACK最后确认状态而无法关闭连接,浪费资源;
  • 2)客户端TCP进程在时间等待状态持续2MSL可使网络中关于该TCP连接的所有报文段消失,避免影响后续新的TCP连接。

在这里插入图片描述

  • 保活计时器的作用:
  • 存在的问题:客户端发生故障,服务器无法及时得知,一直处于等待状态,浪费计算机资源。
  • 解决方案:保活计时器;
  • 工作原理:1)服务器每收到客户端的一次数据,就重启保活计时器(2小时定时);2)如果保活计时器超时,则说明固定时间内客户端未发送数据。此时,服务器向客户端发送探测报文,此后每75秒发送一次,如果连续10次探测报文均为收到客户端的确认报文,则认为客户端出现故障,服务器关闭此TCP连接。
  • 三次挥手不能实现TCP连接释放,因为:TCP连接具有半关闭特性,两次挥手释放客户端->服务器的连接之后,服务器仍可以向客户端发送数据,如果第三次挥手和第二次挥手合并,则无法实现半关闭状态下服务器->客户端的单向数据传输了。因此两次挥手只能释放单向连接,要想释放双向连接则需要四次挥手。

10.3 TCP连接状态转移图

  • TCP连接的建立与释放过程中,双方状态转移图:
    粗实线表示客户端,粗虚线表示服务端
    在这里插入图片描述

11. TCP报文段首部格式

  • TCP报文段采用面向字节流的方式,以实现可靠传输
  • TCP报文段由首部和数据载荷两部分构成;
  • 发送缓存中的部分或全部字节作为TCP报文段数据载荷,添加首部信息后即可作为报文段进行传输;
  • 首部大小最小20字节(固定大小),最大60字节;

11.1 首部中字段解析

在这里插入图片描述

字段名作用
源端口占据16位,标识客户端TCP应用进程
目的端口占据16位,标识客户端TCP应用进程
数据偏移占据4位,以4字节为单位,表示首部大小,最小为5,最大为15
保留保留字段,用于后序功能扩展,占据6位,暂设置为0
窗口占据16位,以字节为单位。表示该主机作为接收方时对应的接收窗口大小,窗口值结合发送方的拥塞窗口大小共同决定发送方发送窗口的大小
校验和占据16位,发送端填充,使接收方检查报文段的首部和数据是否有差错
SYN标志位占据1位,用于标识TCP连接请求报文
FIN标志位占据1位,用于标识TCP连接释放请求报文
ACK标志位占据1位,标识该报文段为确认报文段,TCP规定连接建立后所有报文段必须设置ACK=1
序号seq占据32位,表示该报文段第一个字节序号
确认号ack占据32位,当ACK=1时有效,表示对接收到的报文段序号进行确认,同时期望后续接收的报文段的第一个字节的序号
PSH标志位占据1位,表示推送操作,该报文段应尽快交付
RST标志位占据1位,表示连接复位操作,说明TCP连接存在异常,需要重新建立连接
URG标志位占据1位,表示紧急操作
紧急指针占据16位,标记紧急数据的大小,仅当URG=1有效
选项扩充TCP功能,目前有如下选项:在这里插入图片描述
填充用于填充首部,保证首部大小是4字节的整数倍,因为数据偏移以4字节为单位

参考:《计算机网络微课堂》

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

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

相关文章

win10查看、关闭和开启多个mysql服务

我的之前安装了2个MySQL版本&#xff0c;一个是MySQL8.0.17&#xff0c;一个是MySQL5.7.19 为什么要查看怎么关闭MySQL服务?如果是个人电脑&#xff0c;我觉得开启一个服务相当于开启一个进程&#xff0c;可能会占用部分内存。如果自己是游戏摆烂状态&#xff08;非学习状态&…

【Ubuntu】安装docker-compose

要在Ubuntu上安装Docker Compose&#xff0c;可以按照以下步骤进行操作&#xff1a; 下载 Docker Compose 二进制文件&#xff1a; sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/loc…

我爱学QT--qt的网络编程

学习地址&#xff1a; QT网络编程之TCP通信_哔哩哔哩_bilibili QT网络编程有TCP和UDP。 TCP编程需要用到两个类&#xff1a;QTcpServer和QTcpSocket 本节课目标&#xff1a; 完成一个服务器和一个客户端 首先是经典的几步 先设计ui再设计逻辑实现 多看看写的文件理解吧

基于linux下的高并发服务器开发(第一章)- GDB调试(3)1.15

04 / GDB命令&#xff1a;断点操作 其中num代表断点编号&#xff0c;Type&#xff08;类型&#xff09;为断点&#xff08;breakpoint&#xff09;&#xff0c;Disp为断点状态&#xff0c;Enb是yes代表为有效断点&#xff0c;adress为断点地址&#xff0c;What说明断点的在那个…

2023年上半年总结

2023年上半年总结 引言问答CSDN 竞赛技能树博客原力值粉丝数贡献墙个人能力图新星计划总结 引言 老顾是一个懒癌晚期患者&#xff0c;通常情况下&#xff0c;是一条不折不扣的咸鱼&#xff0c;在工作中&#xff0c;也大多数时间都用来摸鱼了。 摸鱼时间太长&#xff0c;也就有…

ES(1)简介和安装

文章目录 简介倒排索引 安装 简介 ES是面向文档型数据库&#xff0c;一条数据在这里就是一个文档。 和关系型数据库大致关系如下: ES7.x中废除掉Type&#xff08;表&#xff09;的概念 倒排索引 要知道什么是倒排索引&#xff0c;就要先知道什么是正排索引 idcontent100…

JAVA中的Socket编程、通信协议、传输协议

JAVA中的Socket编程 一、Socket概述 Socket&#xff0c;建立起客户端和服务器之间的连接&#xff0c;实现数据的传输和交互&#xff0c;它既可以发送请求&#xff0c;也可以接受请求&#xff0c;一个Socket由一个IP地址和一个端口号唯一确定&#xff0c;利用Socket能比较方便的…

AI智能助手的未来:与人类互动的下一代人工智能技术

自我介绍⛵ &#x1f4e3;我是秋说&#xff0c;研究人工智能、大数据等前沿技术&#xff0c;传递Java、Python等语言知识。 &#x1f649;主页链接&#xff1a;秋说的博客 &#x1f4c6; 学习专栏推荐&#xff1a;人工智能&#xff1a;创新无限、MySQL进阶之路、C刷题集、网络安…

flask实现get和post请求

1、实现get请求 在项目根目录创建app.py 代码如下&#xff1a; from flask import Flask,render_template,requestapp Flask(__name__)app.route("/regist/user/", methods[GET]) def regist():return render_template("regist.html") #默认去templat…

玩转数据可视化之R语言ggplot2:(十四)层级布局(一层一层增加你的绘图元素,使绘图更灵活)

【R语言数据科学可视化篇】 🌸个人主页:JOJO数据科学📝个人介绍:统计学top3高校统计学硕士在读💌如果文章对你有帮助,欢迎✌关注、👍点赞、✌收藏、👍订阅专栏✨本文收录于【R语言数据科学】本系列主要介绍R语言在数据科学领域的应用包括: R语言编程基础、R语言可…

H3C-Cloud Lab-实验-DHCP实验

实验拓扑图&#xff1a; 实验需求&#xff1a; 1、按照图示为R1配置IP地址 2、配置R1为DHCP服务器&#xff0c;提供服务的地址池为192.168.1.0/24网段&#xff0c;网关为192.168.1.254&#xff0c;DNS服务器地址为202.103.24.68&#xff0c;202.103.0.117 3、192.168.1.10-1…

地平线旭日x3派40pin引脚控制,点亮小灯,控制舵机

地平线旭日x3派40pin引脚控制&#xff0c;点亮小灯&#xff0c;控制舵机 引脚对照表点亮RGB小灯安装旭日X3派WiringPi使用WiringPi点亮RGB小灯使用软件PWM功能 官方用户手册中只有python控制教程&#xff0c;没有c语言控制教程。且官方的教程中并没有软件pwm功能。本教程在开发…

【Android Framework系列】第5章 AMS启动流程

1 AMS简介 AMS&#xff08;Activity Manager Service&#xff09;是Android中最核心的服务&#xff0c;管理着四大组件的启动、切换、调度及应用进程的管理和调度等工作。AndroidQ将Activity移到了ActivityTaskManagerService中&#xff0c;但也和AMS相关联。 AMS通过使用一些…

arcgis拓扑检查

不能有悬挂点 不能有伪结点***路网处理很重要&#xff0c;看研究吧。 一直默认到最后。 导入要素类&#xff0c;单个 toupu2右键新建拓扑&#xff08;T&#xff09; 一般选不能有悬挂点&#xff0c;不能重叠。 一路默认 是 拉进图层可视化 线要素的话记得添加字段length&#…

element中icon字体图标的使用

效果图 官方提供的图标 icon字体图标 安装 安装依赖 cnpm install element-plus/icons-vue 编写src/plugins/icons.js import * as components from "element-plus/icons-vue";export default {install: (app) > {for (const key in components) {const comp…

PADS Logic怎么显示与隐藏元件的管脚编号和管脚名称

在绘制原理图元件的时候&#xff0c;有时管脚数量过多&#xff0c;管脚编号会显的特别密。既可以选择隐藏管脚编号&#xff0c;显示主要目的就是分辨出信号管脚。 第一步&#xff1a;在创建元件界面&#xff0c;执行菜单命令设置-显示颜色&#xff0c;如图1所示 图1 显示颜色选…

Next.js框架入门笔记

内置组件 ‘pages/_document.js’ 文件&#xff0c;自定义document DOC&#xff1a; https://www.nextjs.cn/docs/advanced-features/custom-document <Head>组件 <Head>是一个内置在 Next.js 中的 React 组件。它允许您修改页面的<head>。 Docs: https:/…

报错400是什么怎么解决呢?

首先要了解400错误是什么错误&#xff1a; HTTP状态码400表示"错误请求"。它是一种客户端错误状态码&#xff0c;表示服务器无法理解请求的语法或参数。当服务器收到一个无效的请求时&#xff0c;通常会返回400错误码。这可能是由于请求中缺少必要的参数、参数格式错…

关于AWS MSK Connector Execution Role的解释

尽管在创建AWS MSK Connector时&#xff0c;Execution Role是一个必填项&#xff0c;就像下面这样&#xff1a; 并且在官方文档中给出的Execution Role样例&#xff1a; https://docs.aws.amazon.com/msk/latest/developerguide/msk-connect-service-execution-role.html 中也…

linux X系统 X窗口系统(X Window System)

Xorg是一个开放源代码的跨平台的图形系统&#xff0c;它是UNIX和Linux的主要图形系统&#xff0c;它的前身是XFree86。 Xorg是在桌面环境中提供显示和图形输入设备支持的主要架构。 它支持多种输入设备&#xff0c;如键盘&#xff0c;鼠标&#xff0c;触摸屏&#xff0c;手写板…