计算机网络(运输层)
物理层、数据链路层以及网络层共同解决了将主机通过异构网络互联起来所面临的问题,实现了主机与主机之间的通信。
实际上在计算机网络中进行通信的真正实体事位于通信两端主机中的进程。
运输层的任务就会是提供运行在不同主机上的应用进程提供直接的通信服务,又称端到端协议。
根据应用的需求不同,因特网的运输层为应用层提供了两种不同的运输协议,即面向连接的TCP和无连接的UDP。
运输层端口号、复用、分用
TCP/IP体系的运输层使用端口号来区分应用层的不同应用进程。
端口号用16比特表示,取值范围0~65535
端口号只具有本地意义,即端口号只是为了标识本计算机应用层中的各进程,在因特网中,不同计算机中的相同的端口号是没有联系的。
复用和分用:发送方的某些应用进程所发送的不同应用报文,在运输层使用UDP协议进行封装,称为UDP复用。使用TCP协议进行封装称为TCP复用。
TCP/IP体系的应用层常用协议所使用的运输层熟知端口号
UDP和TCP的区别
UDP(User Datagram Protocol)用户数据报协议
·UDP是无连接的
·UDP支持单播、多播以及广播
·UDP是面向应用报文的
·UDP向上层提供无连接不可靠传输服务(适用于IP电话、视频会议等实时应用)
·UDP用户数据报首部仅8字节
TCP(Transmission Control Protocol)
·TCP是面向连接的(三次握手连接,四次挥手释放连接)
·TCP仅支持单播
·TCP是面向字节流的
·向上层提供面向连接的可靠传输服务(例如文件传输)
·TCP报文首部最小20字节,最大60字节
TCP流量控制
流量控制(flow control)让发送方的发送速率不要太快,让接收方来得及接收,利用滑动窗口机制可以很方便地在TCP连接上实现对发送方的流量控制。
·TCP接收方利用自己的几首窗口的大小来限制发送方发送窗口的大小
·TCP发送发收到接收方的零窗口通知后,应启动持续计时器。持续计时器超时后,向接收方发送零窗口探测报文。
TCP拥塞控制
在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络性能就要变坏,这种情况叫拥塞(congestion)。如果对于拥塞不进行控制,整个网络的吞吐量将随输入负荷的增大而下降。TCP四种拥塞算法:慢开始(slow-start),拥塞避免(songestion avoidance),快重传(fast retransmit),快恢复(fast recovery)
·判断拥塞窗口cwnd的维护原则:只要没有网络拥塞,拥塞窗口就尽量大些,出现拥塞,窗口就小一些。
·判断出现拥塞的依据:没有按时收到确认报文
·发送方将拥塞窗口作为发送窗口swnd,swnd=cwnd
维护一个慢开始门限ssthresh状态变量:
(1)当cwnd<ssthresh时,使用慢开始算法
(2)当cwnd>ssthtesh时,停止使用慢开始算法而改用拥塞避免算法
相等时,都可以使用。
一开始使用慢开始算法,拥塞窗口指数比列增大,增大到慢开始门阀值时,停止使用慢开始算法,该规律加+1,当传输报文出现问题时,重传计时器超时时,网络很可能出现了拥塞:
(1)将ssthresh值更新为发生拥塞时cwnd值的一半;
(2)将cwnd值减少为1,并重新开始执行慢开始算法
有时,个别报文段会在网络中丢失,但实际上网络并没有拥塞,会导致发送方超时重传,并误认为网络发生了拥塞。降低了传输效率。
采用快重传可以让发送方尽早知道发生了个别报文段的丢失。快重传就是使发送方尽快重传,而不是等超时计时器超时再重传。
·要求接收方不要等待自己发送数据时才进行捎带确认,而是要立即发送确认。
·即使收到失序的报文段也要立即发出对已收到的报文段的重复确认。
·发送方一旦收到三个连续的重复确认,就将相应的报文段立即重传,而不是等该报文段的超时重传计时器超时再重传。
发送方一旦收到3个重复确认,就知道现在只是丢失了个别的报文段。于是不启动慢开始算法,而执行快恢复算法。
整体流程
超时重传时间的选择
针对出现超时重传时无法测准往返时间RTT的问题,Karn提出了一个算法:在计算加权平均往返时间RTTs时,只要报文段重传了,就不采用其往返时间RTT样本。也就是出现重传时,不计算RTTs,进而超时重传时间RTO也不会重新计算。报文段每重传一次,就把超时重传时间RTO增大一些。
TCP可靠传输的实现
TCP基于以字节为单位的滑动窗口来实现可靠传输
可以使用三个指针来描述发送窗口的状态。
虽然发送方的发送窗口是根据接收方的就诶和搜窗口设置的,但在同一时刻,发送方的发送窗口并不总是和接收方的窗口一样大。(网络传送窗口值需要经历一定的时间滞后,并且这个时间是不确定的,发送方还可以根据网络拥塞状况是大哥减小自己的发送窗口)
TCP通常对不按序到达的数据是先临时存放在接收窗口中,等到字节流中多缺少的字节收到后,再按序交付上层的应用进程。
TCP要求接收方必须有累积确认和捎带确认机制,这样可以减小传输开销。接收方可以在何时的时候发送确认,也可以在自己有数据要发送时把确认信息顺便带上。(接收方不应过分推迟发送确认,否则会导致发送方不必要的超时重传,会浪费网络资源)。
TCP的通信是全双工通信。通信中的每一方都在发送和接收报文段。因此。每一方都有自己的发送窗口和接收窗口。
TCP的运输连接管理
TCP连接的建立
TCP的连接建立主要解决以下三个问题:
(1)使TCP双方能够确知对方的存在。
(2)使TCP双方能够协商一些参数(如最大窗口值、是否使用窗口扩大选项和时间戳选项)
(3)使TCP双方能够对运输实体资源(如缓存大小、连接表中的项目等)进行分配。
使用“三报文握手”建立连接。
TCP的序号和确认号
32位序号 seq:Sequence number 缩写seq ,TCP通信过程中某一个传输方向上的字节流的每个字节的序号,通过这个来确认发送的数据有序,比如现在序列号为1000,发送了1000,下一个序列号就是2000。
32位确认号 ack:Acknowledge number 缩写ack,TCP对上一次seq序号做出的确认号,用来响应TCP报文段,给收到的TCP报文段的序号seq加1。
TCP的标志位
每个TCP段都有一个目的,这是借助于TCP标志位选项来确定的,允许发送方或接收方指定哪些标志应该被使用,以便段被另一端正确处理。
用的最广泛的标志是 SYN,ACK 和 FIN,用于建立连接,确认成功的段传输,最后终止连接。
·SYN:简写为S
,同步标志位,用于建立会话连接,同步序列号;
-
ACK: 简写为
.
,确认标志位,对已接收的数据包进行确认; - FIN: 简写为
F
,完成标志位,表示我已经没有数据要发送了,即将关闭连接; - PSH:简写为
P
,推送标志位,表示该数据包被对方接收后应立即交给上层应用,而不在缓冲区排队; - RST:简写为
R
,重置标志位,用于连接复位、拒绝错误和非法的数据包; - URG:简写为
U
,紧急标志位,表示数据包的紧急指针域有效,用来保证连接不被阻断,并督促中间设备尽快处理;
第一次握手:
客户端将TCP报文标志位SYN置为1,随机产生一个序号值seq=J,保存在TCP首部的序列号(Sequence Number)字段里,指明客户端打算连接的服务器的端口,并将该数据包发送给服务器端,发送完毕后,客户端进入SYN_SENT
状态,等待服务器端确认。
第二次握手:
服务器端收到数据包后由标志位SYN=1知道客户端请求建立连接,服务器端将TCP报文标志位SYN和ACK都置为1,ack=J+1,随机产生一个序号值seq=K,并将该数据包发送给客户端以确认连接请求,服务器端进入SYN_RCVD
状态。
第三次握手:
客户端收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给服务器端,服务器端检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,客户端和服务器端进入ESTABLISHED
状态,完成三次握手,随后客户端与服务器端之间可以开始传输数据了。
假设不采用“三次握手”,那么只要server发出确认,新的连接就建立了。由于现在client并没有发出建立连接的请求,因此不会理睬server的确认,也不会向server发送数据。但server却以为新的运输连接已经建立,并一直等待client发来数据。这样,server的很多资源就白白浪费掉了。采用三报文握手而不是二报文握手为了防止已经失效的连接请求报文突然又传送到TCP服务器,因为导致错误。
- 小写的ack代表的是头部的确认号Acknowledge number, 缩写ack,是对上一个包的序号进行确认的号,ack=seq+1。
- 大写的ACK,则是我们上面说的TCP首部的标志位,用于标志的TCP包是否对上一个包进行了确认操作,如果确认了,则把ACK标志位设置成1。
TCP的连接释放
- 第一次挥手: Client端发起挥手请求,向Server端发送标志位是FIN报文段,设置序列号seq,此时,Client端进入
FIN_WAIT_1
状态,这表示Client端没有数据要发送给Server端了。 - 第二次挥手:Server端收到了Client端发送的FIN报文段,向Client端返回一个标志位是ACK的报文段,ack设为seq加1,Client端进入
FIN_WAIT_2
状态,Server端告诉Client端,我确认并同意你的关闭请求。 - 第三次挥手: Server端向Client端发送标志位是FIN的报文段,请求关闭连接,同时Server端进入
LAST_ACK
状态。 - 第四次挥手 : Client端收到Server端发送的FIN报文段,向Server端发送标志位是ACK的报文段,然后Client端进入
TIME_WAIT
状态。Server端收到Client端的ACK报文段以后,就关闭连接。此时,Client端等待2MSL的时间后依然没有收到回复,则证明Server端已正常关闭,那好,Client端也可以关闭连接了。
为什么连接的时候是三次握手,关闭的时候却是四次握手?
建立连接时因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。所以建立连接只需要三次握手。
由于TCP协议是一种面向连接的、可靠的、基于字节流的运输层通信协议,TCP是全双工模式。
这就意味着,关闭连接时,当Client端发出FIN报文段时,只是表示Client端告诉Server端数据已经发送完毕了。当Server端收到FIN报文并返回ACK报文段,表示它已经知道Client端没有数据发送了,但是Server端还是可以发送数据到Client端的,所以Server很可能并不会立即关闭SOCKET,直到Server端把数据也发送完毕。
当Server端也发送了FIN报文段时,这个时候就表示Server端也没有数据要发送了,就会告诉Client端,我也没有数据要发送了,之后彼此就会愉快的中断这次TCP连接。
TCP报文段的首部格式
源端口:占16比特,写入源端口号,用来标识发送该TCP报文段的应用进程。
目的端口:占16比特,写入目的端口号,用来标识接收该TCP报文段的应用进程。
序号字段:占32比特,序号增加到最后一个后,下一个序号就又回到了0.(指出本TCP报文段数据载荷的第一个字节的序号)。
确认号字段:占32比特,确认号增加到最后一个后,下一个确认号就又回到0。(指出期望收到对方下一个TCP报文段的数据载荷的第一个字节的序号,同时也是对之前收到的所有数据的确认。)
确认标志位置ACK:取值为1时确认号字段才有效;取值为0时确认号字段无效。(TCP规定,在连接建立后所有传送的TCP报文段都必须把ACK置1)
数据偏移字段:占4比特,并以字节为单位(指出TCP报文段的数据载荷部分的起始处距离TCP报文段的起始处有多远,实际上指出了TCP报文段的首部长度)
窗口字段:占16比特,以字节为单位。(指出发送本报文段的一方的接收窗口,窗口值作为接收方让发送方设置其发送窗口的依据,以接收方的接收能力来控制发送方的发送能力,称为流量控制)
校验和:占16比特,检查范围包括TCP报文段的首部数据载荷两部分。
同步标志位SYN:在TCP连接建立时用来同步序号
终止标志位FIN:用来释放TCP连接
复位标志位RST:用来复位TCP连接(当RST=1时,表明TCP连接出现了异常,必须释放连接,然后再重新建立连接)
推送标志位PSH:接收方的TCP收到该标志位为1的报文段会尽快上交应用进程。
·最大报文段长度MSS选项:TCP报文段数据载荷部分的最大长度。
·窗口扩大选项:为了扩大窗口
·时间戳选项:
(1)用来计算往返时间RTT
(2)用来处理序号超范围的情况,又称为防止序号绕回PAWS。
相关文章:

