网络通信的两大支柱:TCP与UDP协议详解(非常详细)零基础入门到精通,收藏这一篇就够了

在构建现代互联网通信的基石中,TCP(传输控制协议)和UDP(用户数据报协议)起着至关重要的作用。本文将深入探讨两者的区别及应用场景。  

1

TCP和UDP的共同点

传输层协议:

TCP和UDP都是传输层协议,位于OSI模型的第四层,负责在网络中的不同主机上的应用程序之间提供数据传输服务。

支持的数据类型:

两者均支持传输文件、视频、图片等二进制数据。

端到端通信:

两者都支持端到端的数据传输,即数据从源主机的一个应用程序传输到目的主机的另一个应用程序。

**多路复用:**TCP和UDP允许多个应用程序在同一网络连接上并发通信,通过端口号区分不同的通信流。

**面向字节流:**它们都是面向字节流的协议,可以传输任意类型的数据。

**无边界的传输:**TCP和UDP不保证数据传输的边界,即它们不保证数据按照特定的消息边界进行传输。

**拥塞控制和流量控制:**虽然TCP和UDP在实现上有所不同,但它们都可以支持拥塞控制和流量控制机制,以适应网络条件和接收方的处理能力。

**错误检测:**两者都提供了一定程度的错误检测功能,TCP使用更复杂的校验和,而UDP使用较为简单的校验和。

**支持广播和多播:**TCP和UDP都可以支持广播和多播传输,允许同时向多个目的地发送数据。

**动态端口分配:**它们允许使用动态端口号,这在客户端应用程序生成大量短连接时非常有用。

**不关心网络层的细节:**TCP和UDP抽象了网络层的细节,使得应用程序可以不必关心底层网络的具体实现。

2

TCP和UDP的区别?

想象一下,网络通信中的TCP和UDP协议,可以类比为传统的写信和现代的打电话两种通信方式。

使用TCP协议,就像是打电话

- 当你拨打电话,对方接听,这一过程类似于TCP的三次握手,确保了双方建立了一个双向的、可靠的通信连接。

- 通话过程中,双方可以实时交流,任何问题都能立即得到确认,这就像TCP提供了数据传输的确认机制,确保数据准确无误地送达对方。

- 通话结束时,双方都会挂断电话,这一动作类似于TCP的四次挥手,明确地结束了通信过程,保证了连接的优雅关闭。

而使用UDP协议,更像是写信

- 信件一旦寄出,你无法知道对方是否收到信件,信中的内容是否完整,或者在多封信的情况下,它们是否按照正确的顺序到达。

- UDP协议不保证数据包的顺序、完整性或可靠性,它提供了一种简单且快速的通信方式,但不提供TCP那样的确认和控制机制。

接下来,我将深入对比TCP和UDP之间的主要差异。

连接方式:

TCP是面向连接的协议,需建立连接;

UDP是无连接的,无需建立连接即可传输数据。

可靠性:

TCP提供可靠的数据传输,确保数据包正确、完整、按顺序到达;

UDP则不保证数据包的可靠传输,可能会导致丢包、乱序或重复。

数据传输:

TCP:提供可靠的数据传输,保证数据包正确、有序、无误差地传输。

UDP:不保证数据传输的可靠性,可能发生丢包、乱序或损坏。

速度:

由于TCP需要建立连接和保证数据的可靠传输,其速度相对较慢;

UDP由于简单直接,没有建立连接的步骤,因此速度更快。

使用场景:

TCP适用于准确性关键的应用,如文件传输、邮件发送;

UDP适合实时性高的应用,如在线游戏、语音和视频通信。

流量控制和拥塞控制:

TCP:内置流量控制和拥塞控制机制,防止网络过载。

UDP:不提供流量控制和拥塞控制,这些功能需要应用层实现。

错误恢复:

TCP:具有错误检测和恢复机制,如丢包重传、错误校正。

UDP:不提供错误恢复机制,需要应用层处理。

报文结构:

TCP:有复杂的头部结构,包含序列号、确认号、窗口大小等控制信息。

UDP:头部结构简单,主要包含源端口、目的端口和长度校验等。

资源消耗:

TCP:由于需要维护连接状态和进行错误恢复,消耗更多的资源。

UDP:由于协议简单,消耗的资源较少。

**编程复杂性:
**

TCP:编程模型较为复杂,需要处理连接的建立、维护和释放。

UDP:编程模型简单,只需发送和接收数据报文。

3

TCP三次握手

TCP协议通过三次握手过程来确立一个稳定可靠的连接,这一机制确保了连接的双方准备就绪,避免过期连接请求干扰。

SYN(同步序列编号):

