传输层协议——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 ~ - 1;
确认号(ack)表示期望收到对方下一个报文段的第一个数据字节的序号,取值为 0 ~ - 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请求报文后的状态 |
ESTABLISHED | TCP连接建立成功的状态 |
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 23 | Telnet 终端仿真协议 |
TCP 25 | SMTP 简单邮件发送协议 |
TCP 80 | 超文本传输协议(HTTP) |
TCP 110 | POP3 服务器(邮箱接收服务器) |
TCP 443 | 安全超文本传输协议(HTTPS) |
端口号 | 服务类型 |
UDP 53 | 域名服务器(DNS) |
UDP 67 | DHCP(服务端) |
UDP 68 | DHCP(客户端) |
UDP 69 | 简单超文本传输协议(TFTP) |
UDP 161 | SNMP(轮询) |
UDP 162 | SNMP(陷阱) |
UDP 520 | RIP 路由协议 |
相关文章:
传输层协议——TCP、UDP
目录 1、UDP 协议(用户数据报协议) 协议特点 报文首部格式 2、TCP 协议(传输控制协议) 协议特点 报文首部格式 TCP连接建立时的三次握手 TCP拆除连接的四次挥手 TCP的流量控制 TCP的拥塞控制 3、传输层端口号 三类端口…...
优化您的Spring应用程序:缓存注解的精要指南
优化您的Spring应用程序:缓存注解的精要指南 前言详细说明1. Cacheable:2. CacheEvict:3. CachePut:4. Caching:5. CacheConfig: 项目中的实现前提使用 前言 当我们构建和运行Spring应用程序时,…...
Java之原子性问题的解决
2. 原子性 2.1 volatile-问题 代码分析 : package com.itheima.myvolatile; public class Demo {public static void main(String[] args) {MyThread1 t1 new MyThread1();t1.setName("小路同学");t1.start(); MyThread2 t2 new MyThread2();t2.setName(&q…...
实时目标检测:基于YOLOv3和OpenCV的摄像头应用
一、前言 随着人工智能和计算机视觉技术的不断发展,目标检测成为了智能监控、自动驾驶、机器人等领域的关键技术之一。实时目标检测更是对系统的反应速度和准确度提出了更高的要求。本文介绍使用OpenCV和YOLOv3实现实时目标检测的方法,演示如何使用OpenCV调用YOLOv3模型进行…...
【软考】4.2 关系代数
《 关系代数 》 表和表之间的逻辑运算 笛卡尔积:S1 x S2 投影:π;选择某一列(属性);一个关系R的投影操作结果也是一个关系,记作Πa,它由从关系R中选出的A列元素构成;选择…...
STM32F4学习笔记读取芯片UID和MAC地址
一、简介 在嵌入式设备开发过程中有时会需要为设备设置唯一的ID用以标识设备唯一,比如要求同一总线上的所有设备ID不能重复,要求设备具体唯一的MAC地址等等。每个STM32微控制器都自带一个96位的唯一ID,这个ID在任何情况下都是唯一且不允许修…...
webpack优化策略
这三点是webpack优化策略的一部分,具体解释如下: 优化正则匹配(Test):在webpack的配置中,test属性是一个正则表达式,用于匹配需要应用该loader的文件的扩展名。在您提供的代码中,te…...
讲讲项目里的仪表盘编辑器(三)布局组件
布局容器处理 看完前面两章的讲解,我们对仪表盘系统有了一个大概的理解。接着我们讲讲更深入的应用。 上文讲解的编辑器只是局限于平铺的组件集。而在编辑器中,还会有一种组件是布局容器。它允许其他组件拖拽进入在里面形成自己的一套布局。典型的有分页…...
Linux- 后台运行符、nohup、disown
& &在Unix-like的操作系统(如Linux和macOS)的shell中,特别是在Bash这样的shell中,经常用作后台运行符号。让我们深入了解一下其功能和用法。 &作为后台运行符号: 基本用法: 当我们在一个命令或者一组命令…...
开发过程教学——交友小程序
交友小程序 1. 我的基本信息2. 我的人脉2.1 我的关注2.2 我的粉丝 3. 我的视频4. 我的相册 特别注意:由于小程序分包限制2M以内,所以要注意图片和视频的处理。 1. 我的基本信息 数据库表: 我的基本信息我的登录退出记录我的登录状态&#x…...
正则表达式 Regular Expression学习
该文章内容为以下视频的学习笔记: 10分钟快速掌握正则表达式_哔哩哔哩_bilibili正则表达式在线测试工具:https://regex101.com/, 视频播放量 441829、弹幕量 1076、点赞数 19330、投硬币枚数 13662、收藏人数 26242、转发人数 2768, 视频作者 奇乐编程学…...
代谢组学最常用到的数据分析方法(五)
代谢组学是一门对某一生物或细胞所有低分子质量代谢产物(以相对分子质量<1000的有机和无机的代谢物为研究核心区)进行分析的新兴学科。因此从复杂的代谢组学数据中确定与所研究的现象有关的代谢物,筛选出候选生物标记物成为代谢物组学研究…...
105.从前序与中序遍历序列构造二叉树
力扣题目链接(opens new window) 根据一棵树的前序遍历与中序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 例如,给出 前序遍历 preorder [3,9,20,15,7] 中序遍历 inorder [9,3,15,20,7] 返回如下的二叉树: class Solution { public:Tr…...
分支定界、分支切割、分支定价的区别
目录 1.从原理的角度 (1)分支定界: (2)分支切割: (3)分支定价: 2.从分支树的角度 (1)分支定界 (2)分支切割 &…...
数字IC前端学习笔记:数字乘法器的优化设计(阵列乘法器)
相关阅读 数字IC前端https://blog.csdn.net/weixin_45791458/category_12173698.html?spm1001.2014.3001.5482 数字信号处理作为微处理器的核心部件,是决定着总体处理器性能的因素之一,而数字乘法器是最常见的一种数字信号处理电路。通常情况下&#…...
批量删除wordpress文章修订版本/自动草稿残留数据(3种方法)及四种方法禁用WordPress文章历史修订/自动保存/自动草稿功能
目录 1、批量删除wordpress文章修订版本/自动草稿残留数据(3种方法) 方法一:SQL命令批量删除 命令: 方法二:利用PHP代码来删除 方法三:利用数据库清理优化插件 WP Clean Up 或 WP Cleaner 批量删除 2…...
HTTP初识,fiddler的使用,URL各部分介绍,QueryString
目录 一、什么是HTTP 二、抓包工具 三、请求的首行 URL 四、URL的各部分详细介绍 一、什么是HTTP 现在网页上,我们常见的是https,但是在二十年前是以http为主,这个协议也叫超文本传输协议,文本->字符串,“超文本”->图片…...
计算机毕业设计 基于SpringBoot的图书馆管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解
博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…...
第三章:最新版零基础学习 PYTHON 教程(第十二节 - Python 运算符—Python 中的运算符函数 - 套装1)
Python 在“operator”模块下预定义了许多数学、逻辑、关系、位等运算的函数。本文介绍了一些基本功能。 1. add(a, b):- 该函数返回给定参数的加法。 操作-a +b。 2. sub(a, b):- 该函数返回给定参数的差值。 操作-a -b。 3. mul(a, b):- 该函数返回给定参数的乘积。 操…...
AAD基础知识(identity/token/PRT)
简介 AAD(Azure Active Directory/Azure AD)是微软基于云身份验证和访问控制的解决方案,通过SSO登录其他o365应用(word/outlook/teams…) 微软在2023年7月把AAD重命名为Microsoft Entra ID,官网:https://www.microsoft.com/zh-cn/security/b…...
基于SSM的视频点播系统设计与实现
末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用Vue技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…...
React 知识点总结
本篇文章是我自己总结已经写过的react知识点,大框架已生成,知识持续更新中。仅供参考 生命周期 React 生命周期 组件基础 react中受控组件与非受控组件 React Portals 理解React页面渲染原理,如何优化React性能? 学习篇之R…...
ALSA project the C library refrerenc (ALSA工程 C库参考说明)
作者: Jaroslav Kysela perexperex.cz Abramo Bagnara abramoalsa-project.org Takashi Iwai tiwaisuse.de Frank van de Pol fvdpolcoil.demon.nl前言: 高级linux音频架构(ALSA)来自内核API和库的API.这个篇文章描述了应用层库API和内核层API对应是怎么的interfaces.API用法: …...
【Maven基础篇-黑马程序员】Maven项目管理从基础到高级,一次搞定!
文章目录 前言Maven简介Maven是什么Maven的作用 Maven的下载与安装Maven基础概念仓库坐标仓库配置全局setting与用户setting区别 第一个Maven程序(手工制作)第一个Maven程序(IDEA生成)使用模版(骨架)创建Ma…...
MySQL进阶 —— 超详细操作演示!!!(下)
MySQL进阶 —— 超详细操作演示!!!(下) 五、锁5.1 概述5.2 全局锁5.3 表级锁5.4 行级锁 六、InnoDB 引擎6.1 逻辑存储结构6.2 架构6.3 事务原理6.4 MVCC 七、MySQL 管理7.1 系统数据库7.2 常用工具 MySQL— 基础语法大…...
SVM(上):如何用一根棍子将蓝红两色球分开?
⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ 🐴作者:秋无之地 🐴简介:CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作,主要擅长领域有:爬虫、后端、大数据开发、数据分析等。 🐴欢迎小伙伴们点赞👍🏻、收藏⭐️、…...
libevent源码学习笔记
libevent源码学习笔记 libevent安装libevent源码解析(1)事件对象(2)事件操作(3)事件循环(4)事件处理 常用指令问题记录问题一:长连接的管理问题二:连接关闭问…...
C++ opencv设置视频的捕获方式为 MJPG设置失败
我有一款4k摄像头,在设置分辨率为4k的时候总是出现帧率不够的情况, 使用命令查看 v4l2-ctl --device/dev/video0 --list-formats-ext发现 v4l2-ctl --device/dev/video0 --list-formats-ext ioctl: VIDIOC_ENUM_FMTType: Video Capture[0]: MJPG (Moti…...
计算机网络两位伟人
克劳德艾尔伍德香农 克劳德艾尔伍德香农(Claude Elwood Shannon)是一位美国数学家、电子工程师和计算机科学家,被誉为“信息论之父”。他于1916年生于密歇根州,于2001年去世。以下是一些关于他的详细介绍: 信息论的奠…...
机器学习 不均衡数据采样方法:imblearn 库的使用
✅作者简介:人工智能专业本科在读,喜欢计算机与编程,写博客记录自己的学习历程。 🍎个人主页:小嗷犬的个人主页 🍊个人网站:小嗷犬的技术小站 🥭个人信条:为天地立心&…...
已有网站做百度推广/天津债务优化公司
1.用vi编辑完文件后 按两次Z可以直接保存退出2.在打开一个vi编辑时可以输入:sp /etc/passwd 同时打开另一个文件注意这里要用绝对路径转载于:https://www.cnblogs.com/linuxde/p/8719230.html...
武汉做网站知名的公司/指数基金怎么买才赚钱
一、源码特点 asp.net 在线音乐点播系统是一套完善的web设计管理系统,系统具有完整的源代码和数据库,系统主要采用B/S模式开发,开发环境为vs2010,数据库为sqlserver2008,或者更高版 asp.net在线音乐点播系统VS开发sqlser…...
为什么做网站能赚钱/百度知道官网首页登录入口
1、创建计划 产品中按计划分组查看需求,这一步只母需求关联计划即可,拆分的子需求不再关联计划,防止计划下需求的重复 2、创建需求,可关联计划 3、在项目中,关联需求,创建任务(其实任务可以省略…...
佛山网站设计怎么做/网站宣传文案范例
本来觉得是不想写这篇博客的,因为网上关于pagerank的介绍很多很多了,而且入门pagerank本来也不难,不过在networkx中实现的pagerank和网上大多数资料介绍的pagerank是不一样的,这一点网上的说明却比较少,因此本博客着重…...
平顶山网站制作哪家公司好/网络销售 市场推广
本文转载自:来自阿里Java架构师的十三份设计模式笔记 一、单例模式 定义: 确保一个类只有一个实例,并提供一个全局访问点。 类图: 源代码: public class Singleton {private static Singleton instance null;priva…...
html5网站开发语言的有点/百度推广关键词质量度
接下来的连续几篇,我们要演练作一个描述通用的二维表,并演示该二维表的继承通途。先定义数据行的状态1/**//// <summary> 2 /// 数据行的状态 3 /// </summary>4publicenumRowState5{ 6 /**//// <summary> 7 /// …...