网络面试题你只要知道这12题就够了( 二 )


为了避免端口重用带来的数据混淆 。如果client直接进入CLOSED状态,又用相同端口号向server建立一个连接,上一次连接的部分数据在网络中延迟到达server,数据就可能发生混淆了 。
 
六、TCP怎么保证传输过程的可靠性?校验和:发送方在发送数据之前计算校验和,接收方收到数据后同样计算,如果不一致,那么传输有误 。
确认应答,序列号:TCP进行传输时数据都进行了编号,每次接收方返回ACK都有确认序列号 。
超时重传:如果发送方发送数据一段时间后没有收到ACK,那么就重发数据 。
连接管理:三次握手和四次挥手的过程 。
流量控制:TCP协议报头包含16位的窗口大小,接收方会在返回ACK时同时把自己的即时窗口填入,发送方就根据报文中窗口的大小控制发送速度 。
拥塞控制:刚开始发送数据的时候,拥塞窗口是1,以后每次收到ACK,则拥塞窗口+1,然后将拥塞窗口和收到的窗口取较小值作为实际发送的窗口,如果发生超时重传,拥塞窗口重置为1 。这样做的目的就是为了保证传输过程的高效性和可靠性 。
 
七、说下浏览器请求一个网址的过程?首先通过DNS服务器把域名解析成IP地址,通过IP和子网掩码判断是否属于同一个子网
构造应用层请求http报文,传输层添加TCP/UDP头部,网络层添加IP头部,数据链路层添加以太网协议头部
数据经过路由器、交换机转发,最终达到目标服务器,目标服务器同样解析数据,最终拿到http报文,按照对应的程序的逻辑响应回去 。

网络面试题你只要知道这12题就够了

文章插图
 
八、知道HTTPS的工作原理吗?用户通过浏览器请求https网站,服务器收到请求,选择浏览器支持的加密和hash算法,同时返回数字证书给浏览器,包含颁发机构、网址、公钥、证书有效期等信息 。
浏览器对证书的内容进行校验,如果有问题,则会有一个提示警告 。否则,就生成一个随机数X,同时使用证书中的公钥进行加密,并且发送给服务器 。
服务器收到之后,使用私钥解密,得到随机数X,然后使用X对网页内容进行加密,返回给浏览器
浏览器则使用X和之前约定的加密算法进行解密,得到最终的网页内容
网络面试题你只要知道这12题就够了

文章插图
 
九、负载均衡有哪些实现方式?DNS:这是最简单的负载均衡的方式,一般用于实现地理级别的负载均衡,不同地域的用户通过DNS的解析可以返回不同的IP地址,这种方式的负载均衡简单,但是扩展性太差,控制权在域名服务商 。
Http重定向:通过修改Http响应头的Location达到负载均衡的目的,Http的302重定向 。这种方式对性能有影响,而且增加请求耗时 。
反向代理:作用于应用层的模式,也被称作为七层负载均衡,比如常见的Nginx,性能一般可以达到万级 。这种方式部署简单,成本低,而且容易扩展 。
IP:作用于网络层的和传输层的模式,也被称作四层负载均衡,通过对数据包的IP地址和端口进行修改来达到负载均衡的效果 。常见的有LVS(linux Virtual Server),通常性能可以支持10万级并发 。
按照类型来划分的话,还可以分成DNS负载均衡、硬件负载均衡、软件负载均衡 。
其中硬件负载均衡价格昂贵,性能最好,能达到百万级,软件负载均衡包括Nginx、LVS这种 。
 
十、说说BIO/NIO/AIO的区别?BIO:同步阻塞IO,每一个客户端连接,服务端都会对应一个处理线程,对于没有分配到处理线程的连接就会被阻塞或者拒绝 。相当于是一个连接一个线程 。
网络面试题你只要知道这12题就够了

文章插图
 
NIO:同步非阻塞IO,基于Reactor模型,客户端和channel进行通信,channel可以进行读写操作,通过多路复用器selector来轮询注册在其上的channel,而后再进行IO操作 。这样的话,在进行IO操作的时候再用一个线程去处理就可以了,也就是一个请求一个线程 。
网络面试题你只要知道这12题就够了

文章插图
 
AIO:异步非阻塞IO,相比NIO更进一步,完全由操作系统来完成请求的处理,然后通知服务端开启线程去进行处理,因此是一个有效请求一个线程 。
 
十一、那么你怎么理解同步和阻塞?首先,可以认为一个IO操作包含两个部分:
发起IO请求
实际的IO读写操作
同步和异步在于第二个,实际的IO读写操作,如果操作系统帮你完成了再通知你,那就是异步,否则都叫做同步 。


推荐阅读