TCP与UDP:网络协议的技术原理与要点
文章目录
- 1. TCP(传输控制协议)
- 1.1 面向连接
- 1.1.1 三次握手
- 1.1.2 为什么需要三次握手?
- 1.1.3 四次挥手
- 1.1.4 为什么需要四次挥手?
- 1.2 可靠性
- 1.3 有序传输
- 1.4 流量控制
- 1.5 拥塞控制
- 2. UDP(用户数据报协议)
- 2.1 无连接
- 2.2 不可靠性
- 2.3 无序传输
- 2.4 简单
- 3. TCP和UDP的头部结构
- 4. TCP和UDP的应用
- 5. 总结
随着互联网的快速发展,网络协议在数据传输中扮演着重要的角色。TCP(传输控制协议)和UDP(用户数据报协议)是传输层的两种基础协议,它们的主要区别在于可靠性、连接方式和传输速度。本文将详细阐述TCP和UDP的技术原理,特别关注三次握手和四次挥手的过程。
1. TCP(传输控制协议)
TCP是一种面向连接的、可靠的传输协议。其技术原理和要点如下:
1.1 面向连接
TCP在数据传输前需要建立连接。通常采用三次握手(Three-way Handshake)过程来建立连接。在数据传输结束后,通过四次挥手(Four-way Handshake)过程来关闭连接。
1.1.1 三次握手
三次握手的过程如下:
- 客户端发送一个带有SYN(Synchronize Sequence Number)标志的TCP数据包给服务器,表示客户端要求建立连接。此时客户端处于SYN-SENT状态。
- 服务器收到客户端的SYN数据包后,发送一个带有SYN和ACK(Acknowledgement)标志的TCP数据包给客户端,表示服务器同意建立连接。此时服务器处于SYN-RECEIVED状态。
- 客户端收到服务器的SYN+ACK数据包后,发送一个带有ACK标志的TCP数据包给服务器,表示客户端已经准备好接收数据。此时客户端和服务器都处于ESTABLISHED状态,连接建立成功。
1.1.2 为什么需要三次握手?
三次握手的目的是在客户端和服务器之间建立一个可靠的连接,确保双方都准备好进行数据传输。两次握手可能无法确保双方都准备好进行数据传输,原因如下:
-
确保双方的发送和接收能力:在第一次握手时,客户端发送 SYN 包到服务器,表示客户端希望建立连接并具备发送能力。在第二次握手时,服务器回复 SYN+ACK 包,表示服务器同意建立连接并具备发送和接收能力。在第三次握手时,客户端发送 ACK 包,表示客户端具备接收能力。这样,通过三次握手,双方都可以确认对方具备发送和接收能力。
-
防止已失效的连接请求:假设只有两次握手,客户端发送了一个连接请求(SYN 包),但因为网络延迟或其他原因,这个请求在很长时间后才到达服务器。此时,客户端可能已经放弃了这个连接请求,但服务器收到请求后仍然会建立连接,这将导致资源的浪费。使用三次握手时,即使服务器收到了延迟的连接请求并回复 SYN+ACK 包,客户端也不会发送 ACK 包,从而避免了无效连接的建立。
因此,两次握手可能导致不稳定的连接和资源浪费,而三次握手可以确保双方都准备好进行数据传输,从而提高了 TCP 连接的可靠性。
1.1.3 四次挥手
四次挥手的过程如下:
- 当客户端准备关闭连接时,发送一个带有FIN(Finish)标志的TCP数据包给服务器,表示客户端已经完成数据传输。此时客户端处于FIN-WAIT-1状态。
- 服务器收到客户端的FIN数据包后,发送一个带有ACK标志的TCP数据包给客户端,表示服务器已经知道客户端要求关闭连接。此时客户端处于FIN-WAIT-2状态,服务器处于CLOSE-WAIT状态。
- 当服务器完成数据传输后,发送一个带有FIN标志的TCP数据包给客户端,表示服务器也准备好关闭连接。此时服务器处于LAST-ACK状态。
- 客户端收到服务器的FIN数据包后,发送一个带有ACK标志的TCP数据包给服务器,表示客户端已经知道服务器要求关闭连接。此时客户端处于TIME-WAIT状态,等待一段时间后,客户端和服务器都进入CLOSED状态,连接关闭。
1.1.4 为什么需要四次挥手?
为了确保双方都收到关闭连接的通知:在四次挥手过程中,客户端和服务器分别发送 FIN 和 ACK 包来表示它们准备关闭连接。这样可以确保双方都收到了关闭连接的通知,并允许双方在关闭连接之前完成数据传输。
在 TCP 协议中,理论上两次挥手可以关闭连接,但是可能会导致“半开连接”或者数据丢失的问题,因此实际中我们使用四次挥手来关闭连接。
“半开连接”是指一种状态,其中一方认为连接已经关闭,而另一方认为连接仍然打开。这可能发生在只有两次挥手的情况下。例如,如果客户端发送 FIN 包,服务器接收到后立即发送 FIN 包并关闭连接,然后客户端发送 ACK 包。在这种情况下,如果 ACK 包在网络中丢失,那么服务器将认为连接已经关闭,而客户端将认为连接仍然打开,因为它没有收到服务器的 FIN 包。这就是所谓的“半开连接”。
此外,如果服务器在收到客户端的 FIN 包后立即发送 FIN 包并关闭连接,那么服务器可能无法将所有剩余的数据发送给客户端。这可能导致数据丢失。
因此,为了避免“半开连接”和数据丢失,TCP 协议使用四次挥手来关闭连接。在四次挥手过程中,客户端和服务器都会发送 FIN 包和 ACK 包,这样可以确保双方都知道连接将关闭,并且可以在关闭连接之前完成数据传输。
1.2 可靠性
TCP通过序号、确认应答(ACK)、重传、流量控制(滑动窗口)和拥塞控制等机制来确保数据的可靠传输。这意味着在数据丢失或出错的情况下,TCP会自动进行重传。
1.3 有序传输
TCP通过序号对数据进行排序,确保接收方按照发送顺序接收数据。
1.4 流量控制
TCP使用滑动窗口机制来进行流量控制,防止发送方发送速度过快导致接收方处理不过来。
1.5 拥塞控制
TCP采用拥塞控制算法(如TCP Tahoe、Reno、NewReno等)来避免网络拥塞,提高网络传输效率。
2. UDP(用户数据报协议)
UDP是一种无连接的、不可靠的传输协议。其技术原理和要点如下:
2.1 无连接
UDP无需建立连接,发送方可以直接将数据报发送给接收方。这使得UDP在一些场景下具有较低的延迟。
2.2 不可靠性
UDP不提供可靠性保证,因此在数据丢失或出错的情况下,UDP不会进行重传。
2.3 无序传输
UDP不保证数据报的发送顺序,接收方可能会收到乱序的数据。
2.4 简单
UDP协议结构简单,没有复杂的流量控制和拥塞控制机制,因此在某些场景下具有较高的传输速度。
3. TCP和UDP的头部结构
TCP和UDP的头部结构也体现了它们的设计理念和使用场景。
-
TCP头部:TCP头部包含源端口、目标端口、序列号、确认号、数据偏移、保留、控制位(如SYN、ACK、FIN等)、窗口大小、校验和、紧急指针等字段。这些字段用于实现TCP的连接管理、可靠性、流量控制和拥塞控制等功能。
-
UDP头部:UDP头部包含源端口、目标端口、长度和校验和等字段。这些字段相比TCP头部要简单得多,这体现了UDP的简单和快速的设计理念。
4. TCP和UDP的应用
TCP和UDP在互联网中有广泛的应用。许多常见的网络协议和应用都是基于TCP或UDP的。
-
基于TCP的协议和应用:HTTP(超文本传输协议)、HTTPS(安全超文本传输协议)、FTP(文件传输协议)、SMTP(简单邮件传输协议)、POP3(邮局协议3)等。
-
基于UDP的协议和应用:DNS(域名系统)、DHCP(动态主机配置协议)、TFTP(简单文件传输协议)、VoIP(网络电话)等。
5. 总结
TCP和UDP是网络传输层的两种基础协议,它们在互联网中扮演着重要的角色。理解TCP和UDP的技术原理和要点,对于我们来说至关重要。在设计网络应用或解决网络问题时,选择合适的传输协议是非常重要的。
相关文章:
TCP与UDP:网络协议的技术原理与要点
文章目录 1. TCP(传输控制协议)1.1 面向连接1.1.1 三次握手1.1.2 为什么需要三次握手?1.1.3 四次挥手1.1.4 为什么需要四次挥手? 1.2 可靠性1.3 有序传输1.4 流量控制1.5 拥塞控制 2. UDP(用户数据报协议)2…...
vue-office/docx插件实现docx文件预览
1.下包 //预览docx文件 npm install vue-office/docx vue-demi//如果是vue2.6版本或以下还需要额外安装 vue/composition-api2.引入 <template><div>//在src填入文档地址<VueOfficeDocx srchttp://...../xx.docx style"width:80%" rendered"re…...
STM32—控制蜂鸣器(定时器)
目录 1 、 电路构成及原理图 2 、编写实现代码 main.c tim_irq.c 3、代码讲解 4、烧录到开发板调试、验证代码 5、检验效果 此笔记基于朗峰 STM32F103 系列全集成开发板的记录。 1 、 电路构成及原理图 定时器中断是利用定时器的计数功能(向上计数或向下计…...
【React】使用 JSX 为 JavaScript 添加标签
使用 JSX 为 JavaScript 添加标签实际上是将 JSX 语法与 JavaScript 代码结合使用,以描述用户界面。JSX 允许你在 JavaScript 中编写类似 HTML 的结构,并最终由 React 库将其转换为真正的 DOM 元素。以下是将标签引入 JavaScript 以及将 HTML 转化为 JSX…...
Docker构建多平台(x86,arm64)构架镜像
这里写自定义目录标题 背景配置buildx开启experimental重启检查 打包 背景 docker镜像需要支持不同平台架构 配置buildx 开启experimental vi /etc/docker/daemon.json {"experimental": true }或者 重启检查 # 验证buildx版本 docker buildx version# 重启do…...
python爬虫基础-----运算符(第三天)
🎈🎈作者主页: 喔的嘛呀🎈🎈 🎈🎈所属专栏:python爬虫学习🎈🎈 ✨✨谢谢大家捧场,祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天…...
Itextpdf电子签章
印章 印章是我国特有的历史文化产物,古代主要用作身份凭证和行驶职权的工具。它的起源是由于社会生活的实际需要。早在商周时代,印章就已经产生。如今的印章已成为一种独特的,融实用性和艺术性为一体的艺术瑰宝。传统的印章容易被坏人、小人…...
两台电脑简单的通信过程详解(经过两个路由器,不同网段)
一、eNSP拓扑图 二、配置4台电脑的IP地址、子网掩码、网关地址。 三、配置路由器 注意拓扑图的接口与本博客是否相符,判断以下命令中的ip是否需要修改。 1.AR1-接口对应IP <Huawei>sys #进入系统视图 [Huawei]int g0/0/0 #进入0/0/0接口 [Huawei-GigabitE…...
Java基于微信小程序的助农扶贫系统的研究与实现
博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇&#…...
RocketMq方便测试,提供一个controller的接口,支持拉取消息,查看消息内容
通过一个REST API接口动态地启动RocketMQ的消费者,并基于传入的参数(topicName,filterExpression,consumerGroupId)决定要监听哪些消息。在Spring Boot项目中,这通常不是推荐的做法,因为消息消费…...
win10 下Msys2编译FFmpeg的流程方法
安装Msys MSYS2官网 安装... 将\msys64\usr\bin加入环境变量 Mysy2中输入 pacman –Syu pacman –Su pacman -S git patch unzip pacman -S mingw-w64-x86_64-toolchain pacman -S mingw-w64-x86_64-yasm pacman -S mingw-w64-x86_64-SDL2 pacman -S mingw-w64-x86_6…...
用 Delphi 做 FTP 服务器以及如何配置防火墙
使用 Delphi 的 TIdFTPServer 这个控件,做一个 FTP 服务器很简单。可以直接拿官方提供的 FTP Server 的那个 Demo 程序来修改。 本文主要描述如何配置服务器端防火墙 网络环境: 1. 客户端在路由器后面,局域网; 2. 服务器端在路…...
《SQL必知必会第五版》第十四章(组合查询)挑战题
1. 编写 SQL 语句,将两个 SELECT 语句结合起来,以便从 OrderItems表中检索产品 ID(prod_id)和 quantity。其中,一个 SELECT 语句过滤数量为 100 的行,另一个 SELECT 语句过滤 ID 以 BNBG 开头的产品。按产品…...
elasticsearch+kibana安装部分问题:
1.elasticsearch启动问题: 如果elasticsearch开启https登录则第一次启动的时候需要前台启动,前台启动的时候会自己创建相应的token等登录信息,如果是后台启动则没有这些登录信息: ./elasticsearch ━━━━━━━━━━━━━━━━━━━…...
Python---常用的web框架
目录 Django创建Django项目启动Django项目引入APP视图函数例如纯文本JSON格式数据重定向渲染页面返回错误提示 FlaskPyramidTornado Django 特点:Django是一个全功能的Web框架,提供了许多内置的功能和工具,如ORM、表单处理、认证等。它的设计…...
Jenkins Docker 部署指南
Jenkins Docker 部署指南 本文档为您提供了在 Docker 容器中部署 Jenkins 的全面指南,使用的是阿里云的容器镜像服务。请仔细遵循以下步骤以确保成功设置。 前提条件 主机上安装了 Docker。拥有阿里云容器镜像服务的账户。 部署步骤 1. 登录阿里云容器镜像服务…...
海外媒体宣发:商务视频推广数字化变革全解析-华媒舍
在当今数字化时代,商务视频推广正迎来一场革命性的数字化变革。本文将为您解析这场变革的核心元素和相关内容。 商务视频推广 商务视频推广是一种通过视频形式来宣传和推广产品、服务或品牌的方法。传统的推广方式主要是通过文字和图片进行,而商务视频推…...
文件服务: 功能介绍
文章目录 一、需求背景二、核心功能1、功能要求2、非工能要求 三、存储方式四、实现方式五、核心技术 一、需求背景 二、核心功能 1、功能要求 文件上传文件预览文件分片上传文件分片合并文件秒传文件断点续传文件下载 2、非工能要求 高扩展性:方便添加新的存储…...
php 快速入门(二)
一、运算符 1.1 算术运算符 运算描述举例加$a$b-减,负数功能$a-$b*乘$a*$b/除$a/$b%取余$a%$b <?php$s1 3;$s2 5;$res1 $s1$s2;$res2 $s1-$s2;$res3 $s1*$s2;$res4 $s1/$s2;$res5 $s1%$s2;echo $res1."<br>";echo "${res2}<b…...
java面试题|(1)多线程如何停止一个线程?
在Java中,停止一个线程的方法通常有以下几种: 使用标志位停止线程: 这是一种常见的做法,即通过设置一个标志位,在线程的执行体中检查这个标志位,当标志位满足某个条件时,退出线程执行。 class M…...
华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...
Flask RESTful 示例
目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...
云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...
HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...
成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...
论文笔记——相干体技术在裂缝预测中的应用研究
目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术:基于互相关的相干体技术(Correlation)第二代相干体技术:基于相似的相干体技术(Semblance)基于多道相似的相干体…...
Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...
MySQL 8.0 事务全面讲解
以下是一个结合两次回答的 MySQL 8.0 事务全面讲解,涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容,并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念(ACID) 事务是…...
手机平板能效生态设计指令EU 2023/1670标准解读
手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读,综合法规核心要求、最新修正及企业合规要点: 一、法规背景与目标 生效与强制时间 发布于2023年8月31日(OJ公报&…...
