传输层协议——TCP、UDP

目录

1、UDP 协议(用户数据报协议)

协议特点

报文首部格式

2、TCP 协议(传输控制协议)

协议特点

报文首部格式

TCP连接建立时的三次握手

TCP拆除连接的四次挥手

TCP的流量控制

TCP的拥塞控制

3、传输层端口号

三类端口号

一些熟知端口号


协议类型是否面向连接是否可靠传输效率开销通信方式
UDP单点/多点 到 单点/多点
TCP点到点

1、UDP 协议(用户数据报协议)

协议特点

  • 无连接
  • 面向报文
  • 首部开销小(8字节)
  • 尽最大努力交付,不保证可靠,不提供拥塞控制
  • 支持 一 or 多 对 一 or 多 通信

报文首部格式

2、TCP 协议(传输控制协议)

协议特点

  • 面向字节流(将应用层交下来的数据当成字节来处理,并对其进行相应的编号)
  • 面向连接
  • 每一条 TCP 连接只有两个端点(一对一的连接)
  • 保证可靠交付
  • 可以全双工通信

报文首部格式

源端口和目的端口的取值为0~65535;

序号(seq)表示本报文段的数据的第一个字节的序号,取值为 0 ~ 2^{32} - 1;

确认号(ack)表示期望收到对方下一个报文段的第一个数据字节的序号,取值为 0 ~ 2^{32} - 1;

数据偏移 表示TCP首部的长度,可以方便地识别出数据段的起始位置,最小长度为5(0101),单位是字节,则首部的最小长度为20字节;

紧急指针 当 URG 位为 1 时,此字段有效,并会指出需要紧急发送的数据;

填充字段 长度可变,用于确保TCP报文的首部长度为 4 字节的整数倍;

字段占位说明
控制字段URG(1bit)紧急位;当为1时表示有数据要紧急发送
ACK(1bit)确认位;这里是大写,与确认号(小写ack)区分开来;当为1时确认字段有效,表示肯定应答
PSH(1bit)推送位;置为1时,立即发送TCP报文
RST(1bit)复位位;置为1时表示TCP连接有严重错误,需要重新建立连接;也可以用于拒绝一个连接
SYN(1bit)同步位;置为1时,表示正在建立一个TCP连接
FIN(1bit)终止位;置为1时,表示正在释放一个TCP连接
窗口16 bit接收空闲窗口值,用于实现TCP流量控制

TCP连接建立时的三次握手

三次握手的作用是为了避免产生错误的连接

        主机 A 向服务器 B 发送 SYN 表示请求建立一个 TCP 连接,即便是没有数据,也要消耗一个 seq。此时直到没有收到目标服务器第一次回应前,主机 A 处于SYN-SENT 状态。

        服务器 B 在没有接收到TCP连接请求前,属于 LISTEN 的监听状态。

        服务器响应给主机 A SYN,表示也向主机 A 请求建立一个连接,ACK=1 表示同意了刚才主机 A 的连接请求,服务器 B 也要消耗一个 seq,seq = y,ack = x + 1,表示确认了刚刚主机发送过来的数据内容,并且提出期望,希望主机 A 下次发送消息给服务器 B 时的 seq 为 x + 1。此时服务器 B 需要等待主机 A 的响应,此时也转变到 SYN-SENT 状态。

        主机 A 接收到服务器B的回应,再回应服务器 B ,ACK=1 表示确认了服务器 B 的TCP建立请求,响应服务B的期望,即便展示还没有数据,也发送一个seq,seq = x + 1,同时 ack = y + 1,也是对刚刚服务器 B 发送过来的内容的一个确认,同时也提出期望,希望服务型下次发送消息时的 seq 为 y + 1。同时将状态设置为 ESTABLISHED,表示已经建立起连接。

        服务器 B ,收到主机 A 的响应,确认无误后也将状态设置为 ESTABLISHED,表示TCP连接成功建立。

        此时主机 A 和服务器 B 已经建立起了一条TCP连接,双方可以正常进行数据传送。

状态说明
SYN-SENT发送了SYN请求,请求建立TCP连接的第一步
LISTEN监听SYN报文的状态
SYN-RCVD接收到SYN请求报文后的状态
ESTABLISHEDTCP连接建立成功的状态

