LWIP协议:三次握手和四次挥手、TCP/IP模型
一、三次握手:是客户端与服务器建立连接的方式;
1、客户端发送建立TCP连接的请求。seq序列号是由发送端随机生成的,SYN字段置为1表示需要建立TCP连接。(SYN=1,seq=x,x为随机生成数值);此时客户端处于SYN_SENT状态
2、服务端回复客户端发送的TCP连接请求。seq序列号是由回复端随机生成的,SYN置为1,ACK字段数值是在客户端发送过来的序列号seq的基础上加1进行回复,以便客户端收到信息时,知晓自己的TCP建立请求已得到验证。(SYN=1,ACK=x+1,seq=y,y为随机生成数值);此时客户端处于SYN_RCVD 状态。
3、客户端收到服务端发送的TCP建立验证请求后,会使自己的序列号加1表示,并且再次回复ACK验证请求,在服务端发过来的seq上加1进行回复。(SYN=1,ACK=y+1,seq=x+1)。此时客户端处于 ESTABLISHED 状态。服务器收到 ACK 报文之后也处于 ESTABLISHED
状态,此时双方已建立起了连接。
二、四次挥手:是客户端与服务器断开连接的方式;
1、客户端发送断开TCP连接请求。seq序列号是由发送端随机生成的,FIN为1表示需要断开TCP连接。(FIN=1,seq=x,x由客户端随机生成);此时客户端处于 FIN_WAIT1
状态。
2、服务端回复客户端发送的TCP断开请求。seq序列号是由回复端随机生成的,ACK字段数值是在客户端发过来的seq序列号基础上加1进行回复,以便客户端收到信息时,知晓自己的TCP断开请求已经得到验证。(FIN=1,ACK=x+1,seq=y,y由服务端随机生成);此时服务端处于 CLOSE_WAIT
状态。客户端收到请求后进入 FIN_WAIT2
状态
3、服务端在回复完客户端的TCP断开请求后,不会马上进行TCP连接的断开,服务端会先确保断开前,所有传输到A的数据是否已经传输完毕,一旦确认传输数据完毕,就会将回复报文的FIN字段置1,并且产生随机seq序列号。(FIN=1,ACK=x+1,seq=z,z由服务端随机生成);此时服务端处于 LAST_ACK
的状态。
4、客户端收到服务端的TCP断开请求后,会回复服务端的断开请求。seq字段随机生成,ACK字段会在服务端的TCP断开请求的seq基础上加1,从而完成服务端请求的验证回复。(FIN=1,ACK=z+1,seq=h,h为客户端随机生成);此时客户端处于 TIME_WAIT
状态。需要过一阵子以确保服务端收到请求后才会进入 CLOSED 状态,此时双方已断开了连接。