网络通信的两大支柱: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.mzph.cn/pingmian/27878.shtml

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

相关文章

紫光展锐5G处理器T750__国产手机芯片5G方案

展锐T750核心板采用6nm EUV制程工艺,CPU架构采用了八核设计,其中包括两个主频为2.0GHz的Arm Cortex-A76性能核心和六个主频为1.8GHz的A55小核。这种组合使得T750具备卓越的处理能力,并能在节能的同时提供出色的性能表现。该核心模块还搭载了M…

L51--- 144. 二叉树的前序遍历(深搜)---Java版

1.题目描述 2.思路 二叉树的前序遍历遵循 根左右 (1)方法 preorderTraversal 输入参数: TreeNode root root是二叉树的根节点。 返回值: List 返回一个包含二叉树节点值的列表,这些值按照前序遍历的顺序排列。 功能: 这个方法是前序遍历的…

微信小程序04: 获取openId和unionId

全文目录,一步到位 1.前言简介1.1 专栏传送门1.1.1 上文小总结1.1.2 上文传送门 2. 获取openId和unionId操作2.1 准备工作2.1.1 请先复制00篇的统一封装代码2.1.2 微信登录请求dto 2.2 具体代码使用与注释如下2.2.1 业务代码2.2.2 代码解释(一)[无需复制]2.2.3 获取的map使用方…

值传递和址传递

值传递 上面的代码是想要交换x,y的值,把x,y传递给swap函数之后,执行下面的操作: 在swap中a和b交换了,但是和x,y没有关系,所以x,y在main中不会变。 址传递 下面再看把x…

2024FIC决赛

容器密码:2024Fic~Competition~Finals杭州&Powered~By~HL! 案件背景: 2023年3月15日凌晨,受害人短视频平台上看到一段近期火爆的交通事故视频,留言后有人通过私信联系,称有一个赚大钱的机会,该人自称李某,提议让…

软件工程期末复习题

目录 选择 判断 选择 下列说法中正确的是 ( B )。 A、20 世纪50 年代提出了软件工程的概念摇 B、20 世纪60 年代提出了软件工程的概念 C、20 世纪70 年代出现了客户端/ 服务器技术 D、20 世纪80 年代软件工程学科达到成熟 软件危机的主要原因是 ( D )。 A、软件工具落后…

基于STM32移植U8g2图形库——OLED显示(HAL库)

文章目录 一、U8g2简介1、特点2、U8g2的使用步骤 二、I2C相关介绍1、I2C的基本原理2、I2C的时序协议 三、OLED屏的工作原理四、汉字点阵显示原理五、建立STM32CubeMX工程六、U8g2移植1、U8g2源码2、移植过程 七、代码编写1、参考博主实现的U82G的demo例程(1&#xf…

【Linux内核】伙伴系统算法和slab分配器(1)

【Linux内核】伙伴系统算法和slab分配器(1) 目录 【Linux内核】伙伴系统算法和slab分配器(1)伙伴系统(buddy)算法伙伴系统算法基本原理内存申请内存回收 接口函数源码分析内存分配接口物理内存释放接口规范…

基于Wireshark实现对FTP的抓包分析

基于Wireshark实现对FTP的抓包分析 前言一、虚拟机Win10环境配置二、FileZilla客户端的安装配置下载FileZilla客户端安装FileZilla 三、FileZilla Server安装下载FileZilla Server安装 四、实现对FTP的抓包前置工作实现抓包完成抓包 前言 推荐一个网站给想要了解或者学习人工智…

Setapp:只需一次订阅,即可获得 240 款+ Mac 软件

为一项任务寻找合适的应用程序是一项相当艰巨的任务。过去,最好的办法要么是花费宝贵的时间搜索可靠的评论,要么就是相信无论安装什么软件都能完成任务。 如果你是 Mac 用户,那么 Setapp 将让这一问题成为过去。无需在需要时下载单个程序&am…

vue之一键部署的shell脚本和它的点.bat文件、海螺AI、ChatGPT

MENU 前言vite.config.ts的配置deploy文件夹的其他内容remote.shpwd.txtdeploy.bat 前言 1、在src同级新建deploy.bat文件; 2、在src同级新建deploy文件夹,文件夹中新建pwd.txt和remote.sh文件; 3、配置好后,直接双击deploy.bat文…

鸿蒙轻内核M核源码分析系列二一 02 文件系统LittleFS

1、LFS文件系统结构体介绍 会分2部分来介绍结构体部分,先介绍LittleFS文件系统的结构体,然后介绍LiteOS-M内核中提供的和LittleFS相关的一些结构体。 1.1 LittleFS的枚举结构体 在openharmony/third_party/littlefs/lfs.h头文件中定义LittleFS的枚举、…

在线时钟python案例

试了一下用通义来编写一些代码,以下是一个在线时钟的样例,只要能运行python就可以使用。 以下是运行后的结果。 代码(复制可用) import tkinter as tk from time import strftimedef update_time():current_time strftime(&quo…

Postman使用教程(Postman详细图文教程)

本文讲解的是postman工具安装、postman安装教程、postman工具下载、postman使用教程。Postman使得得开发人员和测试人员能够更高效地与Web服务进行交互和调试。 Postman不仅支持常见的HTTP方法,如GET、POST、PUT、DELETE等,还提供了丰富的请求编辑功能&…

20240615给飞凌的OK3588-C开发板刷Rockchip原厂的Buildroot后的测试报告

20240615给飞凌的OK3588-C开发板刷Rockchip原厂的Buildroot后的测试报告: 【切记,由于没有替换DTS的,开发板发热量巨大!因此配备鼓风机进行加强散热了】 0、adb 默认没有 1、HDMI IN 4K 2024/6/15 20:32 4K全屏 2、HDMI OUT …

Redis原理篇——分布式锁

Redis原理篇——分布式锁 分布式锁是什么?分布式锁有哪些特性?分布式锁常用实现方式Redis 实现分布式锁一、简单的 Redis 锁二、带过期时间的 Redis 锁三、加上 Owner 的 Redis 锁四、Lua 脚本确保原子性 分布式锁是什么? 分布式锁是在分布式…

软件体系结构笔记(自用)

来自《软件体系结构原理、方法与实践(第三版)》清华大学出版社 张友生编著 1-8章12章 复习笔记 如有错误,欢迎指正!!!

HCIP认证笔记(填空)

1、为防止攻击者伪造BGP报文对设备进行攻击,可以通过配置GTSM功能检测IP报文中的TTL值的范围来对设备进行保护。如果某台设备配置了“peer x.x.x.x valid-ttl-hops 100",则被检测的报文的TTL值的有效范围为【(156),255】; 解析: peer {group-name | ipv4-address…

学习cel-go了解一下通用表达语言评估是什么

文章目录 1. 前言2. cel-go2.1 cel-go关键概念Applications(应用)Compilation(编译)Expressions(表达式)Environment环境解析表达式的三个阶段 3. cel-go的使用4. cel-go使用5. 说明6. 小结7. 参考 1. 前言 最近因为在项目里面实现的一个使用和||来组合获取字段值的功能有点儿…

MySQL员工练习

MySQL员工练习 1.数据显示 员工信息表emp: 字段:员工id,员工名字,工作岗位,部门经理,受雇日期,薪水,奖金,部门编号 英文名:EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,BONUS,DEPTNO 部门信息表dept: 字段:部门编号,部门名称,部…