阿里面试官常问的TCP和UDP,你真的弄懂了吗?
前 言
作为软件测试,大家都知道一些常用的网络协议是我们必须要了解和掌握的,面试的时候面试官也非常喜欢问一些协议相关的问题,其中有两个协议因为非常基础,出现的频率非常之高,分别是 ”TCP 协议“ 和 ”UDP 协议“。因为它们两个协议都处于传输层,所以两个协议经常被用来做比较。那么要知道它们之间的区别,我们就先需要了解清楚这两个协议的具体实现原理。
TCP 协议TCP 协议,全称是 Transmission Control Protocol,传输控制协议, 顾名思义,就是要对数据的传输进行一定的控制。如大家了解的那样,网络报文传输到传输层的时候,会给数据封装一个传输层的头部,所以 TCP 作为一个传输层的协议,也会封装一个 TCP 协议的头部,这个头部包含什么信息,其实就代表着这个协议可以进行哪些工作。
TCP 的头部如下图所示:
我们来给大家解释一下里面的每个字段的意义:源端口号/目的端口号: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 效率高。
阿里面试官常问的TCP和UDP,你真的弄懂了吗?的更多相关文章
- Android相关面试题---面试官常问问题
版权声明:本文为寻梦-finddreams原创文章,请关注: http://blog.csdn.net/finddreams/article/details/44513579 一般的面试流程是笔试完就 ...
- 优雅手撕bind函数(面试官常问)
优雅手撕bind函数 前言: 为什么面试官总爱让实现一个bind函数? 他想从bind中知道些什么? 一个小小的bind里面内有玄机? 今天来刨析一下实现一个bind要懂多少相关知识点,也方便我们将零 ...
- 面试官常问的Nginx的那几个问题?
什么是Nginx? Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器 Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代 ...
- 面试官常问的20道Java题目(附答案)-来自Java1234
1. 以下代码的输出结果是(A) int i =3; i = i++; System.out.println(i); A .3 B.4 C.5 a=b++是先将b值赋值给a后b再自增. 2. Ma ...
- 面试官常问的10个Linux问题
1.如何暂停一个正在运行的进程,把其放在后台(不运行)? 为了停止正在运行的进程,让其再后台运行,我们可以使用组合键Ctrl+Z. 2.什么是安装Linux所需的最小分区数量,以及如何查看系统启动信息 ...
- 面试官常问的Nginx的几个问题
1.什么是Nginx? Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器 Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3 ...
- 阿里面试官必问的12个MySQL数据库基础知识,哪些你还不知道?
数据库基础知识 1.为什么要使用数据库 (1)数据保存在内存 优点: 存取速度快 缺点: 数据不能永久保存 (2)数据保存在文件 优点: 数据永久保存 缺点: 1)速度比内存操作慢,频繁的IO操作. ...
- 阿里面试官用HashMap把我问倒了
本人是一名大三学生,最近在找暑期实习,其中也面试过两次阿里,一次菜鸟网络部门.一次网商银行部门,当然我都失败了,同时也让我印象很深刻,因此记录了其中一些面试心得,我觉得这个问题很值得分享,因此分享给大 ...
- JVM工作原理和特点(一些二逼的逼神面试官会问的问题)
作为一种阅读的方式了解下jvm的工作原理 ps:(一些二逼的逼神面试官会问的问题) JVM工作原理和特点主要是指操作系统装入JVM是通过jdk中Java.exe来完毕,通过以下4步来完毕JVM环境. ...
- 面试官再问我如何保证 RocketMQ 不丢失消息,这回我笑了!
最近看了 @JavaGuide 发布的一篇『面试官问我如何保证Kafka不丢失消息?我哭了!』,这篇文章承接这个主题,来聊聊如何保证 RocketMQ 不丢失消息. 0x00. 消息的发送流程 一条消 ...
随机推荐
- ArkTS基础知识
[习题]ArkTS基础知识 及格分85/ 满分100 判断题 1. 循环渲染ForEach可以从数据源中迭代获取数据,并为每个数组项创建相应的组件. 正确(True)错误(False) 回答正确 ...
- P10245 Swimming Pool题解
P10245 Swimming Pool 题意 给你四条边 \(abcd\),求这四条边是否可以组成梯形. 思路 这显然是一道简单的普通数学题. 判断是否能构成梯形只需看四条边是否能满足,上底减下底的 ...
- 全网最适合入门的面向对象编程教程:24 类和对象的 Python 实现-异常的捕获与处理:try/except 语句、文件读写示例、Exception 引用
全网最适合入门的面向对象编程教程:24 类和对象的 Python 实现-异常的捕获与处理:try/except 语句.文件读写示例.Exception 引用 摘要: 本文主要介绍了在使用 Python ...
- 【WSDL】01 JAX-WS 入门案例
去年这个时候工作遇见时暂时总结的笔记: https://www.cnblogs.com/mindzone/p/14777493.html 当时也不是很清楚,直到最近前同事又遇上了这项技术, 除了WSD ...
- NVIDIA一直宣传的DPU是个啥东西,啥用处? —— NVIDIA BlueField-3 DPU
地址: https://www.bilibili.com/video/BV1ys4y1z7nS/ 无意间看到了些比较靠谱的解释: (来自地址:https://www.bilibili.com/vide ...
- NVIDIA黃仁勳給年輕人的忠告 —— 持续强化学习算法会是未来10年的技术变革点
地址: https://www.youtube.com/watch?v=ER4xNhSVJ2c 强化学习,已经不是什么稀奇的概念了,强化学习算法是大语言模型.自动驾驶.人形机器人的核心算法,但是现有的 ...
- 如何使用强化学习算法解决15-puzzle问题,即所谓的“十五谜题”推盘游戏
相关: https://medium.com/@amshali/15-puzzle-with-reinforcement-learning-8bcfc1aa54e7 什么是15-puzzle问题? 数 ...
- 【转载】 vim中常用折叠命令
原文地址: https://www.cnblogs.com/litifeng/p/11675547.html 个人推荐的一个视频教程地址: 上古神器Vim:从恶言相向到爱不释手 - 终极Vim教程01 ...
- 硬盘测速工具中的队列深度是个什么东西——CrystalDiskMark中的Q32T16是什么意思
================================ 最近有使用CrystalDiskMark给自己的硬盘做测速,发现有个名词自己不是很理解,就是像Q32T16这样的词: 在网上找了好久, ...
- Vue-方法与事件
基本用法 监听点击事件 v-on 缩写:@ 预期:Function | Inline Statement | Object 参数:event 修饰符: .stop - 调用 event.stopPro ...