阿里面试官常问的TCP和UDP,你真的弄懂了吗?

♥  前  言

作为软件测试,大家都知道一些常用的网络协议是我们必须要了解和掌握的,面试的时候面试官也非常喜欢问一些协议相关的问题,其中有两个协议因为非常基础,出现的频率非常之高,分别是 ”TCP 协议“ 和 ”UDP 协议“。因为它们两个协议都处于传输层,所以两个协议经常被用来做比较。

那么要知道它们之间的区别,我们就先需要了解清楚这两个协议的具体实现原理。

TCP 协议

TCP 协议,全称是 Transmission Control Protocol,传输控制协议, 顾名思义,就是要对数据的传输进行一定的控制。

如大家了解的那样,网络报文传输到传输层的时候,会给数据封装一个传输层的头部,所以 TCP 作为一个传输层的协议,也会封装一个 TCP 协议的头部,这个头部包含什么信息,其实就代表着这个协议可以进行哪些工作。TCP 的头部如下图所示:

图片

如果你想学习自动化测试,我这边给你推荐一套视频,这个视频可以说是B站播放全网第一的自动化测试教程,同时在线人数到达1000人,并且还有笔记可以领取及各路大神技术交流:798478386   

【已更新】B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)_哔哩哔哩_bilibili【已更新】B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)共计200条视频,包括:1、接口自动化之为什么要做接口自动化、2、接口自动化之request全局观、3、接口自动化之接口实战等,UP主更多精彩视频,请关注UP账号。https://www.bilibili.com/video/BV17p4y1B77x/?spm_id_from=333.337.search-card.all.click我们来给大家解释一下里面的每个字段的意义:

源端口号/目的端口号:TCP 协议的端口是用来唯一区分上层应用协议的,可以帮助找到电脑的应用程序,明确出来数据从哪个应用进程进来, 传到哪个应用进程去。

每个应用层协议都有一个专属的端口,比如我们比较熟悉的一些协议,http 协议的端口就是 TCP 的 80 端口,https 协议的端口就是 TCP 协议的 443 端口,SSH 协议的端口就是 TCP 协议的 22 端口,DNS 协议就是 TCP 协议的 53 端口,FTP 协议就是 TCP 的 20/21 端口等等。

序号(Sequence Number):如果 TCP 数据太大时,在网络中需要就得要进行分段。这个序号就是记录每个封包的序号,可以让接收端重新将 TCP 的数据正确的组合起来。所以,TCP 的每个报文都会带上一个序号。

确认号(Acknowledge Number):TCP 协议为了可靠的进行数据传输,确认主机端确实有收到我们 client 端所送出的封包数据,我们 client 端当然希望能够收到主机方面的收到确认,那就是这个 Acknowledge Number 的用途了。当 client 端收到这个确认码时,就能够确定之前传递的封包已经被正确的收下了。这个确认号的号码本身是期望收到对方的下一个报文段的数据的序号。

状态控制码(Code Control Flag):状态控制码有六个标志位字段,分别是 U、A、P、R、S、F,这几个标志位就是用来标记这个报文的类型:

ACK:确认位(Acknowledge),当 ACK=1 时代表这个封包为确认包,确认号才是有效的;当 ACK=0 时,确认号无效。

RST:复位比特(Reset) ,当 RST=1 时,表明 TCP 连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。

SYN:同步(Synchronous),SYN=1,就表示这是一个连接请求或连接接受报文,通常带有 SYN 标志的封包表示『主动』要连接到对方的意思。

FIN:终止(Final),用来释放一个连接。当 FIN=1 时,表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。

以上这些头部字段,其实都是用来为 TCP 协议建立连接和断开链接使用的,所以我们接下来给大家介绍一下 TCP 协议建立链接的过程。

TCP 的三次握手

如果两个主机的之间要发消息,如果底层基于的是 TCP 协议,那就要先建立 TCP 的链接。TCP 建立连接的过程,也就是大家比较熟悉的的 tcp 三次握手的过程,如下图所示:

图片

 在尝试建立连接之前, 客户端和服务器都处于 CLOSE 状态。

第一次握手:Client 将标志位 SYN 置为 1,随机产生一个值作为序号:seq=J,并将该数据包发送给 Server,Client 进入 SYN_SENT 状态,等待 Server 确认;

第二次握手:Server 收到数据包后,由于标志位 SYN=1,知道是 Client 请求建立连接的报文,所以,Server 会给出回应:将标志位 SYN 和 ACK 都置为 1,确认号 ack=J+1,随机产生一个值序号 seq=K,并将该数据包发送给 Client,表示确认并同意连接请求。此时 Server 进入 SYN_RCVD 状态;

第三次握手:Client 收到确认报文后,检查确认号 ack 是否为 J+1,ACK 标记位是否标记为 1,如果正确则将标志位 ACK 置为 1,确认号为 ack=K+1,并将该数据包发送给 Server,Server 检查 ack 是否为 K+1,ACK 位是否标记为 1,如果正确则连接建立成功,Client 和 Server 进入 ESTABLISHED 状态,完成三次握手,随后 Client 与 Server 之间可以开始传输数据了。

