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…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...

K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...

Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...
测试markdown--肇兴
day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...
oracle与MySQL数据库之间数据同步的技术要点
Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异,它们的数据同步要求既要保持数据的准确性和一致性,又要处理好性能问题。以下是一些主要的技术要点: 数据结构差异 数据类型差异ÿ…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...
uniapp中使用aixos 报错
问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...
SQL慢可能是触发了ring buffer
简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机
这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机,因为在使用过程中发现 Airsim 对外部监控相机的描述模糊,而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置,最后在源码示例中找到了,所以感…...
jmeter聚合报告中参数详解
sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample(样本数) 表示测试中发送的请求数量,即测试执行了多少次请求。 单位,以个或者次数表示。 示例:…...