当前位置: 首页 > news >正文

TCP/UDP原理

文章目录

  • 一、端口
    • 1. 端口的定义和作用
    • 2.服务端和客户端的区别
    • 3.常见的知名端口号有
  • 二、TCP的原理
    • 1.TCP头部封装格式
    • 2.TCP可靠性机制
      • 三次握手
      • 确认机制
      • 四次挥手
      • RST结束连接
      • 窗口机制
    • 3.完整性校验
    • 4.TCP特征
    • 5.TCP的适用场景
  • 三、UDP的原理
    • 1.UDP头部封装格式
    • 2.UDP特征
    • 3.UDP的适用场景
  • 四、TCP与UDP的对比

首先可以看下思维导图,以便更好的理解接下来的内容。
在这里插入图片描述

一、端口

在计算机网络中,端口是一种虚拟数据结构,用于网络应用程序与底层网络协议(如TCP或UDP)进行通信的途径。端口可以被看作是网络地址的一部分,有助于路由器和交换机将数据传送到正确的应用程序。

1. 端口的定义和作用

端口是计算机网络中的关键概念,它为应用程序提供了一种标识和区分不同通信会话的方式。在网络通信中,数据需要通过网络传输到达目标应用程序,而端口就是这个过程中的关键。

2.服务端和客户端的区别

服务端:服务端使用知名端口号,通常是固定的,用于特定的服务或协议。知名端口号范围通常是0-1023,这些端口被IANA(Internet Assigned Numbers Authority)指定给了特定的服务。常见的知名端口号包括HTTP的80端口、FTP的20和21端口等。

客户端:客户端使用大于等于1024随机端口号,用于临时的数据传输。

3.常见的知名端口号有

TCP 80                        HTTP                超文本传输协议。
TCP 20 & 21                   FTP                 文件传输协议。
TCP 23                        Telnet              远程登录。
TCP 25                        SMTP                简单邮件传输协议。
UDP 53                        DNS                 域名解析协议。
TCP 443                       HTTPS               HTTP over SSL/TLS。

在这里插入图片描述

二、TCP的原理

1.TCP头部封装格式

TCP头部包含了多种信息,这些信息帮助在发送和接收数据时维持连接的可靠性和顺序。

在这里插入图片描述

其中包括:

Source Port (源端口)                                 #表示数据包的发送方的端口号。帮助接收端知道哪个进程发送了这个数据包。
Destination Port (目的端口)                           #表示数据包的接收方的端口号。确保数据包被正确地路由到接收机上的适当进程。
Sequence Number (序列号)                             #用于标识发送的数据在整个数据流中的位置。允许接收端按正确的顺序重新组织接收的数据包。
Acknowledgement Number (确认号)                      #用于确认接收到的数据。告诉发送方哪些数据已被成功接收。
Data Offset (数据偏移)                                #显示TCP头部的长度。告诉接收端数据部分从哪里开始。
Reserved (保留位)                                    #为将来的使用而预留的位。保证向前兼容,为未来的扩展预留空间。
Control Bits (控制位)                                #包含URG, ACK, PSH, RST, SYN, FIN等标志位,用于流控制。URG (紧急位)设置为1时,表示“紧急指针”字段是有效的。ACK (确认位)当设置为1时,表示“确认号”字段是有效的。PSH (推送位)告诉接收端应该立即将数据推送到应用程序,而不是等待缓冲区填满。RST (复位位)用于复位连接,通常在错误发生时使用。SYN (同步位)用于建立连接时的同步。在三次握手过程中使用。FIN (结束位)用于关闭连接,表示发送方已完成数据发送。Window (窗口)                                       #定义了发送方愿意接收的数据量。实现流量控制,防止接收端被发送端的数据淹没。
Checksum (校验和)                                    #用于数据完整性校验。确保数据在传输过程中没有被篡改或损坏。
Urgent Pointer (紧急指针)                             #当URG标志被设置时使用。指出紧急数据的结束位置。
Options (选项)                                      #可选字段。为TCP提供附加的功能,如最大段大小、时间戳等。
Padding (填充)                                      #确保TCP头部的长度是32位的倍数。为了对齐头部字段。
Data (数据)                                         #实际要传输的数据。传输应用程序的数据。

