TCP三次握手
(1)序号(sequence number):seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。
(2)确认号(acknowledgement number):ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,ack=seq+1。
(3)标志位(Flags):共6个如下:
ACK:确认序号有效。
SYN:发起一个新连接。
FIN:释放一个连接。
确认序号ack=发起方seq+1
过程:
1、标志位:SYN=1,序号:seq=x,状态:SYN-SENT
2、标志位:SYN=1,ACK=1,序号:seq=y ,ack=x+1 ,状态:SYN-RCVD
3、标志位:ACK=1,序号:seq=x+1,ack=y+1 ,状态:ESTABLISHED
四次挥手
过程:
1、标志位:FIN=1,序号:seq=u,状态:FIN-WAIT-1
2、标志位:ACK=1,序号:seq=v,ack=u+1,状态:CLOSE-WAIT
3、标志位:FIN=1,ACK=1,序号:seq=w,ack=u+1,状态:LAST-ACK
4、标志位:ACK=1,序号:seq=u+1,ack=w+1,状态:TIME-WAIT
服务端进入CLOSED
客户端等待2MSL后进入CLOSED
MSL:TCP报文在传输过程中的最大生命周期
服务器端在1MSL内没有收到客户端发出的ACK确认报文,就会再次向客户端发出FIN报文;
如果客户端在2MSL内,再次收到了来自服务器端的FIN报文,说明服务器端由于各种原因没有接收到客户端发出的ACK确认报文。客户端再次向服务器端发出ACK确认报文,计时器重置,重新开始2MSL的计时;
HTTP版本区别
1996年 HTTP/1.0
短连接(一次TCP连接,只能处理一个HTTP请求,完成就断开,时间耗费在不断的建立连接和断开连接上)
支持GET、POST、 HEAD请求
1999年 HTTP/1.1
长连接(connection:keep-alive)
一个TCP连接可以处理多个http请求,支持PUT、DELETE、PATCH等更多的请求
但也是有上限的,Chrome浏览器向同一个域名下的请求最多6个
2015年 HTTP/2.0
连接数不受限制
双向通信,服务端可以主动push
将请求和响应数据分割为更小的帧,并且它们采用二进制编码进行传输,而不是文本格式
header压缩,效率更高