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了,所以现在再记录一下ÿ…...
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:向集合中添加元素。 List<int> numbers new List<int>(){ 1, 2, 3 }; numbers.Add(4); // numbers 现在为 { 1, 2, 3, 4 }Remove:从集合中移除指定的元素。 List<int> numbers new List<int>(){ 1, 2, 3, 4 }; numbers.Re…...
pytorch学习(8)——现有网络模型的使用以及修改
1 vgg16模型 1.1 vgg16模型的下载 采用torchvision中的vgg16模型,能够实现1000个类型的图像分类,VGG模型在AlexNet的基础上使用3*3小卷积核,增加网络深度,具有很好的泛化能力。 首先下载vgg16模型,python代码如下&…...
get和post请求的区别
GET和POST是HTTP请求的两种方法,其区别如下 ① GET请求表示从指定的服务器中获取数据(请求数据),比如查询用户信息;POST请求表示将数据提交到指定的服务器进行处理(发送数据), ② GET请求是一个幂等的请求,一般用于对服务器资源不会产生影响的场景,比如说请求一个网友的…...
extern “C”关键字的作用
目录 概述C和C在函数调用和变量命名等方面的差异示例总结 概述 extern "C"是用于在C中声明使用C语言编写的函数和变量的关键字。C和C在函数调用和变量命名等方面存在一些差异,为了在C代码中正确地使用C语言的函数和变量,需要使用extern "…...
使用ffmpeg截取视频片段
本文将介绍2中使用ffmpeg截取视频的方法 指定截取视频的 开始时间 和 结束时间,进行视频截取指定截取视频的 开始时间 和 截取的秒数,进行视频截取 两种截取方式的命令行如下 截取某一时间段视频 优先使用 ffmpeg -i ./input.mp4 -c:v libx264 -crf…...
Python教程(11)——Python中的字典dict的用法介绍
dict的用法介绍 创建字典访问字典修改字典删除字典字典的相关函数 列表虽然好,但是如果需要快速的数据查找,就必须进行需要遍历,也就是最坏情况需要遍历完一遍才能找到需要的那个数据,时间复杂度是O(n),显然这个速度是…...
三道dfs题
一:1114. 棋盘问题 - AcWing题库 分别枚举行和列,能填的地方就填,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 # 加载示例数据(例如,使用seaborn自带的数据集) 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:不足之处,欢迎指正! HashMap:put数据是无序的; TreeMap:key值按一定的顺序排序;数字做key,put数据是有序,非数字字符串做key,put数据…...
TiDB Serverless Branching:通过数据库分支简化应用开发流程
2023 年 7 月 10 日,TiDB Serverless 正式商用。这是一个完全托管的数据库服务平台(DBaaS),提供灵活的集群配置和基于用量的付费模式。紧随其后,TiDB Serverless Branching 的测试版也发布了。 TiDB Serverless Branc…...
运用亚马逊云科技Amazon Kendra,快速部署企业智能搜索应用
亚马逊云科技Amazon Kendra是一项由机器学习(ML)提供支持的企业搜索服务。Kendra内置数据源连接器,支持快速访问Amazon S3、AmazonRDS、AmazonFSX以及其他外部数据源,帮助用户自动提取文档并建立索引。Kendra支持超过30多种多国语…...
C# 使用 OleDbConnection 连接读取Excel的方法
Connection类有四种:SqlConnection,OleDbConnection,OdbcConnection和OracleConnection。 (1)Sqlconnetcion类的对象连接是SQL Server数据库; (2)OracleConnection类的对象连接Oracle数据库&…...
【LeetCode-中等题】98. 验证二叉搜索树
文章目录 题目方法一:BFS 层序遍历方法二: 递归方法三: 中序遍历(栈)方法四: 中序遍历(递归) 题目 思路就是首先得知道什么是二叉搜索树 左孩子在(父节点的最小值&#x…...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...
Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
招商蛇口 | 执笔CID,启幕低密生活新境
作为中国城市生长的力量,招商蛇口以“美好生活承载者”为使命,深耕全球111座城市,以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子,招商蛇口始终与城市发展同频共振,以建筑诠释对土地与生活的…...
JavaScript基础-API 和 Web API
在学习JavaScript的过程中,理解API(应用程序接口)和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能,使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...
GitFlow 工作模式(详解)
今天再学项目的过程中遇到使用gitflow模式管理代码,因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存,无论是github还是gittee,都是一种基于git去保存代码的形式,这样保存代码…...
R 语言科研绘图第 55 期 --- 网络图-聚类
在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...
第八部分:阶段项目 6:构建 React 前端应用
现在,是时候将你学到的 React 基础知识付诸实践,构建一个简单的前端应用来模拟与后端 API 的交互了。在这个阶段,你可以先使用模拟数据,或者如果你的后端 API(阶段项目 5)已经搭建好,可以直接连…...
计算机系统结构复习-名词解释2
1.定向:在某条指令产生计算结果之前,其他指令并不真正立即需要该计算结果,如果能够将该计算结果从其产生的地方直接送到其他指令中需要它的地方,那么就可以避免停顿。 2.多级存储层次:由若干个采用不同实现技术的存储…...
Netty自定义协议解析
目录 自定义协议设计 实现消息解码器 实现消息编码器 自定义消息对象 配置ChannelPipeline Netty提供了强大的编解码器抽象基类,这些基类能够帮助开发者快速实现自定义协议的解析。 自定义协议设计 在实现自定义协议解析之前,需要明确协议的具体格式。例如,一个简单的…...
