大家好,我是金鱼座,一个走在测试领域这片蓝海中, 蹉跎前行的技术渣渣,唯有一直走下去,也许能改变点什么,加油!
这两天看到群里有人在说自己的面试历程,其中多次提到了tcp-ip的中的三次握手和四次握手,并且让详细说明,实际上这玩意,我也是看了很多次,但是对于一个测试来说,这玩意真心不怎么常用,所以很容易就忘记了,最近又看了以下别人的总结,想了想还是增加了自己的一套快速理解思路,方便大家后面回忆这个过程
先贴以下我看的博客内容:https://blog.csdn.net/younglao/article/details/79453777
先给大家普及几个概念:
上图中有几个字段需要重点介绍下:
(1)序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。
(2)确认序号:Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1。
(3)标志位:共6个,即URG、ACK、PSH、RST、SYN、FIN等,具体含义如下:
(A)URG:紧急指针(urgent pointer)有效。
(B)ACK:确认序号有效。
(C)PSH:接收方应该尽快将这个报文交给应用层。
(D)RST:重置连接。
(E)SYN:发起一个新连接。
(F)FIN:释放一个连接。
普及了一些概念后,下面我们来说下我对于三次握手和四次挥手的自己速记方式吧
三次挥手
三次挥手客户端小伙和服务器小姑凉的一段结婚之旅
客户端说: 小姑凉,我想娶你(SYN=1), 带着彩礼(seq)来跟你求婚了
服务器说:嗯, 小伙子,我确认收到了(ASK=1),你来确定下是不是这些都东西(ack=J+1), 我想嫁你(SYN=1), 偷偷告诉你我也带了嫁妆呢(seq=K),你要查收下
客户端说:哇,好幸福,我也确认收到了(ASK=1),你的嫁妆(ask=K+1)我们是结婚了
四次挥手
四次挥手客户端小伙和服务器小姑凉的一段分手故事
客户端说: 妹子,我有点想分手(FIN=M)
服务器说:你确定?(ACK=1, ack=M+1)
服务器说:我最后一次在问你,要不要分手(FIN=N)
客户端说:确定,我想好了(ACK=1, ack=N+1)
两端故事悲欢离合
现实中考官希望问的一个问题就是:为什么结婚只要三次握手,而离婚分手却需要四次??
主要是因为:结婚很高兴, 所以妹子在回复ACK的时候,同时就把自己的嫁妆给老公了,而离婚分手的时候由于比较伤心, 所以ACK和FIN时做为两下来说的。
网友评论