首先tcp先建立需要两个节点,一个为客户端A,一个为服务器B。这里面的服务器也可以是另一个客户端。
第一次握手是A首先向B发送请求,这个请求报文里面并没有带数据并带有一个随机初始序号N。
第二次握手是B通过A的请求,并且向A回发送一个确认报文,这个报文确认号为N+1,并且次数B为A分配了一段缓冲空间。第二次握手后A就可以向B发送数据被接收了。
第三次握手是A收到确认报文后,向B再发送报文确认,此时同上确认号和报文序号都会加1。同时A和B已建立连接状态 触发三次握手
关键点:报文确认号和初始序号随机是为了防止与历史序号重复
四次挥手
第一次挥手
A向B发送断开连接的报文,将报文的FIN标记位置1就是准备断开TCP连接请求。
第二次挥手
B接收到A的FIN数据包,回发一个确认包给A。此时A指向B的连接就断开了,A就不能向B发送数据了,但tcp连接此刻没有完全断开。
第三次挥手
由B向A发送FIN数据包请求断开连接
第四次挥手
A收到B发送的FIN数据包,发送一个确认数据包给B,此时B指向A的对话连接就断开了。
同时逻辑上A和B整个tcp连接也断开了
之后呢实际上B是直接关闭了,但是A还在等待状态,等待2MSL才完全关闭tcp连接