计算机网络:(十三)传输层(中)用户数据报协议 UDP 与 传输控制协议 TCP 概述
- 前言
- 一、UDP是什么?
- 二、UDP有哪些特点
- 三、UDP的传输流程
- 四、UDP的首部格式
- [五、传输控制协议 TCP 概述](#五、传输控制协议 TCP 概述)
-
- [1. TCP到底是什么?](#1. TCP到底是什么?)
- [2. TCP最主要的特点](#2. TCP最主要的特点)
- [3. TCP的连接是什么?](#3. TCP的连接是什么?)
前言
- 前面的博客里我们简单讲解了传输层的基本概念
- 接下来我们讲解用户数据报协议 UDP 与 传输控制协议 TCP 概述
我的个人主页,欢迎来阅读我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343我的计算机网络专栏,欢迎来阅读
https://blog.csdn.net/2402_83322742/category_12909527.html
一、UDP是什么?

- UDP的全名叫"用户数据报协议",它是网络世界里负责传递数据的一种"规则"。
简单说,UDP是在IP协议的基础上,稍微加了一点功能。
IP协议就像快递行业的"基础运输能力"(比如卡车运输),能把包裹从一个城市送到另一个城市,但它不管包裹里装的是啥、该送给这个城市里的哪户人家。而UDP就像在IP的基础上,加了两个小功能:
- 第一个功能:"区分门牌号"(专业名叫"复用和分用")。比如一个电脑上同时开着微信、抖音、游戏,UDP能分清哪份数据是给微信的,哪份是给抖音的,不会送错;
- 第二个功能:"检查包裹坏没坏"(专业名叫"差错检测")。就是看看数据在传输过程中有没有被弄坏(比如信号干扰导致数据错乱),如果坏了就直接扔掉,不往下传了。
二、UDP有哪些特点
特点1:无连接
- 平时我们发消息前,可能会先问一句"在吗?",等对方回复了再发内容。但UDP不这样:发送数据前不需要"建立连接",想发就直接发。
这带来的好处是:省时间、省资源。不用花时间确认对方"在不在",所以发送数据的延迟特别低。
特点2:尽最大努力交付,不保证可靠
- UDP发送数据时,只负责"尽力把数据送出去",但不保证一定能送到对方手里,也不保证数据到了之后是完整的、顺序对的。
比如你用UDP发了3句话:"你好""吃了吗""再见",对方可能只收到"你好"和"再见"(中间"吃了吗"丢了),或者收到的顺序是"再见""你好"(顺序乱了)。
这看起来是个缺点,但也有好处:主机不用记太多"连接状态"(比如不用记"对方有没有收到第2句话"),省内存、省算力。
特点3:面向报文
- "面向报文"是说:UDP对应用程序(比如微信、游戏)交给它的数据,不拆也不合并,原封不动地传。
比如应用程序给了UDP一个1000字节的"报文"(可以理解为"一段完整的数据"),UDP就直接在这个报文前面加个"UDP头部"(相当于给数据贴个标签),然后发出去;如果应用程序分两次给了两个500字节的报文,UDP也会分两次发,不会把两个合并成一个。
到了接收端,UDP也会原样把报文交给应用程序,不会打乱原来的"段落"。
特点4:没有拥塞控制
- 网络就像公路,有时候会堵车(比如太多设备同时发数据)。
- TCP协议遇到堵车会放慢速度(就像司机看到堵车会减速),但UDP不会:不管网络堵不堵,它都按原来的速度发数据。
这在实时场景里特别有用,比如视频通话、直播、打游戏:如果为了"不堵车"而放慢速度,画面就会卡顿、声音就会延迟,体验会很差。UDP宁愿偶尔丢点数据(比如视频卡一下),也不放慢速度,保证实时性。
特点5:支持多种交互方式
UDP很灵活,支持:
- 一对一:比如你给朋友发一条UDP消息;
- 一对多:比如老师用直播软件给全班同学发视频(一个 sender 发给多个 receiver);
- 多对一:比如多个传感器同时给服务器发数据;
- 多对多:比如多人在线游戏里,大家的操作数据互相传输。
特点6:首部开销小
UDP给数据贴的"标签"(也就是"首部")很小,只有8个字节;而另一种常用的协议TCP的首部有20个字节。
"首部开销小"的好处是:数据传输时,"标签"占的比例少,真正有用的数据能更快传完,效率更高。
三、UDP的传输流程

刚才说了UDP"面向报文",不拆不合并,那它具体是怎么把数据从发送端传到接收端的呢?我们可以把它想象成"套盒子"和"拆盒子"的过程:
发送时:
- 应用程序先准备好一个"报文"(比如一段文字、一帧视频);
- UDP给这个报文套个"UDP盒子"(就是加个UDP首部),变成"UDP用户数据报";
- 然后交给IP协议,IP再套个"IP盒子"(加IP首部),变成"IP数据报";
- 最后交给底层的网络设备(比如路由器),再套个"帧盒子"(加帧首部),变成"帧",然后通过网线、无线信号等传出去。
就像快递:商品(报文)→ 套个快递袋(UDP首部)→ 套个快递箱(IP首部)→ 贴个物流面单(帧首部)→ 运输。
接收时:
流程反过来:
- 接收端先收到"帧",拆掉"帧盒子"(去掉帧首部),得到"IP数据报";
- 拆掉"IP盒子"(去掉IP首部),得到"UDP用户数据报";
- 拆掉"UDP盒子"(去掉UDP首部),得到原来的"报文";
- 最后把报文交给对应的应用程序(比如微信、游戏)。
就像收快递:收到包裹→拆物流面单→拆快递箱→拆快递袋→拿到商品。
四、UDP的首部格式

- UDP的"首部"(就是那个8字节的标签)虽然小,但信息很关键,分成4个部分,每个部分占2个字节(总共2+2+2+2=8字节)。我们一个个来看:
字段名 | 作用 |
---|---|
源端口 | 相当于"发件人的门牌号"。如果对方需要回信(比如你发消息后希望对方回复),就填你的端口号;不需要回信的话,可以填0(表示"不用回")。 |
目的端口 | 相当于"收件人的门牌号"。必须填对,不然数据不知道该交给接收端的哪个应用程序(比如填微信的端口号,数据就会交给微信)。 |
长度 | 表示整个"UDP用户数据报"的大小(包括首部+数据)。最小是8字节(也就是只有首部,没有数据)。 |
检验和 | 相当于"校验码"。用来检查数据在传输过程中有没有被弄坏(比如被干扰导致数据错乱)。如果检查出有错,就直接把这个UDP包扔掉,不交给应用程序。 |
举个例子:你用UDP给朋友发消息,"源端口"是你手机上聊天软件的端口号,"目的端口"是你朋友手机上聊天软件的端口号,"长度"是消息内容+首部的总大小,"检验和"用来保证消息没传错。
五、传输控制协议 TCP 概述
1. TCP到底是什么?
TCP的全名叫"传输控制协议",和之前讲的UDP一样,都是网络里负责传递数据的"规则"。但TCP的"性格"和UDP完全不同------如果说UDP是"随性直接"的急性子,那TCP就是"严谨靠谱"的老好人。

TCP最核心的作用是:在不靠谱的网络上,保证数据能"稳稳当当"地送到对方手里。比如我们平时发邮件、传文件、刷网页,都离不开TCP,因为这些场景里,"数据不能丢、不能错"比"速度快"更重要。
2. TCP最主要的特点
特点1:面向连接
和UDP"不打招呼直接发"不同,TCP发送数据前必须先"建立连接",就像打电话:
- 你拨号(发起连接请求)→ 对方接电话(同意连接)→ 你们确认"能听到彼此"(连接建立成功)→ 才开始聊天;
- 聊完后还要"挂电话"(断开连接),才算结束。
这种"先连接再通信"的方式,虽然比UDP多了一步流程,但能保证双方"都在线、都准备好接收数据",为后续的"可靠传输"打基础。
特点2:点对点连接
TCP很"专一":一条TCP连接只能连接两个端点,而且只能"一对一"通信。
比如你用TCP给朋友发消息,这条连接就只在你和朋友之间;如果想同时给多个人发,就得建立多条TCP连接(比如你和A一条,你和B另一条)。这和UDP支持"一对多""多对多"完全不同。
特点3:可靠交付
这是TCP最核心的特点------它能保证数据"不丢、不错、不重复"地送到对方手里。
比如你用TCP发三句话:"1""2""3",对方一定会收到完整的"1、2、3",不会少一个,也不会变成"3、1、2"。怎么做到的?
- 发送后会等对方"确认收到",没收到就重发(解决"丢数据");
- 给每个数据标上序号,对方按序号整理(解决"顺序错");
- 检查数据是否被篡改,错了就重发(解决"数据错")。
这种"靠谱"的代价是:比UDP复杂,传输速度会慢一点(因为要花时间确认、重发)。
特点4:全双工通信
"全双工"就是指:TCP连接建立后,通信双方可以同时给对方发数据,就像打电话时,你说话的同时对方也能说话,不用等你说完。
比如你和朋友视频通话(用TCP的话),你发画面的同时,也能收到对方的画面,两边互不影响。
特点5:面向字节流
这个特点和UDP的"面向报文"完全相反,也是最容易理解错的地方。我们拆开来讲:
什么是"字节流"?
"流"可以理解成"源源不断的字节(0和1组成的二进制数据)"。比如你用微信发消息,"你好呀"这三个字在电脑里是一串字节(假设是100个字节),TCP会把这串字节看成"没有固定分段的水流",而不是"一个不可拆分的整体"。
TCP怎么处理"字节流"?(发送和接收流程)
-
发送端 :
应用程序(比如微信)可能分多次给TCP发数据(比如先给50字节,再给80字节),TCP会把这些数据全都放进一个"发送缓存"(相当于一个临时仓库),合并成一整个"字节流";
然后TCP会根据网络情况(比如一次能传多少数据),把字节流分成一段一段,每段加上"TCP首部"(标签),变成"TCP报文段",再发出去。
简单说:TCP不管应用程序"一次发多少",它只关心"整体的字节流",然后自己决定怎么分段发送。
-
接收端 :
收到TCP报文段后,会先放进"接收缓存",按顺序拼回完整的字节流;
应用程序再从接收缓存里读取数据(可以一次读100字节,也可以分多次读)。
简单说:接收端的TCP会先把分段的数据拼好,再原原本本地交给应用程序,保证应用程序拿到的是完整、有序的字节流。
和UDP"面向报文"的区别?
UDP是"应用程序给什么,就原样发什么"(不合并、不拆分);
TCP是"应用程序给多少,都合并成流,自己拆分着发"(灵活分段)。
3. TCP的连接是什么?

我们总说"建立TCP连接",那这个"连接"到底是啥?不是物理上拉了一根线,而是逻辑上的"通信通道",就像两个人打电话时,"能互相听到、能传递声音"的状态就是一种"连接"。
连接的"端点":套接字(socket)

要建立连接,首先得明确"谁和谁连"。TCP用"套接字"(也叫"插口")来标记连接的两个端点。
-
套接字的定义 :
套接字 = (IP地址 : 端口号)
比如你的电脑IP是192.168.1.100,用微信(端口号假设是5000)和朋友聊天,那你的套接字就是
(192.168.1.100 : 5000)
。 -
为什么需要套接字?
IP地址能确定"哪台电脑",端口号能确定"这台电脑上的哪个应用程序"(比如微信、浏览器、游戏,每个应用都有自己的端口号)。
套接字就像"详细地址+门牌号":IP是"北京市朝阳区XX街"(哪台电脑),端口号是"101室"(哪个应用),合起来就能精准定位"要和谁通信"。
一条TCP连接由什么确定?
一条TCP连接,唯一由两端的套接字决定 。公式是:
TCP连接 = { socket1, socket2 } = { (IP1:端口1), (IP2:端口2) }
比如:
- 你的套接字是
(192.168.1.100 : 5000)
; - 朋友的套接字是
(10.0.0.5 : 6000)
; - 那你们的TCP连接就是
{ (192.168.1.100:5000), (10.0.0.5:6000) }
。
关于连接的几个关键点
- TCP连接是"逻辑的":不是真的有一根线连在两台电脑之间,而是双方的协议软件共同维护的一种"通信状态"(比如记录"发了多少数据""对方收到多少")。
- 一个IP可以有多个连接:比如服务器的IP是202.100.1.1,它可以同时和你的电脑、我的手机建立TCP连接(用不同的端口号区分)。
- 一个端口可以有多个连接:比如服务器的80端口(网页服务专用),可以同时和多个浏览器建立连接(因为对方的IP和端口不同,所以连接是唯一的)。
以上就是本篇博客的全部内容,下一篇我们继续探讨计算机网络里面的知识。
我的个人主页,欢迎来阅读我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343我的计算机网络专栏,欢迎来阅读
https://blog.csdn.net/2402_83322742/category_12909527.html
|------------------------------------|
| 如果您觉得内容对您有帮助,欢迎点赞收藏,您的支持是我创作的最大动力! |
