简明理解三次握手和四次挥手

注:三次握手和四次挥手自己并不复杂,但却能够从不少角度理解这两个过程,本文仅取一个视点解读,若有其它见解欢迎留言交流。html

 

三次握手与四次挥手分别对应TCP链接创建过程与断开过程,先上TCP报文格式:ui

 

三次握手过程:.net

 

问题1: 为何要三次握手?unix

答:三次握手的目的是创建可靠的通讯信道,说到通信,简单来讲就是数据的发送与接收,而三次握手最主要的目的就是双方确认本身与对方的发送与接收机能正常。htm

        第一次握手:Client什么都不能确认;Server确认了对方发送正常blog

        第二次握手:Client确认了:本身发送、接收正常,对方发送、接收正常;Server确认了:本身接收正常,对方发送正常请求

        第三次握手:Client确认了:本身发送、接收正常,对方发送、接收正常;Server确认了:本身发送、接收正常,对方发送接收正常im

因此三次握手就能确认双发收发功能都正常,缺一不可。通信

 

问题2:为何要发送特定的数据包,随便发不行吗?数据

答:三次握手的另一个目的就是确认双方都支持TCP,告知对方用TCP传输。

 

        第一次握手:Server 猜想Client可能要创建TCP请求,但不肯定,由于也多是Client乱发了一个数据包给本身

        第二次握手:经过ack=J+1,Client知道Server是支持TCP的,且理解了本身要创建TCP链接的意图

        第三次握手:经过ack=K+1,Server知道Client是支持TCP的,且确实是要创建TCP链接

 

问题3:上图中的SYN和ACK是什么?

答:SYN是标志位,SYN=1表示请求链接;

        ACK其实就是ack后面加上的那个数,真正发送的时候不单独发ACK,只发ack,下面四次挥手的图同理

 

 

四次挥手:

 

问题1: 为何要四次挥手?

答:根本缘由是,一方发送FIN只表示本身发完了全部要发的数据,但还容许对方继续把没发完的数据发过来。

        举个例子:A和B打电话,通话即将结束后,A说“我没啥要说的了”,B回答“我知道了”,可是B可能还会有要说的话,A不能要求B跟着本身的节奏结束通话,因而B可能又巴拉巴拉说了一通,最后B说“我说完了”,A回答“知道了”,这样通话才算结束。

 

问题2:为何双方要发送这样的数据包?

答:和握手的状况相似,只是为了让对方知晓本身理解了对方的意图。

 

 

参考文章:

1.http://blog.csdn.net/renzhenhuai/article/details/12105457

2.http://blog.chinaunix.net/uid-20726927-id-2455485.html

相关文章
相关标签/搜索