2.TCP可靠性机制

TCP的设计目的是提供一个可靠的、面向连接的通信服务。为了实现这一目标,TCP使用了以下几种主要机制。

三次握手

三次握手:在建立连接之前,发送方和接收方之间进行三次握手以确保双方都准备好交换数据。

第一次  SYN置位      A-B
第二次  SYN,ACK置位   B-A
第三次  ACK置位      A-B

在这里插入图片描述

确认机制

确认机制:每当数据被接收,接收方都会发送一个确认回发送方。
Seq=上一次ack
Ack=上一次的seq+length

在这里插入图片描述超时重传
如果没有接收到,或接收到的是不完整数据,会再次发送Ack请求对方重发
在这里插入图片描述

四次挥手

四次挥手:当一方想要终止连接时,双方会进行四次挥手来安全地关闭连接。

第一次  FIN置位    A-B
第二次  ACK置位   B-A
第三次  FIN置位    B-A
第四次  ACK置位   A-B

在这里插入图片描述

RST结束连接

RST结束连接:一种异常结束连接的方式,当接收到带RST标志的数据包时,连接立即被终止。
收到RST置位的包后,立即结束TCP连接
收到RST置位的包后,不必等待对方的确认,直接结束TCP连接

窗口机制

滑动窗口机制:一种流量控制机制,它允许发送方调整发送数据的速度,以匹配接收方的接收能力。
滑动窗口
通过通告对方本机接收能力,来实现流量控制

在这里插入图片描述

3.完整性校验

完整性校验:通过Checksum字段来确保数据的完整性。
通过Checksum来检查数据完整性

4.TCP特征

优点
可靠性高:TCP通过确认机制和滑动窗口机制确保数据的可靠传输。
顺序传输:TCP确保数据包的顺序与发送顺序一致。

缺点
占用带宽高:由于确认机制和滑动窗口机制,TCP可能会产生额外的网络开销。
传输延迟高:三次握手和四次挥手增加了建立和终止连接的时间。

5.TCP的适用场景

对数据完整性要求高,但是对传输延迟要求低
TCP是一个重量级的协议,适用于对数据完整性和顺序有严格要求的应用场景,例如文件传输、邮件发送和Web浏览。

三、UDP的原理

UDP是一个简单的、无连接的协议,与TCP相比,它牺牲了可靠性以换取更低的延迟和开销。

1.UDP头部封装格式

与TCP相比,UDP的头部简洁得多,它只包含了最基本的信息。
在这里插入图片描述

2.UDP特征

优点:
占用带宽低:UDP没有确认机制,因此网络开销更小。
传输延迟低:UDP发送数据时不需要建立连接。

缺点:
没有任何可靠性机制:UDP不保证数据的顺序、完整性或可靠性。

3.UDP的适用场景

对传输延迟要求高,但数据完整性要求低
UDP适用于那些对传输速度有要求,但不需要完全可靠的数据传输的场景,例如在线视频流、语音通话和某些实时游戏。

四、TCP与UDP的对比

在这里插入图片描述在这里插入图片描述

如有不详或错误,敬请指出。

相关文章:

TCP/UDP原理

文章目录 一、端口1. 端口的定义和作用2.服务端和客户端的区别3.常见的知名端口号有 二、TCP的原理1.TCP头部封装格式2.TCP可靠性机制三次握手确认机制四次挥手RST结束连接窗口机制 3.完整性校验4.TCP特征5.TCP的适用场景 三、UDP的原理1.UDP头部封装格式2.UDP特征3.UDP的适用场…...

操作符算数转换题