计算机网络(运输层)
物理层、数据链路层以及网络层共同解决了将主机通过异构网络互联起来所面临的问题,实现了主机与主机之间的通信。 实际上在计算机网络中进行通信的真正实体事位于通信两端主机中的进程。 运输层的任务就会是提供运行在不同主机上的应用进程提供直接的通信服务&…...

Linux 线程控制
2. Linux 线程控制 首先,**内核中有没有很明确的线程的概念**,而有**轻量级进程的概念**。当我们想写多线程代码时,可以使用**POSIX线程库**,这是一个 处于应用层位置的库,几乎所有的Linux发行版都默认带这个库&#x…...

内网通3.4.3045广告码、积分码
内网通3.4.3045广告码、积分码 https://download.csdn.net/download/weixin_42120669/89772091...

MATLAB给一段数据加宽频噪声的方法(随机噪声+带通滤波器)
文章目录 引言方法概述完整代码:结果分析结论参考文献引言 在信号处理领域,添加噪声是模拟实际环境中信号传输时常见的操作。宽频噪声可以用于测试系统的鲁棒性和信号处理算法的有效性。本文将介绍如何使用 M A T L A B MATLAB MATLAB给一段数据添加宽频噪声,具体方法是结合…...

网安标委发布敏感个人信息识别指南
9月14日全国网络安全标准化技术委员会秘书处发布《网络安全标准实践指南——敏感个人信息识别指南》 敏感个人信息识别规则: 一旦遭到泄露或者非法使用,容易导致自然人的人格尊严受到侵害、自然人的人身安全受到危害、自然人财产安全受到危害。 注意&am…...

