三次握手具体:
-
第一次握手:客户端发送syn包(syn=x)到服务器,并进入SYN_SEND状态,等待服务器确认;
-
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(syn=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;
-
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
四次挥手:
-
客户端发送FIN包,用来关闭客户端到服务端的数据连接,客户端进入FIN_WAIT1状态
-
2. 服务端收到FIN包后返回一个ACK包,进入CLOSE_WAIT状态
-
3. 客户端收到FIN的应答后进入FIN_WAIT2状态
-
4. 服务端发送FIN请求包,用来关闭服务端到客户端端的数据连接,进入LAST_ACK状态
-
5. 客户端收到FIN请求包后,发送ACK包给服务端,进入TIME_WAIT状态
-
6. 服务器收到ACK应答后,进入close状态。
为什么要进行三次握手:
-
为了保证服务端能收接受到客户端的信息并能做出正确的应答而进行前两次(第一次和第二次)握手,为了保证客户端能够接收到服务端的信息并能做出正确的应答而进行后两次(第二次和第三次)握手。
为什么要进行四次挥手
-
因为TCP是全双工的,客户端和服务端都需要FIN报文和ACK报文,客户端断开连接需要两次挥手,服务端断开连接也需要两次挥手。
TIME_WAIT有什么用:
-
确保有足够的时间让对方收到ACK包,如果ACK包丢失了,还可以再重传。
服务器出现大量CLOSE_WAIT状态的原因:
-
客户端关闭了连接,而服务端没有关闭。一般来说是程序有bug,可能是资源未释放或者线程池的线程配置不合理。
滑动窗口协议: 用于网络数据传输时的流量控制,以避免拥塞的发生。·
-
发送窗口的位置由窗口前沿和后沿的位置共同确定。窗口越大,发送发就可以在接收到对方确认之前连续发送更多的数据,可以多的更高的传输速率。如果窗口的前沿位置收到了期望收到的序号,那么窗口发生滑动。
在浏览器输入一个URL访问的整个流程:
-
首先DNS域名服务器,解析URL得到服务器的ip地址。
-
与服务器建立Tcp连接
-
发送HTTP请求,建立HTTP连接。
-
服务器处理HTTP请求,并返回HTTP报文
-
浏览器渲染页面。
常见HTTP状态码:
-
200:访问成功
-
400(Bad Request):客户端请求有问题,服务端无法处理。
-
401( Unauthorized):未经授权。
-
403(Forbidden):服务器拒绝服务。
-
404(Not Fount):请求资源不存在。
-
500(Internal Server Error):服务端发生错误
-
503(Server Unavaliable):服务端当前不能处理客户端请求,一段时间后可能恢复。
Cookie和Session的区别:
-
Cookie是存储在客户端的,Session是存储在服务端的。
-
Session更加安全
-
使用Cookie可以减少服务端压力。
GET和POST请求区别:
-
get将请求信息放在url后面,post放在报文体中。
-
post更安全,一般使用get做查询,使用post做增删改。
-
get能被浏览器缓存,post不行。
HTTP与HTTPS的区别:
-
HTTPS需要到CA申请证书,HTTP不需要。
-
HTTPS密文传输,HTTP明文传输。
-
HTTPS默认使用443端口,HTTP使用80端口
-
HTTPS就是使用SSL加了密的HTTP,更安全。