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

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 三次握手

三次握手的过程如下:

  1. 客户端发送一个带有SYN(Synchronize Sequence Number)标志的TCP数据包给服务器,表示客户端要求建立连接。此时客户端处于SYN-SENT状态。
  2. 服务器收到客户端的SYN数据包后,发送一个带有SYN和ACK(Acknowledgement)标志的TCP数据包给客户端,表示服务器同意建立连接。此时服务器处于SYN-RECEIVED状态。
  3. 客户端收到服务器的SYN+ACK数据包后,发送一个带有ACK标志的TCP数据包给服务器,表示客户端已经准备好接收数据。此时客户端和服务器都处于ESTABLISHED状态,连接建立成功。

1.1.2 为什么需要三次握手?

三次握手的目的是在客户端和服务器之间建立一个可靠的连接,确保双方都准备好进行数据传输。两次握手可能无法确保双方都准备好进行数据传输,原因如下:

  1. 确保双方的发送和接收能力:在第一次握手时,客户端发送 SYN 包到服务器,表示客户端希望建立连接并具备发送能力。在第二次握手时,服务器回复 SYN+ACK 包,表示服务器同意建立连接并具备发送和接收能力。在第三次握手时,客户端发送 ACK 包,表示客户端具备接收能力。这样,通过三次握手,双方都可以确认对方具备发送和接收能力。

  2. 防止已失效的连接请求:假设只有两次握手,客户端发送了一个连接请求(SYN 包),但因为网络延迟或其他原因,这个请求在很长时间后才到达服务器。此时,客户端可能已经放弃了这个连接请求,但服务器收到请求后仍然会建立连接,这将导致资源的浪费。使用三次握手时,即使服务器收到了延迟的连接请求并回复 SYN+ACK 包,客户端也不会发送 ACK 包,从而避免了无效连接的建立。

因此,两次握手可能导致不稳定的连接和资源浪费,而三次握手可以确保双方都准备好进行数据传输,从而提高了 TCP 连接的可靠性。

1.1.3 四次挥手

四次挥手的过程如下:

  1. 当客户端准备关闭连接时,发送一个带有FIN(Finish)标志的TCP数据包给服务器,表示客户端已经完成数据传输。此时客户端处于FIN-WAIT-1状态。
  2. 服务器收到客户端的FIN数据包后,发送一个带有ACK标志的TCP数据包给客户端,表示服务器已经知道客户端要求关闭连接。此时客户端处于FIN-WAIT-2状态,服务器处于CLOSE-WAIT状态。
  3. 当服务器完成数据传输后,发送一个带有FIN标志的TCP数据包给客户端,表示服务器也准备好关闭连接。此时服务器处于LAST-ACK状态。
  4. 客户端收到服务器的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 、 电路构成及原理图 定时器中断是利用定时器的计数功能&#xff08;向上计数或向下计…...

【React】使用 JSX 为 JavaScript 添加标签

使用 JSX 为 JavaScript 添加标签实际上是将 JSX 语法与 JavaScript 代码结合使用&#xff0c;以描述用户界面。JSX 允许你在 JavaScript 中编写类似 HTML 的结构&#xff0c;并最终由 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爬虫基础-----运算符(第三天)

&#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; &#x1f388;&#x1f388;所属专栏&#xff1a;python爬虫学习&#x1f388;&#x1f388; ✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天…...

Itextpdf电子签章

印章 印章是我国特有的历史文化产物&#xff0c;古代主要用作身份凭证和行驶职权的工具。它的起源是由于社会生活的实际需要。早在商周时代&#xff0c;印章就已经产生。如今的印章已成为一种独特的&#xff0c;融实用性和艺术性为一体的艺术瑰宝。传统的印章容易被坏人、小人…...

两台电脑简单的通信过程详解(经过两个路由器,不同网段)

一、eNSP拓扑图 二、配置4台电脑的IP地址、子网掩码、网关地址。 三、配置路由器 注意拓扑图的接口与本博客是否相符&#xff0c;判断以下命令中的ip是否需要修改。 1.AR1-接口对应IP <Huawei>sys #进入系统视图 [Huawei]int g0/0/0 #进入0/0/0接口 [Huawei-GigabitE…...

Java基于微信小程序的助农扶贫系统的研究与实现

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#…...

RocketMq方便测试,提供一个controller的接口,支持拉取消息,查看消息内容

通过一个REST API接口动态地启动RocketMQ的消费者&#xff0c;并基于传入的参数&#xff08;topicName&#xff0c;filterExpression&#xff0c;consumerGroupId&#xff09;决定要监听哪些消息。在Spring Boot项目中&#xff0c;这通常不是推荐的做法&#xff0c;因为消息消费…...

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 这个控件&#xff0c;做一个 FTP 服务器很简单。可以直接拿官方提供的 FTP Server 的那个 Demo 程序来修改。 本文主要描述如何配置服务器端防火墙 网络环境&#xff1a; 1. 客户端在路由器后面&#xff0c;局域网&#xff1b; 2. 服务器端在路…...

《SQL必知必会第五版》第十四章(组合查询)挑战题