目录 1.交换两个变量(不创建临时变量) 2.统计二进制中1的个数 3.打印整数二进制的奇数位和偶数位 4.求两个数二进制中不同位的个数 5.【一维数组】有序序列合并 6.获得月份天数 7.变种水仙花数 8.选择题总结tips 这篇博文主要分享操作符&算…...

Centos7 安装 Docker

2年前写过一篇安装Docker的文档记录,当时安装有些麻烦,现在安装docker就非常容易了,而且安装完docker,自动也安装了docker compose,不用再去执行指令单独安装docker compose了,所以现在再记录一下&#xff…...

Java虚拟机内部组成

1、栈区 public class Math {public int compute(){//一个方法对应一块栈帧内存区域int a l;int b 2;int c (a b)*10;return c; } public static void main(String[] args){Math math new, Math() ;math.compute() ;System.out.println("test");}} 栈是先进后出…...

python遍历文件夹下的所有子文件夹,并将指定的文件复制到指定目录

python遍历文件夹下的所有子文件夹,并将指定的文件复制到指定目录 需求复制单个文件夹遍历所有子文件夹中的文件,并复制代码封装 需求 在1文件夹中有1,2两个文件夹 将这两个文件夹中的文件复制到 after_copy中 复制单个文件夹 # coding: ut…...

[golang 流媒体在线直播系统] 1.直播的简单介绍以及借助腾讯云直播实现在线直播

一.直播的简单介绍 1.介绍 直播,应该不陌生,有电视直播、网络主播、游戏直播、体育直播、在线教育直播等等,那么要实现在线直播的话就 必须要有 “ 流媒体在线直播服务器 ”. “流媒体在线直播服务器 ”不仅可以 实现游戏、赛事、电商、媒体、教育等行业的直播, 还可以实现 …...

C# 中操作集合的方法

Add&#xff1a;向集合中添加元素。 List<int> numbers new List<int>(){ 1, 2, 3 }; numbers.Add(4); // numbers 现在为 { 1, 2, 3, 4 }Remove&#xff1a;从集合中移除指定的元素。 List<int> numbers new List<int>(){ 1, 2, 3, 4 }; numbers.Re…...

pytorch学习(8)——现有网络模型的使用以及修改

1 vgg16模型 1.1 vgg16模型的下载 采用torchvision中的vgg16模型&#xff0c;能够实现1000个类型的图像分类&#xff0c;VGG模型在AlexNet的基础上使用3*3小卷积核&#xff0c;增加网络深度&#xff0c;具有很好的泛化能力。 首先下载vgg16模型&#xff0c;python代码如下&…...

get和post请求的区别

GET和POST是HTTP请求的两种方法,其区别如下 ① GET请求表示从指定的服务器中获取数据(请求数据),比如查询用户信息;POST请求表示将数据提交到指定的服务器进行处理(发送数据), ② GET请求是一个幂等的请求,一般用于对服务器资源不会产生影响的场景,比如说请求一个网友的…...

extern “C”关键字的作用

目录 概述C和C在函数调用和变量命名等方面的差异示例总结 概述 extern "C"是用于在C中声明使用C语言编写的函数和变量的关键字。C和C在函数调用和变量命名等方面存在一些差异&#xff0c;为了在C代码中正确地使用C语言的函数和变量&#xff0c;需要使用extern "…...

使用ffmpeg截取视频片段

本文将介绍2中使用ffmpeg截取视频的方法 指定截取视频的 开始时间 和 结束时间&#xff0c;进行视频截取指定截取视频的 开始时间 和 截取的秒数&#xff0c;进行视频截取 两种截取方式的命令行如下 截取某一时间段视频 优先使用 ffmpeg -i ./input.mp4 -c:v libx264 -crf…...

Python教程(11)——Python中的字典dict的用法介绍

dict的用法介绍 创建字典访问字典修改字典删除字典字典的相关函数 列表虽然好&#xff0c;但是如果需要快速的数据查找&#xff0c;就必须进行需要遍历&#xff0c;也就是最坏情况需要遍历完一遍才能找到需要的那个数据&#xff0c;时间复杂度是O(n)&#xff0c;显然这个速度是…...

三道dfs题

一&#xff1a;1114. 棋盘问题 - AcWing题库 分别枚举行和列&#xff0c;能填的地方就填&#xff0c;dfs就行 #include <iostream> using namespace std;const int N 10; char g[N][N]; int n, k; int res; bool st[N];void dfs(int u, int cnt) // u枚举行 {if(cnt …...

Seaborn数据可视化(四)

目录 1.绘制箱线图 2.绘制小提琴图 3.绘制多面板图 4.绘制等高线图 5.绘制热力图 1.绘制箱线图 import seaborn as sns import matplotlib.pyplot as plt # 加载示例数据&#xff08;例如&#xff0c;使用seaborn自带的数据集&#xff09; tips sns.load_dataset("t…...

kubernetes deploy standalone mysql demo

kubernetes 集群内部署 单节点 mysql ansible all -m shell -a "mkdir -p /mnt/mysql/data"cat mysql-pv-pvc.yaml apiVersion: v1 kind: PersistentVolume metadata:name: mysql-pv-volumelabels:type: local spec:storageClassName: manualcapacity:storage: 5Gi…...

【Map】Map集合有序与无序测试案例:HashMap,TreeMap,LinkedHashMap(121)

简单介绍常用的三种Map&#xff1a;不足之处&#xff0c;欢迎指正&#xff01; HashMap&#xff1a;put数据是无序的&#xff1b; TreeMap&#xff1a;key值按一定的顺序排序&#xff1b;数字做key&#xff0c;put数据是有序&#xff0c;非数字字符串做key&#xff0c;put数据…...

TiDB Serverless Branching:通过数据库分支简化应用开发流程

2023 年 7 月 10 日&#xff0c;TiDB Serverless 正式商用。这是一个完全托管的数据库服务平台&#xff08;DBaaS&#xff09;&#xff0c;提供灵活的集群配置和基于用量的付费模式。紧随其后&#xff0c;TiDB Serverless Branching 的测试版也发布了。 TiDB Serverless Branc…...

运用亚马逊云科技Amazon Kendra,快速部署企业智能搜索应用

亚马逊云科技Amazon Kendra是一项由机器学习&#xff08;ML&#xff09;提供支持的企业搜索服务。Kendra内置数据源连接器&#xff0c;支持快速访问Amazon S3、AmazonRDS、AmazonFSX以及其他外部数据源&#xff0c;帮助用户自动提取文档并建立索引。Kendra支持超过30多种多国语…...

C# 使用 OleDbConnection 连接读取Excel的方法

Connection类有四种:SqlConnection&#xff0c;OleDbConnection&#xff0c;OdbcConnection和OracleConnection。 &#xff08;1&#xff09;Sqlconnetcion类的对象连接是SQL Server数据库&#xff1b; &#xff08;2&#xff09;OracleConnection类的对象连接Oracle数据库&…...

【LeetCode-中等题】98. 验证二叉搜索树

文章目录 题目方法一&#xff1a;BFS 层序遍历方法二&#xff1a; 递归方法三&#xff1a; 中序遍历&#xff08;栈&#xff09;方法四&#xff1a; 中序遍历&#xff08;递归&#xff09; 题目 思路就是首先得知道什么是二叉搜索树 左孩子在&#xff08;父节点的最小值&#x…...

C++高性能网络库ZLToolKit资源池源码解析:如何用智能指针实现对象复用与自动回收

C高性能网络库ZLToolKit资源池源码解析&#xff1a;智能指针实现对象复用与自动回收 在C高性能服务器开发中&#xff0c;频繁的对象创建与销毁往往是性能瓶颈之一。想象一下这样的场景&#xff1a;一个直播服务器每秒需要处理数万条消息&#xff0c;每条消息都需要临时创建对象…...

Wan2.2-I2V-A14B镜像免配置:所有路径预设标准化(/workspace/model /output)

Wan2.2-I2V-A14B镜像免配置&#xff1a;所有路径预设标准化&#xff08;/workspace/model /output&#xff09; 1. 镜像概述与核心优势 Wan2.2-I2V-A14B是一款专为文生视频任务优化的私有部署镜像&#xff0c;基于RTX 4090D 24GB显存显卡和CUDA 12.4环境深度定制。这个镜像的…...

Unity 2022.3 项目里用MQTTnet 4.3.7,手把手教你从下载dll到跑通第一个订阅消息

Unity 2022.3 项目里用MQTTnet 4.3.7&#xff0c;手把手教你从下载dll到跑通第一个订阅消息 在物联网和实时数据通信领域&#xff0c;MQTT协议因其轻量级和高效性成为开发者首选。对于Unity开发者而言&#xff0c;如何在项目中快速集成MQTT功能是一个常见需求。本文将带你从零…...

颠覆式项目管理工具GanttProject:让团队协作效率提升300%的开源解决方案

颠覆式项目管理工具GanttProject&#xff1a;让团队协作效率提升300%的开源解决方案 【免费下载链接】ganttproject Official GanttProject repository 项目地址: https://gitcode.com/gh_mirrors/ga/ganttproject GanttProject是一款完全免费的开源甘特图工具&#xff…...

1.6.2 掌握Scala数据结构 - 列表

本次实战深入讲解了Scala中不可变列表与可变列表的核心操作。首先&#xff0c;详细演示了不可变列表的创建与元素添加&#xff0c;重点强调了其不可变特性——任何添加或合并操作&#xff08;如::、&#xff09;都会生成新列表而不改变原列表。接着&#xff0c;介绍了可变列表L…...

基于多维特征与随机森林的就业状态预测模型构建与优化实践

1. 就业预测模型的应用场景与价值 就业状态预测听起来高大上&#xff0c;但说白了就是帮我们判断一个人接下来会不会失业&#xff0c;或者帮失业的人找到合适工作。我在金融行业做数据分析时&#xff0c;就遇到过银行需要评估贷款申请人还款能力的情况——其实核心就是预测对方…...

3大核心价值:Path of Building离线构建规划工具全解析

3大核心价值&#xff1a;Path of Building离线构建规划工具全解析 【免费下载链接】PathOfBuilding Offline build planner for Path of Exile. 项目地址: https://gitcode.com/GitHub_Trending/pa/PathOfBuilding Path of Building&#xff08;简称PoB&#xff09;是《…...

论文魔法盒:书匠策AI,期刊论文写作的“超级外挂”

在学术的奇妙世界里&#xff0c;论文写作就像是一场充满挑战的魔法冒险。尤其是期刊论文&#xff0c;它要求学者们不仅要有深厚的学术功底&#xff0c;还得掌握各种写作技巧和规范。不过&#xff0c;现在有了书匠策AI这个神奇的“魔法盒”&#xff0c;期刊论文写作不再是令人望…...

Ostrakon-VL终端惊艳效果:终端界面响应速度实测对比

Ostrakon-VL终端惊艳效果&#xff1a;终端界面响应速度实测对比 1. 像素特工终端效果展示 1.1 视觉设计亮点 Ostrakon-VL终端采用了独特的8-bit像素艺术风格&#xff0c;将传统零售场景中的图像识别任务转化为充满游戏感的"数据扫描任务"。这种设计不仅提升了用户…...

从零部署RT-DETR:手把手教你训练自定义目标检测数据集

1. RT-DETR简介与环境配置 RT-DETR是百度推出的实时目标检测Transformer模型&#xff0c;相比传统CNN架构的YOLO系列&#xff0c;它在保持高精度的同时实现了更快的推理速度。我第一次接触这个模型时&#xff0c;就被它的"端到端检测"特性吸引了——不需要复杂的后处…...