TCP协议的三次握手四次挥手
一. 介绍
TCP协议是一种面向连接的可靠的通信协议。因此要求在传输数据之前,需要先建立连接,即判断是否两台主机可不可以正常通信,建立连接的过程就是三次握手。当数据传输完毕需要断开连接的时候,断开连接的过程就是四次挥手
二. 三次握手
1. 握手过程
- 主机A先向主机B发送连接请求报文
- 主机B收到主机A的连接请求报文后回复一个报文
- 主机A受到主机B回复的报文后需要再向主机B发送一个报文
这样连接通道就建立了
2. 解释
数据传输主机A需要可以发送和接收数据,同样主机B也需要
- A告诉B:我需要建立连接传输数据
- B听到以后回复A:我知道了
这时候B知道自己的接收数据功能没问题 - A这时候还需要再告诉B:好
A接受到数据的时候知道自己发送、接收数据都没问题,但是这时候B不知道自己的发送数据的功能是不是没问题,所以A需要回复B,告诉B你发送的数据我可以接收到。
但是在第三次握手时,主机A怎么可以确定主机B回复的是连接请求报文呢,而不是其他的数据,一旦是这样就没法确定主机B是不是可以接收到主机A发送的数据
所以主机A需要和B约定一种机制,来保证确实收到了连接请求报文。这个机制就是回复报文中的确认号(Ack)需要等于收到报文的序号(Seq)加上1,即Ack=Seq+1
三. 四次挥手
1. 挥手过程
- 主机A向主机B发送一个FIN数据包,请求断开连接,与请求连接报文不同的是FIN需要赋为1。如果一段时间内没有收到主机B回复的确认包则会重新发送
- 主机B收到FIN数据包后,会向主机A发送确认包,把FIN数据包的序列号(Seq)加1作为确认号(Ack),表示收到了主机A的报文
- 当主机B在确认没有数据需要发送以后会发送一个FIN数据包用来告诉主机A数据已发送完毕,之后不会再发送数据
- 主机A收到主机B的FIN数据包后等待一定时间(2MSL)也会向主机B发送一个确认包,至此两台主机成功完成断开连接