目录
本篇文章来分享一下TCP协议和UDP协议,在此之前先了解一下网络编程的相关知识。
1.网络编程
1.1.定义
让多台不同的设备(电脑/手机/服务器/游戏机),通过网络实现互相通信、互相传输数据的编程方式,就是网络编程。
1.2.例子
微信发消息给朋友、刷抖音看视频、打开淘宝购物、Unity 游戏登录账号、玩王者荣耀联机对战,本质都是网络编程实现的功能。
1.3.核心目的
实现不同设备之间的数据交互,打破单机限制。
2.协议
2.1.协议的本质
协议的本质就是计算机与计算机之间通信时必须共同遵守的语言和规则。
✅ 通俗类比
● 人和人沟通:要说普通话/家乡话,双方都懂才能交流,这就是沟通协议;
● 社会规则:红灯停绿灯行,司机都遵守,这是交通协议;
● 合作约定:签就业协议,甲方乙方都遵守条款,这是合作协议。
● 计算机也是同理:两台设备想传数据,必须说同一种语言,遵守同一个规则,否则就像一个说中文、一个说英文,完全无法通信。
2.2.协议的2大分类
①预定义协议
行业统一规定、全世界通用的协议,无需自己写规则,直接用即可。
● 代表:TCP、UDP、HTTP、FTP、SMTP
● 特点:通用、稳定、所有编程语言/设备都支持,开发中99%都用预定义协议。
②自定义协议
程序员自己规定的通信规则,只在自己的项目中生效。
● 例子:做Unity小游戏,约定发数字 1 = 登录、发数字 2 = 退出、发数字 3 = 提交分数,这就是自定义协议;
● 特点:灵活,但通用性差。
2.3.开发中常用预定义协议及用途
所有协议都是各司其职,没有好坏之分,只看使用场景,HTTP/FTP/SMTP都是基于TCP封装的上层协议:
1)HTTP:专门用于网页访问、APP/游戏接口请求(新浪、淘宝、京东、Unity登录/排行榜);
2)FTP:专门用于网络传输大文件(下载安装包、上传视频、游戏资源包);
3)SMTP:专门用于发送邮件(所有邮箱的发邮件功能);
4)TCP/UDP:所有协议的底层地基,是网络通信的核心,所有上层协议都基于这两个协议实现。
3.Socket(套接字)
Socket是网络编程的编程接口/工具,是程序员写代码时调用TCP/UDP协议的入口。
✅通俗理解
TCP/UDP是通信的规则,Socket是通信的管道/插座,通过Socket这个管道,按照TCP/UDP的规则,实现数据的收发。
核心结论:所有基于TCP/UDP的网络编程,本质都是Socket编程。
4.TCP协议
4.1.定义
TCP(Transmission Control Protocol,传输控制协议):是面向连接的协议。在收发数据前,必须和对方建立可靠的连接,才能传输数据;传输完成后,必须断开连接,释放资源。
✅ 通俗理解:TCP通信 = 打电话
● 打电话流程:拨号 → 对方接听(建立连接) → 互相通话(数据收发,能确认对方听到) → 说再见 → 挂电话(断开连接)
● TCP的通信逻辑和打电话完全一致,是有来有回、有始有终的通信方式,核心就是连接和可靠。
4.2.TCP的核心特性
①面向连接:收发数据的前提是建立连接,连接失败则无法通信;
②数据传输绝对可靠:保证数据不丢包、不错乱、不重复、按顺序到达,发1234必收1234,不会是1324或12;
③数据传输有序:先发的数据一定先到,后发的数据一定后到;
④系统资源占用多:需要维护连接、校验数据、重传丢失的数据包,消耗更多CPU和内存;
⑤通信性能低、速度慢:因为有连接、校验、重传等步骤,速度比UDP慢,但是胜在稳定;
⑥程序代码稍复杂:开发时需要处理连接、断开、数据校验等逻辑。
4.3.TCP的核心底层机制
● 三次握手:建立可靠连接的过程(确认双方能发、能收,通道通畅);
● 四次挥手:断开连接的过程(确认双方数据传输完毕,无遗漏,友好释放资源);
● 超时重传:如果数据包丢失,会自动重新发送,直到对方收到;
● 数据校验:对接收到的数据做验证,确保数据没有被篡改。
1)TCP三次握手
TCP三次握手是整个网络请求的第一个网络交互步骤,也是最核心的握手环节,所有HTTP/HTTPS请求的必经之路,没有这个步骤,一切都是空谈。
①核心结论
TCP三次握手是客户端和服务端建立可靠双向通信链路的过程,三次是双方确认通信正常的最少次数,不能多也不能少。
②TCP三次握手详细过程
可以理解为客户端和服务端的通话接通流程,双方互发3条确认消息,确认彼此能正常收发数据:
● 第一次握手(客户端 → 服务端):客户端主动发一条连接请求消息给服务端,内容是「我想和你建立连接,你能收到我的消息吗?」;
● 第二次握手(服务端 → 客户端):服务端收到请求后,立刻回复一条确认应答消息,内容是「我收到你的请求了,我能正常接收,我也能给你发消息,你能收到我的回复吗?」;
● 第三次握手(客户端 → 服务端):客户端收到回复后,再发一条最终确认消息,内容是「我收到你的回复了,我们的双向通信没问题,连接可以正式建立了!」;
③三次握手的核心意义
● 目的:确认客户端能发、服务端能收、服务端能发、客户端能收 → 双方的收/发通道都完全通畅;
● 少一次都不行:如果只有2次握手,服务端无法确认客户端是否能收到自己的消息,可能建立单向连接,传输数据会丢失;
● 这是TCP协议的可靠传输核心保障,也是区别于UDP协议的关键(UDP无握手,不可靠)。
④此阶段的常见问题
● 握手超时:客户端发了请求,但等了很久没收到服务端的回复 → 报错Connection Timeout 连接超时;
● 握手失败:服务端无响应 → 报错Connection Refused连接被拒绝(大概率是服务器宕机、端口错误、防火墙拦截);
● 网络不通:客户端连不上服务端 → 报错No Internet Connection无网络连接;
2)TCP四次挥手
当请求和响应的所有数据都传输完成后,必须断开之前建立的TCP连接,释放双方的网络资源(端口、内存),这个过程就是TCP四次挥手,是TCP三次握手的逆过程,所有请求的必经步骤。
①核心结论
TCP 四次挥手是客户端和服务端友好的断开连接的过程,四次是双方确认数据传输完毕、无遗漏的最少次数,确保双方都不会再发数据,不会丢失数据。
②TCP四次挥手
可以理解为通话结束,双方确认挂断电话,互发4条断开消息,确认彼此都没有数据要发了:
● 第一次挥手(客户端 → 服务端):客户端先发消息「我这边的数据已经全部传输完了,我要关闭我的发送通道,你准备收尾吧」;
● 第二次挥手(服务端 → 客户端):服务端收到后回复「我收到你的断开请求了,我知道你不发数据了,我这边还有点收尾工作,你等我一下」;此时客户端的发送通道关闭,只能收数据,不能发数据;服务端还能正常收发;
● 第三次挥手(服务端 → 客户端):服务端收尾完成后,再发消息「我这边的数据也全部传输完了,我的发送通道也关闭了,我们可以正式断开了」;
● 第四次挥手(客户端 → 服务端):客户端收到后回复「我收到你的确认了,那我就关闭我的接收通道,连接正式断开」;此时双方的收发通道全部关闭,TCP连接彻底断开,资源释放。
③四次挥手的核心意义
● TCP是双向通信,客户端和服务端都有发送通道和接收通道,断开连接时需要分别关闭双方的两个通道,所以需要4次交互;
● 如果强行断开连接(比如客户端直接断网),会导致半开连接,服务端会一直占用资源,直到超时释放。
5.UDP协议
5.1.标准定义
UDP(User Datagram Protocol,用户数据报文协议):是无连接的协议。传输数据前,源端和终端不需要建立任何连接;想传数据时,直接抓取数据,尽可能快的扔到网络上即可,发完即结束。
✅ 通俗理解:UDP通信 = 发短信
●发短信流程:编辑短信 → 直接发送(无需对方同意) → 发送完成(不管对方是否收到、是否在线)
●UDP的通信逻辑和发短信完全一致,是无拘无束、无始无终的通信方式,核心就是无连接和极速。
5.2.UDP的核心特性
①面向无连接:无需建立连接,直接发送数据,是UDP最核心的特点;
②数据传输不可靠:不保证数据送达,可能丢包、可能乱序、可能重复,发1234可能收124、1324,甚至收不到;
③数据传输无序:无序,先发的数据可能后到,后发的数据可能先到;
④系统资源占用极少:无需维护连接、无需校验数据,消耗的CPU和内存极少;
⑤通信性能极高、速度极快:没有多余步骤,数据发出去就完事,速度是UDP最大的优势,比TCP快很多;
⑥程序代码简单:开发时无需处理连接和断开,只需写发送/接收逻辑即可。
6.TCP和UDP的核心区别
| 对比维度 | TCP协议 | UDP协议 | 重点 |
| 连接性(核心) | 面向连接,必须先建连 | 无连接,直接发数据 | TCP要连接,UDP不连接 |
| 数据可靠性(核心) | 绝对可靠,不丢包、不错序 | 不可靠,可能丢包、乱序 | TCP保数据,UDP不保 |
| 传输速度(核心) | 速度慢,性能低 | 速度极快,性能高 | TCP慢,UDP快 |
| 数据顺序性 | 保证顺序,先发先到 | 不保证顺序,可能乱序 | TCP有序,UDP无序 |
| 系统资源占用 | 占用多(内存/CPU) | 占用少,开销极小 | TCP耗资源,UDP省资源 |
| 程序代码复杂度 | 稍复杂 | 简单易懂 | TCP代码多,UDP代码少 |
7.TCP和UDP的适用场景
7.1.TCP的适用场景
● 只要数据丢失会影响业务、造成错误,哪怕慢一点也要保证可靠,全部用TCP:
● 账号登录、注册、提交表单(Unity游戏/手机APP);
● 网页访问(新浪、淘宝、京东)、网络请求接口;
● 微信/QQ文字消息、转账支付、订单提交(金融类,绝对不能丢数据);
● 所有需要确认对方收到数据的场景,90%开发场景用TCP;
● 文件下载/上传(FTP协议)、邮件发送(SMTP协议)。
7.2.UDP的适用场景
● 只要数据本身允许少量丢失,丢一点不影响使用体验,速度优先,全部用UDP:
● 网络游戏实时对战(王者荣耀、和平精英):人物移动、技能释放,丢1-2帧数据,玩家完全感知不到,用TCP会卡顿;
● 视频直播、在线点播(抖音、B站):视频流丢一点数据,画面只会短暂花屏,马上恢复,用TCP会缓冲卡顿;
● 语音/视频通话(微信语音、钉钉会议):语音丢一点数据,只会有短暂杂音,用TCP会有高延迟、回音;
● 广播消息(游戏全服公告、群发短信):发给大量设备,丢几条没关系,保证大部分收到即可。
7.3.总结
数据不能丢,要安全,选TCP; 速度要最快,丢点没关系,选UDP。
好了,本次的分享到这里就结束啦,希望对你有所帮助~

1543

被折叠的 条评论
为什么被折叠?