TCP 的四次握手

当客户端和服务器双方数据传输完毕后,双方都可以释放连接。此时客户端和服务器都是处于 ESTABLISHED 状态,然后客户端主动断开连接,服务器被动断开连接,而且每个方向都必须要单独进行关闭,所以断开链接,就需要进行 TCP 的四次挥手:

图片

 

第一次挥手:Client 发送完毕了所有的数据,就会发送一个标记位 FIN=1 的报文,序号 seq=n,用来关闭 Client 的数据传送,Client 进入 FIN_WAIT_1 状态。

第二次挥手:Server 收到 FIN 包后,发送一个 ACK 给 Client,序号为收到序号 +1,Server 进入 CLOSE_WAIT 状态。

第三次挥手:Server 发送一个 FIN=1 ,seq=m,用来关闭 Server 到 Client 的数据传送,Server 进入 LAST_ACK 状态。

第四次挥手:Client 收到 FIN 后,Client 进入 TIME_WAIT 状态,发送 ACK 给 Server,序号为 m+1,Server 进入 CLOSED 状态,完成四次挥手。

UDP 协议

UDP 协议,全称 User Datagram Protocol ,用户数据报协议。我们同样来看一下 这个协议的头部信息:

图片

 

从头部信息可以看到,udp 比 tcp 少很多东西,只有一个源端口号/目的端口号,这里的作用跟 TCP 协议的端口是一样的。然后,至于 TCP 的序号,确认号,状态码等它都没有,那么,UDP 怎么建立连接呢?

此处注意的是,UDP 没有连接,它是一种无连接的传输层协议。所以使用 UDP 协议的的应用一般必须允许一定量的丢包、出错,这也是他的一个特点:不重视可靠,只重视速度

那么有哪些应用不需要可靠机制,只看重性能和速度呢?

比如流媒体、即时多媒体游戏和 IP 电话(VoIP),就会采用 UDP 协议来封装,因为他不需要连接,因而具有资源消耗小,处理速度快的优点,音频、视频和在传送时偶尔丢失几个数据包,也不会对接收结果产生太大影响的,就会选择 UDP 协议来封装。

常用协议:域名系统(DNS)、简单网络管理协议(SNMP)、动态主机配置协议(DHCP)、路由信息协议(RIP)等等。

TCP 协议和 UDP 协议的对比

连接方面区别:TCP 面向连接(如打电话要先拨号建立连接),UDP 是无连接的,即发送数据之前不需要建立连接。

安全方面的区别:TCP 提供可靠的服务,通过 TCP 连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP 尽最大努力交付,即不保证可靠交付。

传输效率的区别:TCP 传输效率相对较低,UDP 效率高。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/46595.shtml

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

相关文章

漏洞指北-VulFocus靶场专栏-中级03

漏洞指北-VulFocus靶场专栏-初级03 中级009 🌸gxlcms-cve_2018_14685🌸step1:安装系统 密码rootstep2 进入后台页面 账号密码:admin amdin888step3 查看详细 有phpinfo() 中级010 🌸dedecms-cnvd_2018_01221&#x1f3…

2023国赛数学建模C题思路模型代码 高教社杯

本次比赛我们将会全程更新思路模型及代码,大家查看文末名片获取 之前国赛相关的资料和助攻可以查看 2022数学建模国赛C题思路分析_2022国赛c题matlab_UST数模社_的博客-CSDN博客 2022国赛数学建模A题B题C题D题资料思路汇总 高教社杯_2022国赛c题matlab_UST数模社…

TypeError: Object of type int64 is not JSON serializable

TypeError: Object of type int64 is not JSON serializable 这个错误通常意味着你试图将一个Python对象转换为JSON,但是这个对象不能被序列化为JSON。在你的情况下,错误发生在尝试将一个int64类型的对象转换为JSON时。 在Pandas中,当你使用…

《游戏编程模式》学习笔记(五)原型模式 Prototype Pattern

原型的定义 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 举个例子 假设我现在要做一款游戏,这个游戏里有许多不同种类的怪物,鬼魂,恶魔和巫师。这些怪物通过“生产者”进入这片区域,每种敌人…

element文本域禁止手动拉伸、两种方式、textarea

文章目录 style方式element自带的禁止拉伸方法建议 style方式 html <el-inputv-model"content":rows"3"class"r_n"type"textarea"maxlength"40"placeholder""style"height: 100%;" />css style…

等保测评--安全计算环境--测评方法

安全子类--身份鉴别 a)应对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换; 一、测评对象 终端和服务器等设备中的操作系统(包括宿主机和虚拟机操作系统) 、网络设备(包括虚拟网络设备)、安全设备(包括虚拟安全设备)、移动终端…

Qt多线程开启定时任务

项目场景&#xff1a; 多线程执行一些耗时操作&#xff0c;并且需要固定时间去轮询。 代码&#xff1a; #include <QThread> #include <QTimer> #include <QtCore/QMutex>class pollingManager : public QObject {Q_OBJECTpublic:static pollingManager*get…