TCP拆除连接的四次挥手

        当主机 A 发送 FIN = 1 (断开连接)标志后,它会进入 FIN-WAIT-1 状态,等待对方确认关闭。当主机收到对方的 ACK = 1(确认)标志后,主机 A 会进入 FIN-WAIT-2 状态。此时,主机 A 已经断开了到对方的连接,但尚未完全断开TCP连接,仍等待对方发送 FIN 标志以确认对方的关闭。

        只有在主机 A 收到对方的 FIN 标志并发送 ACK 标志确认后,才会进入 TIME-WAIT 状态,此时主机才真正关闭了TCP连接。

状态说明
FIN-WAIT-1发送了第一个 FIN 请求,等待对方确认
FIN-WAIT-2等待对方的 FIN 请求
CLOSE-WAIT等待自己进程发出断开连接的命令
LAST-ACK等待对方最后一次确认
TIME-WAIT等待足够的时间,以确保对方接收到了确认
CLOSED关闭状态

TCP的流量控制

        流量控制是针对两端之间的通信的。考虑的是发送方和接收方之间的数据传输速率之间的差异。

        TCP流量控制是通过可变大小的滑动窗口机制实现的。即 让数据发送端传输的速率不要太快,让数据接收端来得及接收。
    

        数据传输窗口 win 在连接建立时由双方商定。但在通信的过程中,数据接收端可根据自己的资源情况,随时动态地调整对方的传输窗口大小。(上面经过协商后,窗口大小为3)

        接收端将此窗口值放在 TCP 报文的首部中的窗口字段,传送给发送端。

        接收方通常会在接收到数据后立即发送一个 ACK 报文,确认收到数据并通知发送方此时窗口的大小。如果接收方的缓冲区已满,它会将窗口大小设置为0,发送方就会停止发送数据。当接收方处理完数据后,它会将窗口大小设置为一个大于 0 的值,并发送 ACK 报文通知发送方,以便发送方继续发送数据。

TCP的拥塞控制

        拥塞控制是针对整个网络的通信而言的,考虑的是网络中的各个路由器和线路的资源利用情况,以避免因过多的数据流量导致网络拥塞。

        四种常见的拥塞控制方法:

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

拥塞窗口(cwnd):是发送方维护的一个状态变量,其大小取决于网络的拥塞程度,并且会动态变化;

慢开始门限(ssthresh):为了防止拥塞窗口 cwnd 的增长过大而引起网络拥塞所设置的一个门限值;

cwnd < ssthresh执行慢开始算法
cwnd = ssthresh可以使用慢开始算法,也可以使用拥塞避免算法
cwnd > ssthresh使用拥塞避免算法

慢开始:每经过一个传输轮次,cwnd 的值都会加倍,从小到大增大 cwnd;

拥塞避免:每经过一个传输轮次,cwnd 的值都会加 1,从小到大缓慢增大 cwnd;

快重传:接收方每收到一个失序报文段后就会立即发出重复确认 ACK,若发送方一连收到三个重复确认,就会立即重传对方尚未收到的报文段。因此能尽早重传未被确认的报文,而不是等待超时;

快恢复:当发送方连续收到三个重传确认 ACK 时,就执行乘法减小算法,把门限值减半(当前 cwnd值的一半),同时把 cwnd 值设置为减半后的门限值,并执行拥塞避免算法;

乘法减小:出现超时(可能是拥塞时),则 ssthresh 减半(当前 cwnd 值的一半),同时执行慢开始算法;

加法增大:执行拥塞避免算法,使 cwnd 增大;

 

        如上图,初始慢开始门限为16,cwnd 从 1 开始,每当发送方接收到一个 ACK 确认报文时,都会使 cwnd 增大(在达到门限值前使用慢开始算法增大)。

        [① ~ ②] 当到达门限值后,改用避免拥塞算法来缓慢增大 cwnd;

        [② ~ ③] cwnd = 24 时发生超时,则门限减半,即 ssthresh = 12,然后下一次接收到 ACK 确认报文时,cwnd 从 1 开始,使用慢开始算法来递增;

        [③ ~ ④] cwnd = 12 时,到达了门限,则改用拥塞避免算法缓慢递增;

        [④ ~ ⑤] 到 ④ 时,cwnd = 16,发送方一连收到三个重复确认,则门限减为当前 cwnd 的一半,即 ssthresh = 8,而 cwnd 变为与门限值一致;

        [⑤ ~] 由于cwnd = ssthresh,开始采用避免拥塞算法来进行增加;

