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

news2024/11/28 5:34:09

在构建现代互联网通信的基石中,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.coloradmin.cn/o/1825461.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

生产中的 RAG:使你的生成式 AI 项目投入运营

作者:来自 Elastic Tim Brophy 检索增强生成 (RAG) 为组织提供了一个采用大型语言模型 (LLM) 的机会,即通过将生成式人工智能 (GenAI) 功能应用于其自己的专有数据。使用 RAG 可以降低固有风险,因为我们依赖受控数据集作为模型答案的基础&…

建筑八大员证报名一寸彩色照片要求及手机自拍方法解读

在建筑行业,八大员证的持有者是广受尊重的专业人士。然而,要成为一名合格的八大员,首先必须通过资格审核和报名流程。其中重要的一步就是提交一寸彩色照片,以确保个人信息准确无误。那么,你是否清楚报名时照片的要求以…

【Nacos 2.3.3支持Postgre SQL数据源配置】

Nacos 2.3.3支持Postgre SQL数据源配置 1、Nacos下载2、 插件下载:3、SQL脚本获取、nacos数据库创建、插件编译4、Nacos 集群搭建方式: 1、Nacos下载 下载地址: https://download.nacos.io/nacos-server/nacos-server-2.3.2.zip 或者自行在官…

sprintboot容器功能

容器 容器功能Spring注入组件的注解Component,Controller,Service,Repository案例演示 Configuration应用实例传统方式使用Configuration 注意事项和细节 Import应用实例 ConditionalConditional介绍应用实例 ImportResource应用实例 配置绑定…

图论(一)之概念介绍与图形#matlab

图论(一)之概念介绍与图形目录 前言 一、图论介绍 二、基本概念 2.1图的概念 2.2图形分类 2.3邻接矩阵 2.3.1无向图 2.3.2有向图 2.3.3有向赋权图 2.4出度(Outdegree) 2.5入度(Indegree) 3.四种…

【微信小程序开发实战项目】——如何去申请腾讯地图账号和在微信公众平台,配置request路径和添加地图插件

👨‍💻个人主页:开发者-曼亿点 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 曼亿点 原创 👨‍💻 收录于专栏&#xff1a…

Day03 链表概念与单向不循环链表的实现

目录 1、顺序表的优缺点 2、链式存储的线性表 3、单向不循环链表实现 1、顺序表的优缺点 顺序表的优点是: 由于顺序表数据元素的内存地址都是连续的,所以可以实现随机访问,而且不需要多余的信息来描述相关的数据,所以存储密度高。 顺序表的缺点是: 顺序表的数据在进行…

windows下的eclipse按Ctrl+Shift+F格式化代码不起作用的处理

1、先上张图: 上面Format:CtrlShiftF,按了以后不起作用。 2、这个快捷键不起作用的原因:可能是快捷键冲突了。 机器上装了Sougou输入法,将输入法切换为英文模式是起作用的。 那么应该就是这个原因了。 3、解决方法…

甄嬛传熹贵妃上户口:如果让他陪你过冬天,那朕能不能睡中间?贝叶斯模型推导爸爸去哪儿

关注微信公众号 数据分析螺丝钉 免费领取价值万元的python/java/商业分析/数据结构与算法学习资料 背景 《甄嬛传》是大家耳熟能详的宫廷剧,其中复杂的宫斗情节和深刻的人物刻画让人津津乐道。甄嬛因为与皇帝(四郎)闹翻了,去甘露寺待了一段时间&#x…

【数据结构】遍历二叉树(递归思想)-->赋源码

欢迎来到我的Blog,点击关注哦💕 前言 二叉树遍历是指按照一定的顺序访问二叉树中的每个节点,使得每个节点恰好被访问一次。遍历是二叉树上最重要的运算之一,是二叉树上进行其他运算的基础。 一、二叉树遍历概念 二叉树遍历分类 …

【机器学习】LightGBM: 优化机器学习的高效梯度提升决策树

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 LightGBM: 优化机器学习的高效梯度提升决策树引言一、LightGBM概览二、核心技术…

微服务开发与实战Day08 - Elasticsearch

一、初始Elasticsearch 高性能分布式搜索引擎 1. 认识和安装 1.1 认识 Lucene是一个Java语言的搜索引擎类库,是Apache公司的顶级项目,由DougCutting于1999年研发。官网地址:Apache Lucene - Welcome to Apache Lucene Lucene的优势&…

誉天教育近期开班计划(6月15日更新)

云计算HCIP 周末班 2024/6/15 田老师 售前IP-L3 周末班 2024/6/15 陈老师 RHCA442 晚班 2024/6/17邹老师 数通HCIE 晚班 2024/6/24阮老师 云计算HCIE直通车晚班 2024/6/25 曾老师 售前IT-L3 周末班 2024/6/29 伍老师 数通HCIP 晚班 2024/7/1杨老师 存储直通车 晚班 2024/7/1 高…

【ARMv8/ARMv9 硬件加速系列 3 -- SVE 指令语法及编译参数详细介绍】

文章目录 SVE 汇编语法SVE 单通道谓词SVE 测试代码 SVE 软件和库支持SVE 编译参数配置-marcharmv8-alseprofilememtagsve2-aessve2-bitpermcryptosve2sve2-sha3sve2-sm4 SVE 汇编语法 在介绍 SVE 汇编指令语法之前,先介绍下如何判断自己所使用的芯片是否实现了SVE功…

算法01 递推算法及相关问题详解【C++实现】

目录 递推的概念 训练:斐波那契数列 解析 参考代码 训练:上台阶 参考代码 训练:信封 解析 参考代码 递推的概念 递推是一种处理问题的重要方法。 递推通过对问题的分析,找到问题相邻项之间的关系(递推式&a…

践行国产化替代,优刻得私有云勇当先锋

编辑:阿冒 设计:沐由 阳泉,十万火急! 位于太行山西麓的山西省阳泉市,是一座历史悠久、底蕴深厚、资源丰富的名城,拥有超百万常住人口,国内生产总值在2022年成功跨越千亿元大关。然而&#xff0c…

leetcode 56合并区间

思路 合并就是首先应该按照left左边界排序,排完序以后,如果i的左边界小于等于i-1的右边界,说明有重合,此时这两个可以合并,右边界应该取最大值。 代码 排序 我是定义了一个类,存储左右边界,先将数组转化…

传输层udp和tcp协议格式

UDP协议 UDP协议端格式 udp的前八个字节是报头,后面部分就是有效载荷。而目的端口号就保证了udp向应用层交付的问题。 而针对于报头和有效载荷分离是根据固定八字结的报头长度。数据的长度就是取决于报头中udp长度字段的大小来确定udp报文长度,因此也可…

【Matlab编程学习】 | matlab语言编程基础:常用图形绘制基础学习

🎩 欢迎来到技术探索的奇幻世界👨‍💻 📜 个人主页:一伦明悦-CSDN博客 ✍🏻 作者简介: C软件开发、Python机器学习爱好者 🗣️ 互动与支持:💬评论 &…

C++面向对象程序设计 - 函数库

C语言程序中各种功能基本上都是由函数来实现的,在C语言的发展过程中建立了功能丰富的函数库,C从C语言继承了些函数功能。如果要用函数库中的函数,就必须在程序文件中包含文件中有关的头文件,在不同的头文件中,包含了不…