关闭TCP连接的前奏
- FIN: finish关闭连接状态
- FIN-WAIT-1 等待远程TCP的连接中断请求,或先前的连接中断请求的确认
- FIN-WAIT-2 从远程TCP等待连接中断请求
- CLOSE-WAIT 等待从本地用户发来的连接中断请求
- LAST-ACK: 等待原来发向远程TCP的连接中断请求的确认
- TIME-WAIT 等待足够的时间以确保远程TCP接收到连接中断请求的确认
- CLOSE 没有任何连接状态
四次挥手
1、客户端发送连接关闭的报文(此时已停止发送数据)(第一次挥手)
报文首部: FIN=1(序列号seq=u)
此刻: 客户端进入终止等待(FIN-WAIT-1)状态
2、服务器收到连接关闭报文,并发送确认报文(第二次挥手)
报文首部: ACK=1 ack=u+1 (确认FIN) (序号为seq=v)
此刻: 服务端进入关闭等待(CLOSE-WAIT)状态
3、客户端收到服务器的确认请求后,客户端进入终止等待2(FIN-WAIT-2)状态(服务器 在这期间还要确认客户端所需要的数据是否真的发送完毕了,如果还没发送完,则继续发送数据)
4、服务器确认数据已发送完毕后,向客户端发送连接关闭报文(第三次挥手),服务器进 入最后确认(LAST-ACK)状态
报文首部: FIN=1 ACK=1 ack=u+1(确认上一次数据包)序列号seq=w
5、客户端收到服务器的连接关闭报文后,发出接受确认报文(第四次挥手),客户端进入时间等待状态(TIME-WAIT)
报文首部: ACK=1 ack=w+1(确认上一次数据包) 序列号seq=u+1
6、服务器收到客户端发的确认,立即进入TCP关闭状态(CLOSE),TCP连接结束,TCP关闭,服务端要比客户端早一些)
TIMW-WAIT时长: 2MSL Maximum Segment Lifetime 最大报文生存时间
同源策略
- 作为浏览器的一项安全策略,是指从一个源中加载的文档或者脚本与来自不同源的资源之间的交互会被浏览器所限制
- 同源指: 协议,域名,端口号相同
- 只要有js引擎的浏览器都使用同源策略
- 不受同源限制的项: 页面的超链接,表单的提交,资源引入(script src/ link href/ iframe src
如果在2MSL之内没有接收到第三次挥手,那就证明服务端接收到第四次挥手,如果服务端并没有收到第四次挥手,重新在发送第三次挥手