第一次握手是客户端向服务器发起的连接请求。客户端发送一个特殊的TCP报文段,其中SYN标志位设为1,表示这是一个连接请求的开始。同时,客户端生成一个初始序列号(seq=x),这个序列号是客户端随机选择的,用于后续通信中识别和排序数据包。

SYN-ACK(同步-确认):

服务器在收到客户端的SYN报文后,如果同意建立连接,则会进入第二次握手。服务器向客户端发送一个TCP报文段作为响应,该报文段中SYN标志位同样设为1,表示服务器也请求建立连接,而ACK标志位设为1,表示对客户端SYN报文的确认。服务器的确认号(ack)设为客户端的序列号加1(ack=x+1),表明服务器期待从该序列号开始接收数据。同时,服务器也会提供一个自己的初始序列号(seq=y),作为对客户端的SYN-ACK响应。

ACK(确认):

第三次握手是客户端对服务器SYN-ACK报文的响应。客户端发送一个TCP报文段,其中ACK标志位设为1,表明这是一个确认报文。客户端的序列号(seq)增加1(seq=x+1),表示客户端确认了服务器的初始序列号,并且准备好从这个序列号开始发送数据。确认号(ack)设为服务器的初始序列号加1(ack=y+1),完成对服务器SYN报文的确认。

通过这三次交互,客户端和服务器成功地交换了初始序列号,并且双方都确认了对方的接收能力和发送能力,从而建立起一个稳定的通信连接。这个过程中,序列号和确认号的交换确保了连接的双方都有对方最新的信息,这个过程是TCP协议保证连接可靠性的关键机制之一。

4

TCP如何处理丢包问题?

TCP协议通过序列号和确认应答机制解决丢包问题,确保数据传输的可靠性。

**1、序列号标记:**TCP为每个数据字节分配一个递增的序列号,从0开始,确保每个TCP段都能标识数据的顺序和量。

**2、连续数据传输:**发送方可以利用序列号连续发送多个数据段,而接收方对这些连续发送只需回复单个ACK,提升了传输效率。

**3、数据重组:**接收方根据每个数据段的序列号重新组装原始数据流,保障数据的完整性与顺序。

**4、丢包重传:**若数据段丢失,接收方通过ACK报文指示期望的序列号,通知发送方重传。例如,若丢失序列号100至199的数据段,接收方发送ACK=100,促使发送方重传。

**5、全双工通信:**TCP支持全双工模式,允许客户端和服务器独立进行发送和接收操作,确保了双方数据传输的可靠性和效率。

5

TCP四次挥手

以下以客户端发起关闭连接为例:

第一次挥手:

客户端完成数据传输后,向服务器发送一个FIN(结束)标志位的TCP段,请求关闭已建立的连接。客户端进入FIN-WAIT-1状态,等待服务器的确认。

第二次挥手:

服务器收到客户端的FIN后,发送一个ACK(确认)标志位的TCP段作为回应,告知客户端已收到关闭连接的请求。服务器进入CLOSE-WAIT状态,客户端接收到ACK后进入FIN-WAIT-2状态。此时,连接处于半关闭状态,服务器可以继续发送未传输完成的数据,而客户端可以接收数据。

第三次挥手:

服务器在完成其数据的发送和接收后,向客户端发送一个FIN标志位的TCP段,请求关闭其至客户端的数据传输方向。

第四次挥手:

客户端收到服务器的FIN后,向服务器发送一个ACK标志位的TCP段作为确认。客户端进入TIME-WAIT状态,等待一段时间(称为2MSL,即最大报文段生存时间的两倍)以确保服务器接收到了最终的ACK包。这段时间过后,客户端确保服务器没有未收到的ACK需要重传,从而避免建立新的连接。

连接关闭:

服务器在发送完FIN后会等待客户端的ACK确认。一旦收到ACK,服务器立即关闭连接。客户端在TIME-WAIT状态经过2MSL时间后,确保没有未收到的ACK需要重传,也关闭连接。

通过四次挥手,TCP连接被完全关闭。与三次握手建立连接的过程相对应,四次挥手确保了TCP连接的双方都可以独立地关闭自己的发送方向,然后协同关闭整个连接,避免了潜在的资源泄露和数据丢失。

6

UDP协议的特点

简单性:

UDP(用户数据报协议)摒弃了建立连接的复杂性,不提供数据包确认、顺序、控制流量或拥塞管理等机制。这种轻量级的设计使得UDP在头部开销上远小于TCP,从而在网络通信中能够快速地发送数据。由于UDP不维护连接状态,每个数据包独立处理,这使得它非常适合那些对实时性要求高但对数据传输稳定性要求不高的应用场景。

低延迟:

由于UDP协议不进行握手连接、不保证数据包顺序、不重传,所以能够减少数据传输的等待时间,实现快速传输。

适用性:

