三次握手和四次挥手面试(简述三次握手和四次挥手过程)

      最后更新:2023-10-03 06:15

      三次握手、七次握手、四次挥手

      TCP/IP 传输协议的 TCP 协议是面向连接的,也就是传输数据之前,必须建立可靠的连接。建立连接的过程中,需交换信息(如选取哪种协议、协议版本等),这个过程称为 握手 handshaking 。 握手过程中会协商后续通信使用的参数,如传输速率、编码方式、校验,以及其他协议选取、硬件支持的功能等。握手是两个实体之间的通信,但在 TCP/IP 中握手常指 TCP 的三次握手。TCP 中的数据传输、连接建立与终止都由特定控制参数管理,控制参数有以下这些:建立 TCP 连接需要三次握手:TCP 连接的双方通过三次握手确定 TCP 连接的初始序列号、窗口大小以及最大数据段,这样通信双方就能利用连接中的初始序列号保证双方数据段的不重不漏,通过窗口大小控制流量,并使用最大数据段避免 IP 协议对数据包分片。换个角度看为什么需要三次握手?客户端和服务端通信前要进行连接,三次握手就是为了确保自己和对方的收发能力是正常的。三次握手后,客户端、服务端才确认了自己的接收、发送能力均是正常的。HTTP 协议中的数据是明文传输的,任何中间人(man-in-the-middle)都可以读取传输的数据,因此 HTTP 是一种不安全的协议。HTTPS 是 HyperText Transfer Protocol Secure 的缩写。但 HTTPS 协议自身不能加密数据,它需要借助 SSL 或 TLS 协议层进行加密。HTTP 协议和 TLS 协议都位于 application layer。TCP 三次握手建立连接后,使用 TLS 握手建立安全连接,后续使用协商的加密算法先对数据进行加密,再通过 HTTP 传输。数据加密后,中间人即使获得了数据,也无法读取数据内容,进而避免了中间人攻击(man-in-the-middle-attack)。HTTP 协议和 TLS 协议一起使用时,称为 HTTPS 协议。App 想要使用 TLS 加密通信,只需网址使用 https:// 前缀即可。要了解 TLS 工作原理,需先了解加密的工作原理,以及各种加密算法。加密就是将数据从一种格式编码为另一种格式,编码时使用一些数学算法、秘密参数。使用相同算法、参数,可以解密数据,这个过程中的参数称为密钥(key)。非对称加密算法有两个 key:最流行的非对称加密算法是 RSA 加密算法,广泛用于密钥交换和数字签名验证。但现在正逐步迁移至更安全高效的 Diffie-Hellman (缩写为 D-H)算法。非对称加密算法通常速度慢,更耗费 CPU,且 key、数据越长,加密、解密耗费时间也越长。因此,数据量大时不要使用非对称加密,而应使用对称加密(symmetric key cryptography),对称加密速度更快、性能更高。非对称加密用于传输对称加密密钥。对称加密算法也称为共享密钥加密(shared key),它使用相同的 key 加密、解密。对称加密算法主要用于受信任两者之间建立加密通道。因为第三方无法获取对称密钥,因此只有建立通道的双方才可以解密数据。最流行的对称加密算法是 AES(Advanced Encryption Standard 的缩写,即高级加密标准),SSL 协议由 Netscape 团队设计,于1995年发布 SSL 2.0版本,之后发布了 SSL 3.0版本,IETF 已于2015年不推荐使用 SSL 3.0。目前,TLS 协议已经替代了 SSL 协议,SSL 协议已不再使用。TLS 是旨在提供安全通信的加密协议,使用 TLS 可以加密与服务器的所有通信。当前使用最广的是 TLS 1.2、TLS 1.3。TLS 1.3 发布于2018年,是对 TLS 1.2 的全面修订,在性能和安全性方面都有很大提升,并且减少了建立安全连接所需的握手次数。TLS 1.3 只支持 Diffie-Hellman 非对称加密算法,移除了 RSA 算法。使用 HTTPS 发送 HTTP 请求时,首先使用三次握手建立可靠的 TCP 连接,之后就通过 TLS 四次握手交换双方的密钥。下面介绍 TLS 1.2 连接建立过程:TLS 握手的关键在于利用通信双方生成的随机字符串和服务端的公钥生成一个双方经过协商后的密钥,通信双方后续使用这个对称密钥加密数据,防止中间人监听和攻击,保障通信安全。在 TLS 1.2 中,需要 2-RTT(Round-Trip Time,往返延迟)才能建立 TLS 连接。在 TLS 1.3 中,客户端不仅发送 ClientHello、支持的协议、加密算法,还尝试猜测服务器将选择哪种密钥协商算法,并为此发送共享密钥。这样服务端选取加密算法后,因为已经有了 client key,可以立即生成 key,进而减少一次 RTT。建立连接时需要发送三个 packet,但终止连接时需要四个 packet,也称为四次挥手。因为 TCP 连接是全双工的,每个方向都必须独立终止。终止 TCP 连接的四次挥手:在第二次挥手时,如果服务端也想终止连接,可以为 FIN 设置不同于客户端 FIN 的序列号。客户端收到 FIN 后,发送 ACK,它的 acknowledgement number 为 FIN sequence number 加一。这一过程结束后,服务端与客户端的连接也终止了,这样的话整个过程进行了三次挥手。客户端想要通过 HTTP 请求访问服务端时,需要经过三次握手;通过 HTTPS 访问服务端时,需要额外增加四次握手。总结一下 HTTP 建立连接、终止连接:需要注意的是,本文所说的三次握手、七次握手、四次挥手都是基于特定版本的协议,不同版本的协议所需握手次数可能不同。HTTP/3 就是一个例子,它使用基于 UDP 的 QUIC 协议进行握手,将 TCP 和 TLS 握手过程结合起来,握手次数从七次减少到了三次。参考资料:欢迎更多指正:https://github.com/pro648/tips本文地址:https://github.com/pro648/tips /blob/master/sources/三次握手、七次握手、四次挥手.md
      三次握手、七次握手、四次挥手

      TCP 三次握手和四次挥手指的什么?

      为什么要三次握手 三次握手的目的是建立可靠的通信信道,说到通讯,简单来说就是数据的发送与接收,而三次握手最主要的目的就是双方确认自己与对方的发送与接收是正常的。第一次握手:Client 什么都不能确认;Server 确认了对方发送正常,自己接收正常第二次握手:Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:对方发送正常,自己接收正常第三次握手:Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:自己发送、接收正常,对方发送、接收正常所以三次握手就能确认双发收发功能都正常,缺一不可。 第四次握手:任何一方都可以在数据传送结束后发出连接释放的通知,待对方确认后进入半关闭状态。当另一方也没有数据再发送的时候,则发出连接释放通知,对方确认后就完全关闭了TCP连接。
      只知道三次握手,A向B发送信息,B会向A返回一个收到确认的消息,A还会对这个确认消息发送一次再确认,所以一个消息要经过三次的消息交互才算发送完成,这就是三次握手
      TCP 三次握手和四次挥手指的什么?

      详解三次握手和四次挥手:遇到心动的女孩时,如何去把握?

      我有一个朋友,小泷,他与我倾诉:他在咖啡厅与朋友闲谈,遇到了一个让时间彷佛静止的女孩。他描述,那一刻,他的心彻底被抓住了,脑中轰然,眼睛无法再从她身上移开。 而女孩,也时不时向她望来,那是一双如秋水般清澈的明眸。小泷说,他非常非常想想把握,这一次心动。然而,自始自终,他没能迈出那一步,他不知道该怎么办。小泷的困境,是每个男孩的困境。我告诉他,如果你懂得TCP协议,就会把握一段感情了。TCP(Transmission control protocal),传输控制协议,既是机器与机器间传输信息的基础协议,也是人与人联立联系的准则。如何体面地认识她? 如果读懂她是否对你有好感? 如何给予她安全感? 如何离别时要到她的手机号? TCP协议,把一切写得清清楚楚。我对小泷说:一个女孩,不管她性格有多高冷,永远是欣然接受你的好感的。你要做的,也必须要做的,是:我告诉小泷,我也曾经在机场遇到过让我瞬间心动的女孩,我所做的,只是很自然走上去,告诉她:"你好像也坐这趟飞机? 航班号是KN5855没错吧"这对男孩是很简单的事情,因为你们出现的地点,就是共鸣。你关于这个地方,一定有一些具体信息可以分享。所以,小泷,你应走上去说:你也常来这家咖啡厅吧,他们家的焦糖玛奇朵非常棒。这样的谈话,对女孩是提供安全感的:你是一个拥有共同话题,并且会提供实质性价值的男士,而不是随随便便乱勾搭的人。 共鸣的力量是非常强大的,没有女孩会拒绝回应的,即使长相略显寒酸。说回TCP协议,它是这样规定的:(SYN是synchronization同步的简称,seq为sequcence序号的缩写。)这时,客户端的状态更改为SYN-SENT(synchronization_sent同步已发送)状态。也就是说,小泷,你耐心待着女孩回应就是了。这就是“第一次握手”。有了你提供的同步请求SYN=1和具体信息seq=x。女孩会根据这个信息做出响应。女孩这时的状态从LISTEN变为SYNC_RCVD(synchronization_recieved同步已收到)。我在机场遇到的女孩是这样回答我的:嗯嗯,我也坐这趟航班,不过没看到你。你是来深圳出差么?这样回答,是人之常情。你一定可以得到亲切友善的回应。TCP协议中是这样规定的:(ACK是acknowledgement确认的简称,小写的ack是确认编号)所以,女孩一定会认同你,并根据刚刚的信息点延展,而且会提供一个新的信息点。女孩对你不反感,但她也需要确认你是不是真对她有好感。假如我真的只是觉得航班数字很吉利呢?假如你小泷真是就喜欢喝焦糖玛奇朵呢? 她无法确认男生是不是想和她交流,所以一定提出新话题。 而且,抛出新话题才会让彼此显得不尴尬。女孩几乎一定会这样回应:所以小泷,你心动女孩几乎一定会类似的回应:嗯嗯,我喜欢榛仁玛奇朵。我住这附近,你呢?你收到这样友好的回应,心中一定,知道,以后至少可以建立起初步的友谊了。 这时,你的状态更改为ESTABLISHED。(建立连接)虽然对于你,这段男女间青涩的友谊已经建立起了。但女孩,她还在等待你的回应 —— 她也在担忧你只是随意的询问吧。快赶紧安抚这一个善良美好的女孩吧!比如我会回答:嗯是的,有几个客户在深圳需要谈。我坐的商务舱所以没看到你吧。所以,小泷,你需要对她的新话题有所回应,并且不要丢掉自己的话题。这样两个话题都可以聊下去。在TCP协议中这样规定:这对女孩是非常重要的,你对她的话也表示认同,并且也能接住她的话题,同时自己的话题也没有丢掉。——是个能照顾她感受,也坚持自我的人。这时,女孩的状态成为了ESTABLISHED。你们双方都成为了ESTABLISHED,接下来,你们就可以畅通无阻地交流了。男孩会想,我怎么表现得靠谱? TCP给出了答案,共鸣 + 具体话题。女孩心中会想: 他对我感兴趣吗?他是聊得来的人吗? 如何进行“废物测试”?TCP给出了答案:共鸣 + 同意 + 对方话题的延展 + 新具体话题。男孩心中会想,怎么给她留下有主见高情商的好印象?TCP给出了答案: 同意 + 对方话题的延展 + 继续自己话题。仔细想想,这样的方式,让双方既不显尴尬,又体面舒适,又节约了两个人的时间与精力。时间总是短暂的,你们相谈甚欢,到了离别的时候。只有一个体面的离别,才意味着未来依然可以关系持续升温。放心,TCP协议已经为你规划好了。作为主动方的男生,需要首先表示分别,千万不要拖泥带水等到女生提出,这样才能为这段邂逅留下回味与不舍。你需要这时候,是要手机号/微信号的最佳时机。TCP协议是这样规定的:(FIN的意思是finis终结的意思)你已经请求结束了,安静地等待就好。 主动而沉默,给予女生足够的空间,这是最体面的分别方式。这时你的状态是FIN-WAIT-1(终止待待1)热情的聊天突然嘎然而止。女生心中会有些小失落,这时你要微信的请求,她几乎一定会同意。这时女生会找纸张,把自己的手机号或微信号写给你。并跟你说一些其它话。比如她说:嗯是的,等我写给你。你看外面好像快下雨了。TCP协议是这样规定的:因为是你提出离开,女孩还意犹未尽。一方面会同意离开,一方面会延展你的话题。为了确认你确实想离开了,她一般会说一个新话题,比如下雨了。女孩从接到你的离开请求,到回应你这一句的时候,她处于CLOSE_WAIT状态,她会开始进行心理建设,适应你离开时的空洞感。当然,成年人的表达方式,总是隐晦而体面的。只是一句淡淡的“天快下雨了”。而你听到她说这些,只是静静不说话。你进入FIN-WAIT-2状态。你在等着她的手机号,说话可能她突然不写了呢?忍住,别回应。当女孩低头写好手机号,她也做好了离开的心理建设,知道这一次邂逅到此为止了。这时,她说:快回去吧,我写给你啦。 不知道为什么和你呆一起挺愉快的。看,TCP协议影响着你们的一个个行为模式。你不回应,她会换个话题,她会开始猜,她会开始等,她会开始留恋。TCP协议是这样规定的:说出这句话的女孩,进入了LAST_ACK(最终动作)状态——主动权在你,她等着你。你听到女孩再次说话,你会不舍,你等着些什么。你进入TIME_WAIT阶段。知道她要离开了,你的心会突然一痛。但离开已成必然,体面地对她说最后的话吧!TCP协议是这样规定的:听到你说完这句话,女孩把车门关上,车缓缓启动了。女孩进入状态CLOSED(关闭连接)。提出离别的你,却久久站在原地。等了2MSL(两次交谈响应时间那么长),你好希望车突然停下,女孩从车上下来。但一切没有发生。美好的邂逅结束了。你进入CLOSED状态。小泷,你知道吗?懂得TCP协议,也就懂得了如何去抓住属于撩拨你心弦的那个女孩。也许,这才是邂逅时应该的画面:离别时,你们会这样不舍离别:然后,她离开了。你凝望着她,一再回头,直到消失在视线外。每天,有万亿亿次TCP连接,都在为你重演着这一个画面。勇敢一点,不用担心被拒绝,万亿亿次TCP连接都成功了,你怎么会失败呢?因为TCP是网络通讯的规则,也是人类间默契的交流规则。不动声色,内心早已暗流汹涌。却只是对你说。“好巧,我也是这趟航班”几条规则,有助于你记住这一切:
      详解三次握手和四次挥手:遇到心动的女孩时,如何去把握?

      软件测试面试常见问题及答案是什么

      一般软件测试的面试分为三轮:笔试,HR面试,技术面试。前两轮,根据不同企业,或有或无,但最后一个技术面试是企业了解你“行不行”的关键环节,每个企业都会有的。在平时的学习、工作中一定要善于总结,如果回答不好,面试官会认为你技术能力有限或者不勤于思考,是很容易被pass掉的。简单为大家总结了些面试过程中经常会被问到的问题:hr会问的几个问题1.你觉得自己的优缺点是什么2.你上一家公司的薪资是多少,调了几次薪3.为什么从上一家公司离职呢4.离职证明和背调可以吗?5,你还有什么问题要问吗?(这些问题都带坑!回答不好会死在这儿的,不知道怎么回答,可以百度下或者联系在线客服)技术方面的问题【功能方面】1.你是怎样理解软件测试的2.让你介绍你做的项目的业务流程3.软件测试的流程4..你认为什么是bug,说一下你印象深刻的bug,结合项目说一下你们公司有哪些类型的bug和bug评判严重程度的标准5.如何保证软件测试的质量6.如何保证你写的测试用例覆盖所有的场景7.如果用户在正式环境发现一个bug,你在测试环境没有发现,怎么办8.项目测试到什么程度就可以上线了【场景方面】1.让你写登录,支付,充值,购物车,文件上传,三角形,笔,水杯等的测试点(80%的公司会让你分析测试点!!!)【计算机网络基础知识】1.http协议的内容是什么?2.请求头的内容有哪些3.常见的状态码有些4.http和https的区别有哪些5.tcp和udp的区别6.请描述下tcp的三次握手四次挥手的过程7.网关的作用8.osi七层模型每一层的作用9.session是什么,cookie是什么,有什么使用场景10.session和cookie的区别【接口测试】1.你认为的接口是什么2.接口测试工具工作的原理是什么呢?3.接口中包含哪些内容4.接口用例如何写5.你是如何做接口测试的,使用的什么工具?6.接口自动化了解过吗7.get和post的区别【自动化测试】1.可能会问到selenium2.selenium元素定位的方式,显示等待,隐式等待,强制等待的区别等3.接口自动化脚本的编写原理和过程这块可以不用担心,只要会一些简单的就可以了,因为对于初中级测试来说,自动化是一个加分项,一般如果自动化掌握的很熟练的同学薪资是在12-25k之间的【其他测试问题】1.简述转包过程,你用的抓包工具是什么2.如何分析一个bug是前端还是后端bug3.url后面跟数据的话如何拼接上去4.抓包的原理是什么5.你们公司使用的bug管理工具是什么6.弱网测试是如何实现的7.web测试和app测试的区别是什么8.给你一个软件你会如何进行测试9.兼容性测试你是如何做的(从app 和 web两方面回答)10.冒泡排序之类的一些代码题11.如果在正是环境发现bug测试环境没发现怎么办12.如果有一个bug,怎么判断这个bug是前端代码导致的还是后端代码导致的这些问题回答的正确与否直接决定了你能否留下,甚至能拿多少薪资的问题,多回答对一个问题,就有可能多为自己争取到500-1000块的工资呢。如果不知道怎么回答,可以私信细聊哦!
      软件测试面试常见问题及答案是什么

      软件测试面试常见问题及答案有哪些?

      如下:1、什么是bug?答:软件的bug指的是软件当中不符合用户需求的问题。常见的软件bug分为以下三类:没有实现的功能。完成了用户需求的功能,但是运行时会出现一些功能或性能上的问题。实现了用户不需求的多余功能。2、简单概述缺陷报告,并说明包括哪些项?答:现在缺陷报告一般不再使用纸质档文档编写,而是专用测试管理工具(如TestDirector),这样便于缺陷管理。在这些工具中,每个缺陷作为一条记录输入指定的缺陷管理系统中。缺陷报告包括:软件名称、版本号、功能模板、缺陷编号、对应的用例编号、编写时间、编写人、测试员、预期结果、实际结果、缺陷描述、严重级别、优先级别3、开发人员修复缺陷后,如何保证不影响其他功能?答:重新执行用例、看是否出现错误结果。并对周围的一些相关功能点追加新的测试用例。4、什么时候功能测试?答:功能测试是在规定的一段时间内运行软件系统的所有功能,以验证这个软件系统有无严重错误。5、为什么选择测试这行?答:它是一个新兴的行业,有发展潜力,而且很锻炼人,需要掌握更多的技能,比做开发要更全面。
      一般软件测试的面试分为三轮:笔试,HR面试,技术面试。前两轮,根据不同企业,或有或无,但最后一个技术面试是企业了解你“行不行”的关键环节,每个企业都会有的。在平时的学习、工作中一定要善于总结,如果回答不好,面试官会认为你技术能力有限或者不勤于思考,是很容易被pass掉的。小编简单总结了些面试过程中经常会被问到的问题:hr会问的几个问题1.你觉得自己的优缺点是什么2.你上一家公司的薪资是多少,调了几次薪3.为什么从上一家公司离职呢4.离职证明和背调可以吗?5,你还有什么问题要问吗?(这些问题都带坑!回答不好会死在这儿的,不知道怎么回答,可以百度下或者联系在线客服)技术方面的问题【功能方面】1.你是怎样理解软件测试的2.让你介绍你做的项目的业务流程3.软件测试的流程4..你认为什么是bug,说一下你印象深刻的bug,结合项目说一下你们公司有哪些类型的bug和bug评判严重程度的标准5.如何保证软件测试的质量6.如何保证你写的测试用例覆盖所有的场景7.如果用户在正式环境发现一个bug,你在测试环境没有发现,怎么办8.项目测试到什么程度就可以上线了【场景方面】1.让你写登录,支付,充值,购物车,文件上传,三角形,笔,水杯等的测试点(80%的公司会让你分析测试点!!!)【计算机网络基础知识】1.http协议的内容是什么?2.请求头的内容有哪些3.常见的状态码有些4.http和https的区别有哪些5.tcp和udp的区别6.请描述下tcp的三次握手四次挥手的过程7.网关的作用8.osi七层模型每一层的作用9.session是什么,cookie是什么,有什么使用场景10.session和cookie的区别【接口测试】1.你认为的接口是什么2.接口测试工具工作的原理是什么呢?3.接口中包含哪些内容4.接口用例如何写5.你是如何做接口测试的,使用的什么工具?6.接口自动化了解过吗7.get和post的区别【自动化测试】1.可能会问到selenium2.selenium元素定位的方式,显示等待,隐式等待,强制等待的区别等3.接口自动化脚本的编写原理和过程这块可以不用担心,只要会一些简单的就可以了,因为对于初中级测试来说,自动化是一个加分项,一般如果自动化掌握的很熟练的同学薪资是在12-25k之间的【其他测试问题】1.简述转包过程,你用的抓包工具是什么2.如何分析一个bug是前端还是后端bug3.url后面跟数据的话如何拼接上去4.抓包的原理是什么5.你们公司使用的bug管理工具是什么6.弱网测试是如何实现的7.web测试和app测试的区别是什么8.给你一个软件你会如何进行测试9.兼容性测试你是如何做的(从app 和 web两方面回答)10.冒泡排序之类的一些代码题11.如果在正是环境发现bug测试环境没发现怎么办12.如果有一个bug,怎么判断这个bug是前端代码导致的还是后端代码导致的这些问题回答的正确与否直接决定了你能否留下,甚至能拿多少薪资的问题,多回答对一个问题,就有可能多为自己争取到500-1000块的工资呢。有什么问题,在随时私信吧!
      软件测试面试常见问题及答案有哪些?

      本文由 在线网速测试 整理编辑,转载请注明出处。

          热门文章

          文章分类