Linux 桌面版关闭GUI桌面环境

持久打开和关闭 通过CtrlAltF1-F6快捷键进入命令行界面 执行以下命令&#xff0c;持久关闭Ubuntu桌面版的GUI环境&#xff1a; sudo systemctl set-default multi-user.target执行以下命令&#xff0c;持久开启Ubuntu桌面版的GUI环境 通过CtrlAltF7快捷键进入GUI界面 sudo s…

Android Studio 之 Android 中使用 HanLP 进行句子段落的分词处理(包括词的属性处理)的简单整理

Android Studio 之 Android 中使用 HanLP 进行句子段落的分词处理&#xff08;包括词的属性处理&#xff09;的简单整理 目录 Android Studio 之 Android 中使用 HanLP 进行句子段落的分词处理&#xff08;包括词的属性处理&#xff09;的简单整理 一、简单介绍 二、实现原理…

派森 #P122. 峰值查找

描述 给定一个长度为n的列表nums&#xff0c;请你找到峰值并返回其索引。数组可能包含多个峰值&#xff0c;在这种情况下&#xff0c;返回任何一个所在位置即可。 &#xff08;1&#xff09;峰值元素是指其值严格大于左右相邻值的元素。严格大于即不能有等于&#xff1b; &…

Unity 之 RaycastHit(存储射线投射操作)

文章目录 总述具体使用场景 总述 RaycastHit 类是 Unity 中的一个结构&#xff0c;用于存储射线投射操作的结果。射线投射是一种常用的技术&#xff0c;用于检测场景中的碰撞、获取碰撞点、获取碰撞对象的信息等。RaycastHit 提供了关于射线与场景中对象的交互信息&#xff0c…

Vue3中ref和reactive的使用

今天在项目中使用reactive过程中出现变量无法更新视图&#xff0c;reactive通常用于对象 <template><div class"wrapper"><el-checkbox :indeterminate"isInderterminate" v-model"checkAll" change"handleCheckAllChange&…

限制 el-input 输入 emoji

1. 电脑如何输入 emoji 表情 ? 快捷键 win; 或 win. 2. 代码实现 <template><el-input v-model"input" placeholder"请输入内容" input"inputChange"></el-input> </template><script> export default {name: D…

R语言实现免疫浸润分析(1)

免疫浸润分析是生物信息学研究中的一项关键内容&#xff0c;它旨在评估肿瘤微环境中不同类型的免疫细胞组成。免疫细胞在肿瘤发展和治疗中起着至关重要的作用&#xff0c;因为它们可以影响肿瘤的生长、扩散和对治疗的响应。 为了了解免疫细胞在肿瘤中的分布和数量&#xff0c;…

LC-路径总和

LC-路径总和 链接&#xff1a;https://leetcode.cn/problems/path-sum/description/ 描述&#xff1a;给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径&#xff0c;这条路径上所有节点值相加等于目标和 targetSum 。…

安防监控视频汇聚平台EasyCVR视频平台调用iframe地址无法播放的问题解决方案

安防监控视频汇聚平台EasyCVR基于云边端一体化架构&#xff0c;具有强大的数据接入、处理及分发能力&#xff0c;可提供视频监控直播、云端录像、视频云存储、视频集中存储、视频存储磁盘阵列、录像检索与回看、智能告警、平台级联、云台控制、语音对讲、AI算法中台智能分析无缝…

【2023年11月第四版教材】《第5章-信息系统工程之软件工程(第二部分)》

《第5章-信息系统工程之软件工程&#xff08;第二部分&#xff09;》 1.3 软件设计1.4 软件实现&#xff3b;补充第三版教材内容&#xff3d; 1.5 部署交付 1.3 软件设计 1、结构化设计SD是一种面向数据流的方法&#xff0c;它以SRS和SA阶段所产生的DFD和数据字 典等文档为基础…

Django视图-HttpRequest请求对象和HttpResponse响应对象

文章目录 HttpRequestHttpResponse实践request对象的属性和方法响应 def index(request): 这个request其实就是内部已经封装好的Http请求HttpRequest&#xff0c;它是一个请求对象Django中的视图主要用来接受Web请求&#xff0c;并做出响应。 视图的本质就是一个Python中的函数…

⛳ TCP 协议详解

目录 ⛳ TCP 协议详解&#x1f3a8; 一、TCP / IP 协议的分层模型&#x1f3d3; 1.1、应用层&#x1f9f8; 1.2、传输层&#x1f52e; 1.3、网络层&#x1f3af; 1.4、链路层 &#x1f3ed; 二、HTTP 报文传输原理&#x1f945; 2.1、HTTP 报文传输&#x1f48e; 2.2、封装和分…

【Linux】Linux下常用搜索命令及其常用选项小结

0x00 前言 版本信息&#xff1a;Ubuntu 18.04.6 LTS 最后更新日期&#xff1a;2023.8.18 0x01 Linux下常用搜索命令及其常用选项小结 1.find &#xff08;1&#xff09;find path -name filename &#xff1a;在指定目录path查找名为filename 文件&#xff0c;文件名可用*匹…