UDP协议适用于对实时性要求高,但对数据准确性要求相对宽松的场景。例如,在域名查询(DNS)中,快速响应比确保每个查询都准确无误更重要。语音通话和视频直播中,允许一定程度的丢包和误差,以换取更快的传输速度和更小的延迟可以让体验感更好。

效率与限制:

尽管UDP提供了高效的数据传输,但它不保证数据包的可靠传输,意味着接收方可能遇到丢包、乱序或重复的数据包。因此,使用UDP的应用通常需要在应用层实现额外的错误检测和纠正机制,以确保数据的完整性和准确性。

结语

随着对TCP和UDP协议深入探索的结束,我们得以窥见这两种协议如何以其独特的特性,共同构成了现代网络通信的坚实基础。TCP以其可靠性保证了数据传输的精确无误,而UDP则以其高效性满足了对实时性有特殊要求的应用场景。它们各自在网络世界的舞台上扮演着关键角色,不可或缺。

感谢您的阅读,我们下一篇文章再见!

`黑客&网络安全如何学习

今天只要你给我的文章点赞,我私藏的网安学习资料一样免费共享给你们,来看看有哪些东西。

1.学习路线图

攻击和防守要学的东西也不少,具体要学的东西我都写在了上面的路线图,如果你能学完它们,你去就业和接私活完全没有问题。

2.视频教程

网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己录的网安视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。

内容涵盖了网络安全法学习、网络安全运营等保测评、渗透测试基础、漏洞详解、计算机基础知识等,都是网络安全入门必知必会的学习内容。

(都打包成一块的了,不能一一展开,总共300多集)

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

3.技术文档和电子书

技术文档也是我自己整理的,包括我参加大型网安行动、CTF和挖SRC漏洞的经验和技术要点,电子书也有200多本,由于内容的敏感性,我就不一一展示了。

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

4.工具包、面试题和源码

“工欲善其事必先利其器”我为大家总结出了最受欢迎的几十款款黑客工具。涉及范围主要集中在 信息收集、Android黑客工具、自动化工具、网络钓鱼等,感兴趣的同学不容错过。

还有我视频里讲的案例源码和对应的工具包,需要的话也可以拿走。

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

最后就是我这几年整理的网安方面的面试题,如果你是要找网安方面的工作,它们绝对能帮你大忙。

这些题目都是大家在面试深信服、奇安信、腾讯或者其它大厂面试时经常遇到的,如果大家有好的题目或者好的见解欢迎分享。

参考解析:深信服官网、奇安信官网、Freebuf、csdn等

内容特点:条理清晰,含图像化表示更加易懂。

内容概要:包括 内网、操作系统、协议、渗透测试、安服、漏洞、注入、XSS、CSRF、SSRF、文件上传、文件下载、文件包含、XXE、逻辑漏洞、工具、SQLmap、NMAP、BP、MSF…

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/350650.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法day32

第一题 207. 课程表 步骤一: 通过下图的课程数组,首先画出DAG图(有向无环图) 步骤二: 其次我们按照DAG图,来构建该图的拓扑排序,等有效的点都按照规则排完序后,观察是否有剩下的点的入度不为0&…

解决linux jenkins要求JDK版本与项目版本JDK不一致问题

背景–问题描述: 新入职公司,交接人说jenkins运行有问题,现在都是手动发布,具体原因让我自己看(笑哭)。我人都蒙了,测试环境都手动发布,那不是麻烦的要死! 接手后&am…

养猫发现猫毛过敏?宠物空气净化器真的能拯救猫毛过敏吗?

广东省 猫咪是许多人梦寐以求的伴侣,但对于轻度猫毛过敏和鼻炎患者来说,养猫似乎是个遥不可及的梦想。我常在社交媒体上羡慕地观看朋友们的吸猫日常,却因过敏无法亲自养猫。这种遗憾驱使我寻找解决方案,从研究低过敏猫种到尝试空气…

洗地机哪款好?洗地机十大名牌排行榜

随着科技的发展,各种家居清洁工具层出不穷,为我们的生活带来了诸多便利。在众多清洁工具中,洗地机的清洁效果更受大家喜爱,它能够完美解决了扫地机无法做到的干湿垃圾“一遍清洁”效果,而且几乎能解决日常生活中所有的…

基于springboot实现交通管理在线服务系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现交通管理在线服务系统演示 摘要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装交通管理在线服…

❤ npm运行打包报错归纳

❤ 前端运行打包报错归纳 (安装依赖)Cannot read property ‘pickAlgorithm’ of null" npm uninstall //删除项目下的node_modules文件夹 npm cache clear --force //清除缓存后 npm install //重新安装 备用安装方式 npm install with --for…

调试了一下午,终于把tailwindcss搞进Blazor了

在Vue和Uniapp项目中使用tailwindcss后,实在是太香了,非常符合我这从XAML走过来的老程序员的手感,所以老想着在Blazor项目中引入。看了几个老外大佬的视频,调试了一下午,终于是捣鼓成功了。由于咱们Blazor项目不在node…

【Arthas案例】某应用依赖两个GAV不同但包含两个相同全限定类名StaticLoggerBinder,引起log4j.Level类找不到异常

3分钟内解决问题 两个不同的GAV依赖冲突,包含相同全限定类名,引起ClassNotFoundException Maven依赖的三坐标体系GAV(G-groupId,A-artifactId,V-version) 【案例1】某应用依赖两个GAV不同的jar,但包含两个相同全限定类…

java安装并配置环境

安装前请确保本机没有java的残留,否则将会安装报错 1.安装java jdk:安装路径Java Downloads | Oracle 中国 百度网盘链接:https://pan.baidu.com/s/11-3f2QEquIG3JYw4syklmQ 提取码:518e 2.双击 按照流程直接点击下一步&#x…

Json-server 的使用教程

目录 前言一、简介二、安装与配置1. 安装 node-js2. npm 镜像设置3. 安装 json-server 三、使用1. 创建本地数据源2. 启动 Json Server3. 操作数据(1)查询数据(2)新增数据(3)修改数据(4&#xf…

理解Es的DSL语法(二):聚合

前一篇已经系统介绍过查询语法,详细可直接看上一篇文章(理解DSL语法(一)),本篇主要介绍DSL中的另一部分:聚合 理解Es中的聚合 虽然Elasticsearch 是一个基于 Lucene 的搜索引擎,但…

SpringCloud跨服务远程调用

随着项目的使用者越来越多,项目承担的压力也会越来越大,为了让我们的项目能服务更多的使用者,我们不得不需要把我们的单体项目拆分成多个微服务,就比如把一个商城系统拆分成用户系统,商品系统,订单系统&…

C++笔记之一个函数多个返回值的方法、std::pair、std::tuple、std::tie的用法

C++笔记之一个函数多个返回值的方法、std::pair、std::tuple、std::tie的用法 —— 2024-06-08 杭州 code review! 文章目录 C++笔记之一个函数多个返回值的方法、std::pair、std::tuple、std::tie的用法一.从一个函数中获取多个返回值的方法1. 使用结构体或类2. 使用`std::t…

