当前位置: 首页 > 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…...

uniapp 对接腾讯云IM群组成员管理(增删改查)

UniApp 实战&#xff1a;腾讯云IM群组成员管理&#xff08;增删改查&#xff09; 一、前言 在社交类App开发中&#xff0c;群组成员管理是核心功能之一。本文将基于UniApp框架&#xff0c;结合腾讯云IM SDK&#xff0c;详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

通过Wrangler CLI在worker中创建数据库和表

官方使用文档&#xff1a;Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后&#xff0c;会在本地和远程创建数据库&#xff1a; npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库&#xff1a; 现在&#xff0c;您的Cloudfla…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系&#xff0c;主要是分成几个表&#xff0c;用户表我们是记录用户的基础信息&#xff0c;包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题&#xff0c;不同的角色&#xf…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​&#xff1a; 下载安装DevEco Studio 4.0&#xff08;支持HarmonyOS 5&#xff09;配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​&#xff1a; ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile&#xff0c;新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

聊一聊接口测试的意义有哪些?

目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开&#xff0c;首…...

Java 二维码

Java 二维码 **技术&#xff1a;**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...

Java编程之桥接模式

定义 桥接模式&#xff08;Bridge Pattern&#xff09;属于结构型设计模式&#xff0c;它的核心意图是将抽象部分与实现部分分离&#xff0c;使它们可以独立地变化。这种模式通过组合关系来替代继承关系&#xff0c;从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...

JavaScript基础-API 和 Web API

在学习JavaScript的过程中&#xff0c;理解API&#xff08;应用程序接口&#xff09;和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能&#xff0c;使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...