3、传输层端口号

三类端口号

  • 熟知端口 0 ~ 1023
  • 登记端口 1024 ~ 49151
  • 客户端口号 49152 ~ 65535

一些熟知端口号

端口号服务类型
TCP 20文件传输协议(数据)
TCP 21文件传输协议(控制)
TCP 23Telnet 终端仿真协议
TCP 25SMTP 简单邮件发送协议
TCP 80超文本传输协议(HTTP)
TCP 110POP3 服务器(邮箱接收服务器)
TCP 443安全超文本传输协议(HTTPS)

 

端口号服务类型
UDP 53域名服务器(DNS)
UDP 67DHCP(服务端)
UDP 68DHCP(客户端)
UDP 69简单超文本传输协议(TFTP)
UDP 161SNMP(轮询)
UDP 162SNMP(陷阱)
UDP 520RIP 路由协议

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

北京开发APP需要多少钱

北京开发一个移动应用&#xff08;APP&#xff09;的费用因多种因素而异&#xff0c;包括项目的规模、复杂性、所需功能、设计要求、技术选择、开发团队的经验和地理位置等。一般来说&#xff0c;北京的APP开发费用通常较高&#xff0c;因为这是中国的主要技术和创新中心之一&a…

力扣刷题-哈希表-三数之和

15 三数之和 给你一个包含 n 个整数的数组 nums&#xff0c;判断 nums 中是否存在三个元素 a&#xff0c;b&#xff0c;c &#xff0c;使得 a b c 0 &#xff1f;请你找出所有满足条件且不重复的三元组。 注意&#xff1a; 答案中不可以包含重复的三元组。 示例&#xff1a…

uni-app使用iconfont字体图标

先iconfont选择好自己需要的图标 添加至项目 下载字体文件到本地 将下载的文件解压缩到工程目录static文件夹下 定义好iconfont.css文件的font-face声明,修改好引入的url地址 打开App.vue文件 ,引入static下刚才修改的iconfont.css字体图标文件 完成上线的步骤后就可以全局使用…

电脑右键新建记事本不见了--设置恢复篇(无需操作注册表)

电脑右键新建记事本不见了–设置恢复篇&#xff08;无需修改注册表&#xff09; 电脑不知怎么想右键新建记事本结果竟然不见了&#xff0c;搜寻网上的都是什么修改注册表&#xff0c;粘贴代码修复&#xff08;感觉太复杂了&#xff09;&#xff0c;这里介绍通过设置内重新对记…

IDEA中的神仙插件——Smart Input (自动切换输入法)

推荐专栏&#xff1a;开发环境配置攻略 致力于记录学习过程中各种软件的安装及环境配置操作&#xff0c;并提供详细的步骤说明和丰富的配图。涵盖了 Java、Python、IntelliJ IDEA、Tomcat、MySQL 等常见开发工具和服务器组件的配置&#xff0c;为初学者提供一个实用、全面的配置…

【云备份项目】:环境搭建(g++、json库、bundle库、httplib库)

文章目录 1. g 升级到 7.3 版本2. 安装 jsoncpp 库3. 下载 bundle 数据压缩库4. 下载 httplib 库从 Win 传输文件到 Linux解压缩 1. g 升级到 7.3 版本 &#x1f517;链接跳转 2. 安装 jsoncpp 库 &#x1f517;链接跳转 3. 下载 bundle 数据压缩库 安装 git 工具 sudo yum…

05_对象性能模式

对象性能模式 面向对象很好地解决了“抽象”的问题,但是必不可免地要付出定的代价。对于通常情况来讲&#xff0c;面向对象的成本大都可以忽略计。但是某些情况&#xff0c;面向对象所带来的成本必须谨慎处理。 典型模型&#xff1a; SingletonFlyweight Singleton 单件模式…

计算机毕业设计 基于SSM的在线预约导游系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

非目标代谢组学(untargeted metabolomics)中常用的方法学考察的方法(四)

QC样本的制备&#xff1a; 混合相同体积的所有待检测样本&#xff0c;然后按照与待测样本相同的前处理方法来处理QC样本&#xff0c;之后进样进行LC-MS分析。 样本检测时&#xff0c;通常在检测最开始运行几次QC样本&#xff0c;之后根据样本量的大小在每检测几个样本之后检测…