一文了解Spark引擎的优势及应用场景

Spark引擎诞生的背景 Spark的发展历程可以追溯到2009年,由加州大学伯克利分校的AMPLab研究团队发起。成为Apache软件基金会的孵化项目后,于2012年发布了第一个稳定版本。 以下是Spark的主要发展里程碑: 初始版本发布:2010年开发…

希亦、添可、石头洗地机哪款好用?2024洗地机深度测评

今年的洗地机市场竞争异常激烈,各大品牌纷纷推出了自己的旗舰产品。这对消费者来说是个好消息,因为有更多的选择空间。然而,面对如此多的优质洗地机,选择合适的一款也成了一种“幸福的烦恼”。 作为一个专业的测评人士&#xff0…

【电路笔记】-共集极放大器

共集极放大器 文章目录 共集极放大器1、概述2、等效电路3、电压增益4、偏置方法5、输入阻抗6、输出阻抗7、电流增益8、示例:共集电极放大器的电压、电流和功率增益9、达林顿对10、总结1、概述 本文介绍另一种用于放大信号的双极晶体管架构,通常称为共集电极放大器 (CCA)。 C…

【SpringBoot集成Spring Security】

一、前言 Spring Security 和 Apache Shiro 都是安全框架,为Java应用程序提供身份认证和授权。 二者区别 Spring Security:重量级安全框架Apache Shiro:轻量级安全框架 关于shiro的权限认证与授权可参考小编的另外一篇文章 : …

【AIGC】MetaGPT原理以及应用

目录 MetaGPT原理 MetaGPT应用 MetaGPT和传统编程语言相比有什么优势和劣势 视频中的PPT 参考资料 MetaGPT原理 MetaGPT是一种多智能体框架,它结合了元编程技术,通过标准化操作程序(SOPs)来协调基于大语言模型的多智能体系统…

qmt量化交易策略小白学习笔记第32期【qmt编程之获取行业概念数据--如何获取迅投行业成分股数据】

qmt编程之获取迅投行业成分股数据 qmt更加详细的教程方法,会持续慢慢梳理。 也可找寻博主的历史文章,搜索关键词查看解决方案 ! 感谢关注,咨询免费开通量化回测与获取实盘权限,欢迎和博主联系! 获取迅投…

2024全新仿麻豆视频苹果cms源码v10影视模板

下载地址:2024全新仿麻豆视频苹果cms源码v10影视模板 高端大气的设计,适合做电影、连续剧、综艺、动漫、微电影、纪录片、海外剧等视频网站