音视频入门基础:AAC专题(5)——FFmpeg源码中,判断某文件是否为AAC裸流文件的实现
音视频入门基础:AAC专题系列文章: 音视频入门基础:AAC专题(1)——AAC官方文档下载 音视频入门基础:AAC专题(2)——使用FFmpeg命令生成AAC裸流文件 音视频入门基础:AAC…...

几何 | 数学专项
日期内容2024.9.19创建 { d > 0 , 递增数列 d < 0 , 递减数列 d 0 ,常数列 \begin{cases} d>0,递增数列\\ d<0,递减数列\\ d0,常数列 \end{cases} ⎩ ⎨ ⎧d>0,递增数列d<0,递减数列d0,常数列 【2010.13】 【1.历年真…...

学习CubeIDE——定时器开发
在b站上学习洋桃电子关于HAL库开发,发现使用CubeIDE是真的简单又方便。 实验现象:使用定时器来产生中断,中断程序是LED灯翻转 在我看来,定时器,是一个从0开始增1(常规),增加到一定…...

【Elasticsearch】-图片向量化存储
需要结合深度学习模型 1、pom依赖 注意结尾的webp-imageio 包,用于解决ImageIO.read读取部分图片返回为null的问题 <dependency><groupId>org.openpnp</groupId><artifactId>opencv</artifactId><version>4.7.0-0</versio…...

二叉树(一)高度与深度
高度:从最底层往上数(后序遍历,左右根),更简单(递归) 深度:从上往下数直到有叶子(前序遍历,根左右),较复杂 高度是最大深度 一、求…...

梧桐数据库(WuTongDB):MySQL 优化器简介
MySQL 优化器是数据库管理系统中的一个重要组件,用于生成并选择最优的查询执行计划,以提高 SQL 查询的执行效率。它采用了基于代价的优化方法(Cost-Based Optimizer, CBO),通过评估不同查询执行方案的代价,…...

交通运输部力推高速公路监测,做好结构安全预警,保护人民安全
在快速发展的交通网络中,高速公路作为经济命脉与生命通道,其结构安全直接关系到每一位行路者的生命财产安全。为此,广东省交通运输厅正式发布《关于积极申报高速公路监测预警应用示范揭榜的通知》,旨在通过技术创新与应用示范&…...

基于PHP+MySQL组合开发的在线客服源码系统 聊天记录实时保存 带完整的安装代码包以及搭建部署教程
系统概述 随着互联网技术的飞速发展,企业与客户之间的沟通方式日益多样化,在线客服系统作为连接企业与客户的桥梁,其重要性不言而喻。然而,市场上现有的在线客服系统往往存在成本高、定制性差、维护复杂等问题。针对这些痛点&…...

NEXT.js 创建postgres数据库-关联github项目-连接数据库-在项目初始化数据库的数据
github创建项目仓库创建Vercel账号选择hobby连接github仓库install - deploy创建postgres数据库(等待deploy完成) Continue to DashboardStorage(头部nav哪里)create Postgresconnect连接完后,切换到.env.local&#x…...

Matlab如何配置小波工具(Wavelet Toolbox)
1、发现问题 因为实验要使用小波工具函数,运行时报错如下: 查看对应文件夹发现没有小波工具(也可在控制台输入ver),检查是否有该工具,输入后回车返回如下: 2、下载工具包 没有这个工具就要去下…...

FTP、SFTP安装,整合Springboot教程
文章目录 前言一、FTP、SFTP是什么?1.FTP2.SFTP 二、安装FTP1.安装vsftp服务2.启动服务并设置开机自启动3.开放防火墙和SELinux4.创建用户和FTP目录4.修改vsftpd.conf文件5.启动FTP服务6.问题 二、安装SFTP1、 创建用户2、配置ssh和权限3、建立目录并赋予权限4、启动…...

24年蓝桥杯及攻防世界赛题-MISC-3
21 reverseMe 复制图片,在线ocr识别,https://ocr.wdku.net/,都不费眼睛。 22 misc_pic_again ┌──(holyeyes㉿kali2023)-[~/Misc/tool-misc/zsteg] └─$ zsteg misc_pic_again.png imagedata … text: “$$KaTeX parse error: Undefined…...

阿里云容器服务Kubernetes部署新服务
这里部署的是前端项目 1.登录控制台-选择集群 2.选择无状态-命名空间-使用镜像创建 3.填写相关信息 应用基本信息: 容器配置: 高级配置: 创建成功后就可以通过30006端口访问项目了...

记录生产环境,通过域名访问的图片展示不全,通过ip+端口的方式访问图片是完整的
原因:部署nginx的服务器硬盘满了 排查发现nginx日志文件占用了大量硬盘 解决方案: 删除该文件,重启nginx服务,问题解决。...

网络安全实训八(y0usef靶机渗透实例)
1 信息收集 1.1 扫描靶机IP 1.2 收集靶机的端口开放情况 1.3 探测靶机网站的目录 1.4 发现可疑网站 1.5 打开可疑网站 2 渗透 2.1 使用BP获取请求 2.2 使用工具403bypasser.py探测可疑网页 2.3 显示可以添加头信息X-Forwarded-For:localhost来访问 2.4 添加之后转发ÿ…...

QT信号槽原理是什么,如何去使用它?
QT的信号槽(Signals and Slots)机制是QT框架的核心特性之一,它提供了一种对象间通信的方式,使得QT的部件可以在不知道彼此详细实现的情况下相互通信。这种机制在图形用户界面编程中尤为重要,因为它有助于降低对象间的耦…...

mybatisplus介绍以及使用(上)
目录 一、概念 1、什么是mybatisplus 2、为什么要使用mybatisplus 二、mybatisplus的使用 1、安装 2、常用注解 3、条件构造器 一、概念 1、什么是mybatisplus MyBatis-Plus(简称MP)是一个基于MyBatis的增强框架,旨在简化开发、提高…...

maxwell 输出消息到 redis
文章目录 1、maxwell 输出消息到 redis1.1、启动一个Maxwell容器,它会连接到指定的MySQL数据库,捕获变更事件,并将这些事件以Redis发布/订阅的形式发送到指定的Redis服务器1.2、在已运行的 Redis 容器中执行 Redis 命令行界面(CLI…...

infoNCE损失和互信息的关系
文章目录 InfoNCE 损失与互信息的关系推导将相似度 sim ( q , x ) \text{sim}(q, x) sim(q,x) 看作是负的能量函数infoNCE和互信息的分母不同 InfoNCE 损失与互信息的关系推导 为了理解 InfoNCE 损失与互信息的关系,首先我们回顾两个公式的基本形式: 互…...

Java学习路线指南
目录 前言1. Java基础知识1.1 面向对象编程思想1.2 Java平台与JVM1.3 Java语言的核心概念 2. Java语法与基础实践2.1 数据类型与变量2.2 控制结构2.3 方法与函数2.4 数据结构与集合框架 3. Java进阶知识3.1 异步编程与多线程3.2 JVM调优与垃圾回收机制3.3 设计模式 4. 实践与项…...

在SpringCloud中实现服务间链路追踪
在微服务架构中,由于系统的复杂性和多样性,往往会涉及到多个服务之间的调用。当一个请求经过多个服务时,如果出现问题,我们希望能够快速定位问题所在。这就需要引入链路追踪机制,帮助我们定位问题。 Spring Cloud为我们…...

[数据集][目标检测]红外微小目标无人机直升机飞机飞鸟检测数据集VOC+YOLO格式7559张4类别
数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):7559 标注数量(xml文件个数):7559 标注数量(txt文件个数):7559 标注…...

TS Vue项目中使用TypeScript
模块系统与命名空间 概念 模块化开发是目前最流行的组织代码方式,可以有效的解决代码之间的冲突与代码之间的依赖关系,模块系统一般视为“外部模块”,而命名空间一般视为“内部模块” 模块系统 TS中的模块化开发跟ES6中的模块化开发并没有…...

打工人、设计师必备的AI抠图工具
前言 你是否厌倦了繁琐的PS操作?是否在寻找一种快速、简便的抠图方法?别担心,AI技术已经为你准备好了解决方案。以下是9个令人惊叹的AI抠图工具,让你无需PS也能轻松获得专业级别的抠图效果。 1. 千鹿设计助手:EmGaur…...

MyBatis中一对多关系的两种处理方法
目录 1.多表联查(通过collection标签的ofType属性) 1)mapper 2)mapper.xml 3)测试代码 4)测试结果 2.分布查询(通过collection标签的select属性) 1)mapper 2)mapper.xml 3࿰…...