什么是JWT?深入理解JWT从原理到应用

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是Java方文山&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的专栏《ELement》。&#x1f3af;&#x1f3af; &#x1…

16,8和4位浮点数是如何工作的

50年前Kernighan、Ritchie和他们的C语言书的第一版开始&#xff0c;人们就知道单精度“float”类型有32位大小&#xff0c;双精度类型有64位大小。还有一种具有扩展精度的80位“长双精度”类型&#xff0c;这些类型几乎涵盖了浮点数据处理的所有需求。但是在最近几年&#xff0…

认识柔性数组

在C99中&#xff0c;结构中的最后一个元素允许是未知大小的数组&#xff0c;这就叫做柔性数组成员 限制条件是&#xff1a; 结构体中最后一个成员未知大小的数组 1.柔性数组的形式 那么我们怎样写一个柔性数组呢 typedef struct st_type {int i;int a[0];//柔性数组成员 }ty…

【Kafka专题】Kafka收发消息核心参数详解

目录 前置知识课程内容一、从基础的客户端说起&#xff08;Java代码集成使用&#xff09;1.1 消息发送者源码示例1.2 消息消费者源码示例1.3 客户端使用小总结 *二、从客户端属性来梳理客户端工作机制*2.1 消费者分组消费机制2.2 生产者拦截器机制2.3 消息序列化机制2.4 消息分…

开源白板工具 Excalidraw 架构解读

本文讲解开源白板工具 Excalidraw 的架构设计。 版本 0.16.1 技术栈 Vite React TypeScript Yarn Husky。 脚手架原来是用的是 Create React App&#xff0c;但这个脚手架已经不维护了&#xff0c;一年多没发布新版本了。 目前市面上比较流行的 React 脚手架是 Vite&…

协议栈——收发数据(拼接网络包,自动重发,滑动窗口机制)

目录 协议栈何时发送数据&#xff5e; 数据长度 IP模块的分片功能 发送频率 网络包序号&#xff5e;利用syn拼接网络包ack确认网络包完整 确定偏移量 服务器ack确定收到数据总长度 序号作用 双端告知各自序号 协议栈自动重发机制 大致流程 ack等待时间如何调整 是…

色彩一致性自动处理方法在遥感图像中的应用

前言 在获取卫星遥感影像时&#xff0c;由于受不均匀的光照、不同的大气条件和不同的传感器设备等因素的影响&#xff0c;遥感影像中会存在局部亮度和色彩分布不均匀的现象&#xff0c;下面是在BigMap地图下载器中收集的几幅谷歌卫星影像&#xff0c;像下面这种都是拼接好的影像…

python对RabbitMQ的简单使用

原文链接&#xff1a;https://blog.csdn.net/weixin_43810267/article/details/123914324 RabbitMq 是实现了高级消息队列协议&#xff08;AMQP&#xff09;的开源消息代理中间件。消息队列是一种应用程序对应用程序的通行方式&#xff0c;应用程序通过写消息&#xff0c;将消…

图像处理与计算机视觉--第五章-图像分割-霍夫变换

文章目录 1.霍夫变换(Hough Transform)原理介绍2.霍夫变换(Hough Transform)算法流程3.霍夫变换(Hough Transform)算法代码4.霍夫变换(Hough Transform)算法效果 1.霍夫变换(Hough Transform)原理介绍 Hough Transform是一种常用的计算机视觉图形检验方法&#xff0c;霍夫变换一…

【vue3】wacth监听,监听ref定义的数据,监听reactive定义的数据,详解踩坑点

假期第二篇&#xff0c;对于基础的知识点&#xff0c;我感觉自己还是很薄弱的。 趁着假期&#xff0c;再去复习一遍 之前已经记录了一篇【vue3基础知识点-computed和watch】 今天在学习的过程中发现&#xff0c;之前记录的这一篇果然是很基础的&#xff0c;很多东西都讲的不够…

【Kafka专题】Kafka集群架构设计原理详解

目录 前言前置知识课程内容一、Kafka的Zookeeper元数据梳理1.1 zookeeper整体数据1.2 Controller Broker选举机制1.3 Leader Partition选举机制1.4 Leader Partition自动平衡机制*1.5 Partition故障恢复机制1.6 HW一致性保障-Epoch更新机制1.7 总结 学习总结感谢 前言 Kafka的…