基于对tcp/ip的的三次握手,四次挥手不是很了解,所以花了一点时间查询了相关知识,并对其知识点进行了汇总,并且给自己理了下记忆思路。
① 第一次握手
客户端发送请求(syn:synchronization),并选择一个初始化序号(seq:sequence)
syn=1;seq=x
客户端状态变为(syn-sent:synchronization_sent)
② 第二次握手
服务器做出响应:listen---->syncrcvd(synchronizationrecieved);
从监听变为收到请求 状态变为established
syn=1 ACK=1
ack=x+1(q确认编号)
发送序号seq=y
③ 第三次握手
客户端收到服务端发送端的TCP建立的验证请求,
状态变为established
确认收到请求,返回服务器信息
ACK=1 ack=y+1(q确认编号)
发送序号 seq=x+1
① 第一次挥手
客户端进程释放报文,发送报文FIN=1;
序列号seq=u;
状态为FIN-WAIT-1
② 第二次挥手
服务端收到报文 ACK=1 确认编号ack=u+1
发送信息给客户端 序列号seq=v;
状态为CLOSE_WAIT
③ 第三次挥手
服务器继续发出报文 FIN=1;
再次确认收到报文ACK=1 确认编号ack=u+1
发送信息给客户端 序列号seq=w;
进入最后确认状态Last_ACK;
④ 第四次挥手
客户端收到服务器的信息
确认收到ACK=1 确认编号ack=w+1;
seq=u+1;
状态变为CLOSED
以上是基于对tcp/ip三次握手四次挥手过程的解释,但是由于解释过于官方,似乎不太好理解,甚至很难记住,甚至容易混淆两者的关系。
因此,我脑补了这样一段情节帮助理解记忆,我现在把客户端当作一个羞涩的男孩,服务端当作一个矜持的女孩
现在规定两者进行对话,每次说一句话,记作seq并且记录其特有的编号,ACK表示确认收到对方的消息,并且后面需要跟上ack(认可对方的语句并在其特有标号后+1)
于是故事是这样的,一个羞涩的男孩邂逅了一个矜持的女孩,他认可她(syn:synchronization作为标记),他尝试这给女方对话,说出了他的第一句话(seq=x);
女方收到了男方的消息,并且也认可了男孩,先确认(ACK,ack=x+1),女孩给男孩回了一句(seq=y),此时男孩欣喜若狂也很礼貌的做了回应(ACK,ack=y+1),在他原来沟通的基础上
继续沟通(seq=x+1),就这样,两人的初步认识了,也开始了交流(信息传输过程)。
但是,相遇总是短暂的,马上到了分离的时分,作为男方,虽然不舍但是很绅士提出要分开的意思(fina=1)并发送了消息,女孩一如既往的确认消息并回复,但是因为出于矜持,她用只有自己能听到
声音说了很多想对男孩话(发送语句从v变w不连续的原因),终于她向男孩说出了,时间不早了,这将是她们这次的最后一次谈话(fina=1)并再也不发声了,男孩收到消息后沉默了数秒并确认消息并道别。
望着对方渐行渐远的背影,他们结束了这段对话,分离是为了下一次更好的邂逅。
具体脑补只能根据自己理解到这种程度,请轻喷,如有错误之处,请指正。
三次握手四次挥手两者的状态(情绪)如下
客户端状态 :
syn-sent---------------------------------------->established
服务端状态 :
listen---------->syncrcvd------------------------->established
客户端状态 :
established--->fin-wait-1------------------->fin-wait-2----------------->time_wait------------------------------>closed
服务端状态 :
established------------------>close-wait---------------------->fin-ack------------------------->closed
原文:https://www.cnblogs.com/daoyouzhanzhu/p/11300127.html