TCP的三次握手
TCP的三次握手的三次握手和四次挥手是大家最容易遇到的问题,那么TCP的三次握手和四次挥手究竟是怎么回事呢?今天我们来说说TCP的三次握手。
首先我们要了解所谓的握手是怎么一种怎样的进程,然后就是为啥得握三次才行?
两台主机要进行通信,要先证明两台主机都具备“收”和“发”的能力。所以,TCP的三次握手的目的是为了确认:两台主机都具备“收”和“发的能力。
三次握手实际就是主机A和主机B之间发了三条信息。主机A需要确认B既可以发也可以收,B也需要确认A既可以发也可以收之后,才会开始真正的通信。如果有任何一方的收发存在问题,通信都无法成功。
TCP的第一次握手
第一次握手: 主机A给主机B发送请求建立连接,二是发出一个序列号。(这里我们假设为249)
在实际连接中,请求连接用SYN=1表示,序列号用seq = n表示,其中n为一个数也就是这里的249,。
在主机A给序列号赋值为249,并请求建立连接。
第一次握手是为了让B主机知道A具备发的能力,即A可以发出信息。
TCP的第二次握手
第二次握手:主机B回复信息给主机A 收到250 发送序号99.
在实际情况中,这次回复一共有三条信息,一是同意和A主机建立连接(SYN=1),二是确认收到刚才的信息(ack = 刚才的seq+1 为250),三是自己发出自己的序列号(seq=x,其中x为一个数)。主机B同意建立连接并发出“收到250”表示收到刚才的信息,但是记住一定要对刚才A返回的序列号做+1处理,所以收到A的序列号是249,回复A的序列号是250.“发送序列号99”是主机B发送给A的序列号。
在第一次传送信息的过程中,B知道A可以发,第二次发送信息,A接到之后,A就知道了B可以接收也可以发出。那最后只有一个未证明,那就是B还不知道A能不能接收到自己的信息。虽然主机A接收到了信息,但是B并不知道,所以B要生成一个数,让A回复这个数+1才能确认A也能收到信息,这就是B要发出序列号的原因。
第二次握手让A知道B能接受到,也能发出。
TCP的第三次握手
第三次握手:主机A发送信息给主机B 收到序号100 这次序号是250
第三次回复也有三条信息,一是表示现在开始发送(SYN=0),二是成功收到B信息(ack=刚才的seq+1),三是这次的信息的序号是250(seq=最开始发出的序列号+1)
第三次握手让B知道A能接收到。
图例
如果你理解了上面的内容,那么图表将会让你更能深刻理解。
主机A | 主机B | |
---|---|---|
收 | 第三次握手 | 第二次握手 |
发 | 第一次握手 | 第二次握手 |
第一次:SYN = 1 请求建立连接 seq = n 发送序列号
第二次: SYN = 1 同意建立连接 ack= seq +1回复收到 seq = x 发送新的序列号
第三次:SYN = 0 开始发送 ack = x+1 成功收到信息 seq = n+1这次信息的序号 即最开始发出的序号+1