阿里面试官常问的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数模社…

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

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

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

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

派森 #P122. 峰值查找

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

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

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

限制 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、封装和分…

邀请函 | 高质量区块链·元宇宙—标准行系列沙龙(北京站)即将开启

区块链、元宇宙是近年来备受关注的新兴技术&#xff0c;也是推动数字经济发展的重要力量。高质量标准引领高质量发展&#xff0c;加快形成标准引领&#xff0c;充分释放区块链、元宇宙对实体经济牵引赋能效应&#xff0c;推进形成相关产业体系高质量发展新格局刻不容缓。 为进…

Tomcat的部署及优化(多实例和动静分离)

目录 绪论 1、tomact 1.1 核心组件 1.2 什么是 servlet 1.3 什么是 JSP? 1.4 Tomcat 功能组件结构 1.5 Tomcat 请求过程 2、Tomcat 服务部署 2.1 tomcat自身优化&#xff1a; 2.2 内核优化 2.3 jvm 2.3.1 jvm配置 2.3.2 Tomcat配置JVM参数 2.3.3 jvm优化 3、tom…

视频云存储/安防监控/视频汇聚EasyCVR平台新增经纬度选取功能

视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同&#xff0c;支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。音视频流媒体视频平台EasyCVR拓展性强&#xff0c;视频能力丰富&#xff0c;具体可实现视频监控直播、视频轮播、视频录像、…

优酷视频码率、爱奇艺视频码率、B站视频码率、抖音视频码率对比

优酷视频码率、爱奇艺视频码率与YouTube视频码率对比 优酷视频码率&#xff1a; 优酷的视频码率可以根据视频质量、分辨率和内容类型而变化。一般而言&#xff0c;优酷提供了不同的码率选项&#xff0c;包括较低的标清&#xff08;SD&#xff09;码率和较高的高清&#xff08;…

Python 驱动连接 OceanBase 数据库

安装 JayDeBeApi 驱动 pip3 install JayDeBeApi 待更新 Python 驱动连接 OceanBase 数据库_云数据库 OceanBase 版-阿里云帮助中心

6.Web后端开发【SpringBoot入门】

文章目录 1 SpringBoot快速入门1.1 Web分析 2. HTTP协议2.1 HTTP-概述2.1.1 介绍2.2.2 特点 2.2 HTTP-请求协议2.3 HTTP-响应协议2.3.1 格式介绍2.3.2 响应状态码 常见的相应状态码 3 WEB服务器3.1 服务器概述 1 SpringBoot快速入门 Spring的官网Spring Boot 可以帮助我们非常…

浅拷贝与深拷贝

作者简介&#xff1a; zoro-1&#xff0c;目前大一&#xff0c;正在学习Java&#xff0c;数据结构等 作者主页&#xff1a; zoro-1的主页 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01;&#x1f496;&#x1f496; 浅拷贝与深拷贝 浅拷贝浅拷贝定义浅拷贝代码演示浅…