https://blog.youkuaiyun.com/qq_38950316/article/details/81087809
这篇博客写的很详细
自己理解:
首先要明白几个名词:seq,ack,SYN,ACK,FIN
大写的表示标志位,只有0,1两种状态,seq为序列号,ack为确认序列号
一、tcp的三次握手过程
- 客户端向服务端发送seq=x,SYN=1,客户端进入sent状态
- 服务端收到数据,将x+1作为确认序列号,同时将子的序列号seq=y发送给客户端,这里服务器进入半连接状态,向客户端发送 seq=y,ack=x+1,SYN=1,ACK=1,
- 客户端收到响应后进入establish状态,将收到的seq=y加1后作为确认序列号,同时把自己的同步序列号加1,也就是ack=y+1,seq=x+1,SYN = 1发送到服务端,此时服务端进入establish。
二、tcp的四次挥手过程
- 客户端数据发送完毕,向服务端发送FIN=1,seq=x, 客户端进入FIN-wait1状态
- 服务端收到后响应ack = x+1,seq = y,ACK=1,这时服务器进入关闭等待状态wait-closed
- 服务器继续完成剩余数据发送处理后,开始向客户端又发送一条,FIN=1, seq=z,ack=x+1,ACK=1
- 客户端收到后,向服务端发送ack=z+1,seq=x+1,连接关闭