IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 阿里面试官常问问题,TCP和UDP的区别,你真的弄懂了吗? -> 正文阅读

[网络协议]阿里面试官常问问题,TCP和UDP的区别,你真的弄懂了吗?

?

作为一个软件测试,我们都知道一些常用的网络协议是必须被我们理解和掌握的。面试的时候,面试官也喜欢问一些协议相关的问题,包括TCP和UDP这两个协议,出现的频率很高,因为都很基础。因为两种协议都在传输层,所以它们经常被用于比较。

然后,要知道它们之间的区别,我们首先需要知道这两个协议的具体实现原理。



TCP协议
TCP,全称是传输控制协议,顾名思义,就是在一定程度上控制数据的传输。
众所周知,当一个网络消息传输到传输层时,它会封装传输层的一个数据头,所以作为传输层协议,TCP也会封装一个TCP协议头。这个报头中包含的信息实际上代表了这个协议能做什么。的TCP标头如下图所示:

?

?

让我们解释一下里面每个字段的含义:
源端口号/目的端口号:TCP协议的端口用来唯一区分上层应用协议,可以帮助找到计算机的应用程序,明确数据来自哪个应用进程,传输到哪个应用进程。
每个应用层协议都有一个专用端口,比如我们熟悉的一些协议。http协议的端口是TCP端口80,https协议的端口是TCP端口443,SSH协议的端口是TCP端口22,DNS协议是TCP端口53,FTP协议是TCP端口20/21等等。
序号:如果TCP数据太大,需要在网络中分段。这个序列号记录了每个数据包的序列号,这使得接收方可以正确地重组TCP数据。因此,每个TCP消息都会携带一个序列号。
确认号):TCP协议确认主机确实收到了我们客户端发送的数据包数据,数据传输可靠。当然,我们的客户希望收到主机的确认,这也是这个确认号的目的。当客户端收到该确认码时,它可以确认之前发送的数据包已被正确接收。该确认号本身的编号是预期从另一方接收的下一个消息段的数据的序列号。
代码控制标志:状态控制代码有六个标志字段,即U、A、P、R、S和f。这些标志位用于标记该消息的类型:
确认:确认位,当确认= 1时,表示该包为确认包,确认号有效;当ack = 0时,确认号无效。
RST: Reset位(Reset),当rst = 1时,表示TCP连接出现严重错误(如主机崩溃或其他原因),需要释放连接后重新建立传输连接。
SYN:synchronized,SYN=1,表示这是连接请求或连接接受消息。通常,带有SYN标记的数据包意味着“主动”连接到另一方。
FIN: Final,用于释放连接。当fin = 1时,表示该段发送方的数据已经发送,需要释放传输连接。
这些报头字段实际上是用来为TCP协议建立连接和断开链路的,所以我们来介绍一下为TCP协议建立链路的过程。


TCP的三次握手
如果要在两台主机之间发送消息,如果底层基于TCP协议,则必须首先建立TCP链路。tcp连接建立的过程,也就是大家熟悉的TCP三次握手的过程,如下图所示:

?


在尝试建立连接之前,客户端和服务器都处于关闭状态。
第一次握手:客户端将标志SYN设置为1,随机生成一个值作为序列号:seq=J,并将数据包发送给服务器。客户端进入SYN _ SENT状态,等待服务器确认;
第二次握手:服务器收到数据包后,知道是客户端请求建立连接的消息,因为标志位SYN=1,所以服务器会给出响应:将标志位SYN和ACK设置为1,确认号ack=J+1,随机生成一个值序号seq=K,将数据包发送给客户端确认并同意连接请求。此时,服务器进入SYN_RCVD状态;
三次握手:客户端收到确认消息后,检查确认号ack是否为J+1,ack标志位是否标记为1。如果正确,它将标志位ACK设置为1,确认号ack=K+1,并将数据包发送到服务器。服务器检查确认是否为K+1,确认位是否标记为1。如果正确,则连接成功建立。客户端和服务器进入建立状态,完成三次握手,客户端和服务器之间的数据传输就可以开始了。


TCP的四次握手
当客户端和服务器之间的数据传输完成后,双方可以释放连接。此时,客户端和服务器都处于“已建立”状态,然后客户端主动断开,服务器被动断开,每个方向都必须单独关闭,因此要断开链路,需要四次挥动TCP:

?

第一波:客户端发送完所有数据后,会发送一条标签为FIN=1,序列号为seq=n的消息,用于关闭客户端的数据传输,客户端进入FIN_WAIT_1状态。
第二波:服务器收到FIN pACKet后,向客户端发送ack,序列号+1,服务器进入CLOSE_WAIT状态。
第三波:服务器发送FIN=1,seq=m,关闭从服务器到客户端的数据传输,服务器进入LAST_ACK状态。
第四波:客户端收到FIN后,进入TIME_WAIT状态,向服务器发送序列号为m+1的ACK,服务器进入CLOSED状态,完成四波。


UDP协议
UDP协议,全称用户数据报协议,用户数据报协议。让我们来看看这个协议的报头信息:

?

从报头信息可以看出,udp比tcp少很多,只有一个源端口号/目的端口号,这里的功能和TCP一样。那么,至于TCP的序列号、确认号、状态码等等,就没有了。那么,UDP是如何建立连接的呢?
请注意,UDP没有连接,它是一种无连接的传输层协议。所以UDP协议的应用一般都要允许一定的丢包和错误,这也是他的一个特点:不注重可靠性,只注重速度!
那么哪些应用不需要可靠的机制,而只关注性能和速度呢?
例如,流媒体、即时多媒体游戏和IP电话(VoIP)将被UDP协议封装。因为不需要连接,所以具有资源消耗低,处理速度快的优点。如果音频、视频和偶尔在传输过程中丢失几个数据包,对接收结果不会有太大影响,所以会被UDP协议封装。
常见协议:域名系统(DNS)、简单网络管理协议(SNMP)、动态主机配置协议(DHCP)、路由信息协议(RIP)等。


TCP和UDP协议的比较
连接区别:TCP是面向连接的(例如,拨打电话前先建立连接),UDP是无连接的,即发送数据前不需要建立连接。
安全性上的差异:TCP提供可靠的服务,通过TCP连接传输的数据无差错、不丢失、不重复、有序到达;UDP尽可能地提供最好的服务,也就是说,不能保证可靠的服务。
传输效率差异:TCP传输效率相对较低,UDP效率较高。

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-11-17 13:06:20  更:2021-11-17 13:07:28 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年7日历 -2024/7/3 21:40:52-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码