面试基础知识

面试基础知识

TCP 三次握手四次挥手

******三次握手

第一次握手: 客户端给服务端发一个SYN 报文,客户端处于SYN_SEND 状态

第二次握手: 服务器收到客户端的SYN的报文之后,会以自己的SYN报文作为应答,并且也是指定了自己的初始化序列号ISN。同时会把客户端的ISN+1 作为ACK的值,表示已经客户端的SYN,此时服务器处于SYN_RCAD状态

第三次握手: 客户端收到SYN报文之后,会发送一个ACK 报文,表示收到服务端的SYN报文,建立连接处于 ESTABLISHED 状态  

image-20201120141311148

****四次挥手

image-20201120151938555

第一次挥手(FIN=1 seq=x)

假设客户端想要关闭连接,客户端发送一个FIN标志位置为1的包,表示自己已经没有数据可以发送了,但是仍然可以接受数据
客户端进入 FIN_WAIT_1 状态

第二次挥手(ACK=1,ACKnum=x+1)
服务端确认客户端的FIN包,发送一个确认包,表示自己接受到了客户端关闭连接的请求,但是还没有准备好关闭连接。 
发送完毕后,服务器端进入CLOSE_WAIT 状态,客户端接收到这个确认包之后,进入FIN_WAIT_2状态,等待服务器端关闭连接 

第三次挥手(FIN=1,seq=y)
服务器端准备好关闭连接时,向客户端发送结束连接请求,FIN设置为1。
发送完毕后,服务器端进入 LAST_ACK 状态,等待来自客户端的最后一个ACK 

第四次挥手(ACK=1,ACKnum=y+1)
客户端接收到了来自服务器端的关闭请求,发送了一个确认包,并进入 TIME_WAIT 状态,等待可能出现要求重传的ACK包。 
服务器端接受到了这个确认包之后,关闭连接,进入CLOSED 状态。 

TCP 的状态

LISTEN: 侦听来自远方的TCP端口的连接请求
SYS-SENT: 再发送连接请求后等待匹配的连接请求
SYN-RECEIVED: 再收到和发送一个连接请求后等待对方对连接请求的确认
ESTABLISGED: 代表打开一个连接
FIN-WAIT-1: 等待远程TCP连接中断请求,或先前的连接中断请求的确认
FIN-WAIT-2: 从远程TCP等待连接中断请求
CLOSE-WAIT: 等待从本地用户发来的连接中断请求
LAST-ACK: 等待原来的发向远程TCP的连接中断请求的确认
TIME-WAIT: 等待足够的时间以确保远程TCP接收到连接中断请求的确认
CLOSED: 没有任何连接状态
comments powered by Disqus