31. 如果服务器出现了大量CLOSE_WAIT状态如何解决。
我们先来复习下TCP的四次挥手
-
服务器端收到客户端发送的
FIN
后,TCP协议栈就会自动发送ACK,接着进入CLOSE_WAIT状态。 -
但是如果服务器端不执行socket的close()操作,那么就没法进入LAST_ACK,导致大量连接处于CLOSE_WAIT状态
-
所以,如果服务器出现了大量CLOSE_WAIT状态,一般是程序Bug,或者关闭socket不及时。
32. URI和URL的区别
-
URI,全称是Uniform Resource Identifier),中文翻译是统一资源标志符,主要作用是唯一标识一个资源。
-
URL,全称是Uniform Resource Location),中文翻译是统一资源定位符,主要作用是提供资源的路径。打个经典比喻吧,URI像是身份证,可以唯一标识一个人,而URL更像一个住址,可以通过URL找到这个人。
33. ICMP协议的功能
ICMP,Internet Control Message Protocol ,Internet控制消息协议。
-
ICMP协议是一种面向无连接的协议,用于传输出错报告控制信息。
-
它是一个非常重要的协议,它对于网络安全具有极其重要的意义。它属于网络层协议,主要用于在主机与路由器之间传递控制信息,包括报告错误、交换受限控制和状态信息等。
-
当遇到IP数据无法访问目标、IP路由器无法按当前的传输速率转发数据包等情况时,会自动发送ICMP消息。
比如我们日常使用得比较多的ping,就是基于ICMP的。
35. 说下ping的原理
★ping,Packet Internet Groper,是一种因特网包探索器,用于测试网络连接量的程序。Ping是工作在TCP/IP网络体系结构中应用层的一个服务命令, 主要是向特定的目的主机发送ICMP(Internet Control Message Protocol 因特网报文控制协议) 请求报文,测试目的站是否可达及了解其有关状态
”
一般来说,ping可以用来检测网络通不通。它是基于ICMP
协议工作的。假设机器A ping机器B,工作过程如下:
-
ping通知系统,新建一个固定格式的ICMP请求数据包
-
ICMP协议,将该数据包和目标机器B的IP地址打包,一起转交给IP协议层
-
IP层协议将本机IP地址为源地址,机器B的IP地址为目标地址,加上一些其他的控制信息,构建一个IP数据包
-
先获取目标机器B的MAC地址。
-
数据链路层构建一个数据帧,目的地址是IP层传过来的MAC地址,源地址是本机的MAC地址
-
机器B收到后,对比目标地址,和自己本机的MAC地址是否一致,符合就处理返回,不符合就丢弃。
-
根据目的主机返回的ICMP回送回答报文中的时间戳,从而计算出往返时间
-
最终显示结果有这几项:发送到目的主机的IP地址、发送 & 收到 & 丢失的分组数、往返时间的最小、最大& 平均值
36. 请详细介绍一下TCP 的三次握手机制
思路: TCP连接的三次握手机制,最重要的知识点,必须得会,通讯过程以及客户端、服务器的对应的状态都需要记住哈。
TCp提供可靠的连接服务,连接是通过三次握手进行初始化的。三次握手的目的就是同步连接双方的序列号和确认号并交换TCP窗口大小信息。我们一起来看下流程图哈:
TCP三次握手
-
第一次握手(SYN=1, seq=x),发送完毕后,客户端就进入SYN_SEND状态
-
第二次握手(SYN=1, ACK=1, seq=y, ACKnum=x+1), 发送完毕后,服务器端就进入SYN_RCV状态。
-
第三次握手(ACK=1,ACKnum=y+1),发送完毕后,客户端进入ESTABLISHED状态,当服务器端接收到这个包时,也进入ESTABLISHED状态。
37. TCP握手为什么是三次,为什么不能是两次?不能是四次?
思路: TCP握手为什么不能是两次,为什么不能是四次呢?为了方便理解,我们以男孩子和女孩子谈恋爱为例子:两个人能走到一起,最重要的事情就是相爱,就是我爱你,并且我知道,你也爱我,接下来我们以此来模拟三次握手的过程:
为什么握手不能是两次呢?
如果只有两次握手,女孩子可能就不知道,她的那句我也爱你,男孩子是否收到,恋爱关系就不能愉快展开。
为什么握手不能是四次呢?
因为握手不能是四次呢?因为三次已经够了,三次已经能让双方都知道:你爱我,我也爱你。而四次就多余了。
38. 说说TCP四次挥手过程
思路: TCP的四次挥手,也是最重要的知识点,一般跟三次握手会一起考的,必须得记住。
TCP四次挥手过程
-
第一次挥手(FIN=1,seq=u),发送完毕后,客户端进入FIN_WAIT_1状态。
-
第二次挥手(ACK=1,ack=u+1,seq =v),发送完毕后,服务器端进入CLOSE_WAIT状态,客户端接收到这个确认包之后,进入FIN_WAIT_2状态。
-
第三次挥手(FIN=1,ACK1,seq=w,ack=u+1),发送完毕后,服务器端进入LAST_ACK状态,等待来自客户端的最后一个ACK。
-
第四次挥手(ACK=1,