1. 编写 SQL 语句&#xff0c;将两个 SELECT 语句结合起来&#xff0c;以便从 OrderItems表中检索产品 ID&#xff08;prod_id&#xff09;和 quantity。其中&#xff0c;一个 SELECT 语句过滤数量为 100 的行&#xff0c;另一个 SELECT 语句过滤 ID 以 BNBG 开头的产品。按产品…...

elasticsearch+kibana安装部分问题:

1.elasticsearch启动问题&#xff1a; 如果elasticsearch开启https登录则第一次启动的时候需要前台启动&#xff0c;前台启动的时候会自己创建相应的token等登录信息,如果是后台启动则没有这些登录信息&#xff1a; ./elasticsearch ━━━━━━━━━━━━━━━━━━━…...

Python---常用的web框架

目录 Django创建Django项目启动Django项目引入APP视图函数例如纯文本JSON格式数据重定向渲染页面返回错误提示 FlaskPyramidTornado Django 特点&#xff1a;Django是一个全功能的Web框架&#xff0c;提供了许多内置的功能和工具&#xff0c;如ORM、表单处理、认证等。它的设计…...

Jenkins Docker 部署指南

Jenkins Docker 部署指南 本文档为您提供了在 Docker 容器中部署 Jenkins 的全面指南&#xff0c;使用的是阿里云的容器镜像服务。请仔细遵循以下步骤以确保成功设置。 前提条件 主机上安装了 Docker。拥有阿里云容器镜像服务的账户。 部署步骤 1. 登录阿里云容器镜像服务…...

海外媒体宣发:商务视频推广数字化变革全解析-华媒舍

在当今数字化时代&#xff0c;商务视频推广正迎来一场革命性的数字化变革。本文将为您解析这场变革的核心元素和相关内容。 商务视频推广 商务视频推广是一种通过视频形式来宣传和推广产品、服务或品牌的方法。传统的推广方式主要是通过文字和图片进行&#xff0c;而商务视频推…...

文件服务: 功能介绍

文章目录 一、需求背景二、核心功能1、功能要求2、非工能要求 三、存储方式四、实现方式五、核心技术 一、需求背景 二、核心功能 1、功能要求 文件上传文件预览文件分片上传文件分片合并文件秒传文件断点续传文件下载 2、非工能要求 高扩展性&#xff1a;方便添加新的存储…...

php 快速入门(二)

一、运算符 1.1 算术运算符 运算描述举例加$a$b-减&#xff0c;负数功能$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中&#xff0c;停止一个线程的方法通常有以下几种&#xff1a; 使用标志位停止线程&#xff1a; 这是一种常见的做法&#xff0c;即通过设置一个标志位&#xff0c;在线程的执行体中检查这个标志位&#xff0c;当标志位满足某个条件时&#xff0c;退出线程执行。 class M…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

基础测试工具使用经验

背景 vtune&#xff0c;perf, nsight system等基础测试工具&#xff0c;都是用过的&#xff0c;但是没有记录&#xff0c;都逐渐忘了。所以写这篇博客总结记录一下&#xff0c;只要以后发现新的用法&#xff0c;就记得来编辑补充一下 perf 比较基础的用法&#xff1a; 先改这…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户&#xff0c;但你不希望用 root 权限运行 ns-3&#xff08;这是对的&#xff0c;ns3 工具会拒绝 root&#xff09;&#xff0c;你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案&#xff1a;创建非 roo…...

JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案

JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停​​ 1. ​​安全点(Safepoint)阻塞​​ ​​现象​​:JVM暂停但无GC日志,日志显示No GCs detected。​​原因​​:JVM等待所有线程进入安全点(如…...

以光量子为例,详解量子获取方式

光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学&#xff08;silicon photonics&#xff09;的光波导&#xff08;optical waveguide&#xff09;芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中&#xff0c;光既是波又是粒子。光子本…...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用&#xff0c;结合SQLite数据库实现联系人管理功能&#xff0c;并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能&#xff0c;同时可以最小化到系统…...

R语言速释制剂QBD解决方案之三

本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...

论文阅读笔记——Muffin: Testing Deep Learning Libraries via Neural Architecture Fuzzing

Muffin 论文 现有方法 CRADLE 和 LEMON&#xff0c;依赖模型推理阶段输出进行差分测试&#xff0c;但在训练阶段是不可行的&#xff0c;因为训练阶段直到最后才有固定输出&#xff0c;中间过程是不断变化的。API 库覆盖低&#xff0c;因为各个 API 都是在各种具体场景下使用。…...

pycharm 设置环境出错

pycharm 设置环境出错 pycharm 新建项目&#xff0c;设置虚拟环境&#xff0c;出错 pycharm 出错 Cannot open Local Failed to start [powershell.exe, -NoExit, -ExecutionPolicy, Bypass, -File, C:\Program Files\JetBrains\PyCharm 2024.1.3\plugins\terminal\shell-int…...

Monorepo架构: Nx Cloud 扩展能力与缓存加速

借助 Nx Cloud 实现项目协同与加速构建 1 &#xff09; 缓存工作原理分析 在了解了本地缓存和远程缓存之后&#xff0c;我们来探究缓存是如何工作的。以计算文件的哈希串为例&#xff0c;若后续运行任务时文件哈希串未变&#xff0c;系统会直接使用对应的输出和制品文件。 2 …...