面试汇总(四):计算机网络常见面试总结(二)

前言

  上一篇文章我们介绍了在面试中计算机网络常见的面试题。这篇文章我们继续给大家介绍常见的问题。

面试题及参考答案

  接着上篇文章,我们继续介绍。

5、 请你说一说IP地址作用,以及MAC地址作用

  MAC地址是一个硬件地址,用来定义网络设备的位置,主要由数据链路层负责。而IP地址是IP协议提供的一种统一的地址格式,为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。

6、请回答OSI七层模型和TCP/IP四层模型,每层列举2个协议

  • OSI七层模型及其包含的协议如下:
    1、物理层: 通过媒介传输比特,确定机械及电气规范,传输单位为bit,主要包括的协议为:IEE802.3 CLOCK RJ45
    2、数据链路层: 将比特组装成帧和点到点的传递,传输单位为帧,主要包括的协议为MAC VLAN PPP
    3、网络层: 负责数据包从源到宿的传递和网际互连,传输单位为包,主要包括的协议为IP ARP ICMP
    4、传输层: 提供端到端的可靠报文传递和错误恢复,传输单位为报文,主要包括的协议为TCP UDP
    5、会话层: 建立、管理和终止会话,传输单位为SPDU,主要包括的协议为RPC NFS
    6、表示层: 对数据进行翻译、加密和压缩,传输单位为PPDU,主要包括的协议为JPEG ASII
    7、 应用层: 允许访问OSI环境的手段,传输单位为APDU,主要包括的协议为FTP HTTP DNS
  • TCP/IP 4层模型包括:
    网络接口层: MAC VLAN
    网络层: IP ARP ICMP
    传输层: TCP UDP
    应用层: HTTP DNS SMTP

6.1 TCP/IP的网络模型

  • TCP/IP模型是一系列网络协议的总称,这些协议的目的是使得计算机之间可以进行信息交换,
  • TCP/IP模型四层架构从下到上分别是链路层,网络层,传输层,应用层
  • 链路层的作用是负责建立电路连接,是整个网络的物理基础,典型的协议包括以太网,ADSL等,
  • 网络层负责分配地址和传送二进制数据,主要协议是IP协议, 传输层负责传送文本数据,主要协议是TCP
  • 应用层负责传送各种最终形态的数据,是直接与用户信息打交道的层,主要协议是http,ftp等

6.2 请你说一说两个机器之间的通讯过程?以及计算机网络为什么有七层?

  PC1 首先判断目标ip是否和自己在同一网段,是就进行ARP广播,解析出MAC地址。不是,则将网关的MAC地址作为MAC地址。
  PC1封装的数据包括目标、源的端口号、IP、MAC地址。
  交换机收到数据后,对比MAC地址表,知道从哪个口发出数据。
  路由收到数据后根据路由表将数据发往下一个目标地。
  最后一个路由通过ARP解析出PC2的MAC地址。
  路由封装的数据包括目标、源的端口号、IP、MAC地址。
  建立七层模型的主要目的是为解决异种网络互连时所遇到的兼容性问题。它的最大优点是将服务、接口和协议这三个概念明确地区分开来:服务说明某一层为上一层提供一些什么功能,接口说明上一层如何使用下层的服务,而协议涉及如何实现本层的服务;这样各层之间具有很强的独立性,互连网络中各实体采用什么样的协议是没有限制的,只要向上提供相同的服务并且不改变相邻层的接口就可以了。网络七层的划分也是为了使网络的不同功能模块(不同层次)分担起不同的职责,从而带来如下好处:
  ● 减轻问题的复杂程度,一旦网络发生故障,可迅速定位故障所处层次,便于查找和纠错;
  ● 在各层分别定义标准接口,使具备相同对等层的不同网络设备能实现互操作,各层之间则相对独立,一种高层协议可放在多种低层协议上运行;
  ● 能有效刺激网络技术革新,因为每次更新都可以在小范围内进行,不需对整个网络动大手术;

7、搜索baidu,会用到计算机网络中的什么层?每层是干什么的

  • 浏览器中输入URL: 浏览器要将URL解析为IP地址,解析域名就要用到DNS协议,首先主机会查询DNS的缓存,如果没有就给本地DNS发送查询请求。DNS查询分为两种方式,一种是递归查询,一种是迭代查询。如果是迭代查询,本地的DNS服务器,向根域名服务器发送查询请求,根域名服务器告知该域名的一级域名服务器,然后本地服务器给该一级域名服务器发送查询请求,然后依次类推直到查询到该域名的IP地址。DNS服务器是基于UDP的,因此会用到UDP协议
      得到IP地址后,浏览器就要与服务器建立一个http连接。因此要用到http协议,http协议报文格式上面已经提到。http生成一个get请求报文,将该报文传给TCP层处理,所以还会用到TCP协议。如果采用https还会使用https协议先对http数据进行加密。TCP层如果有需要先将HTTP数据包分片,分片依据路径MTU和MSS。TCP的数据包然后会发送给IP层,用到IP协议。IP层通过路由选路,一跳一跳发送到目的地址。当然在一个网段内的寻址是通过以太网协议实现(也可以是其他物理层协议,比如PPP,SLIP),以太网协议需要直到目的IP地址的物理地址,又需要ARP协议
  • 其中:
    1、DNS协议,http协议,https协议属于应用层
    2、TCP/UDP属于传输层
    3、IP协议,ARP协议属于网络层
    4、数据链路层
    5、物理层
  • 作用
      应用层是体系结构中的最高层。 应用层确定进程之间通信的性质以满足用户的需要。这里的进程就是指正在运行的程序。应用层不仅要提供应用进程所需要的信息交换和远地操作,而且还要作为互相作用的应用进程的用户代理,来完成一些为进行语义上有意义的信息交换所必须的功能。应用层直接为用户的应用进程提供服务。
       传输层的任务就是负责主机中两个进程之间的通信。 因特网的传输层可使用两种不同协议:即面向连接的传输控制协议TCP,和无连接的用户数据报协议UDP。面向连接的服务能够提供可靠的交付,但无连接服务则不保证提供可靠的交付,它只是“尽最大努力交付”。这两种服务方式都很有用,备有其优缺点。在分组交换网内的各个交换结点机都没有传输层。
       网络层负责为分组交换网上的不同主机提供通信。 在发送数据时,网络层将运输层产生的报文段或用户数据报封装成分组或包进行传送。在TCP/IP体系中,分组也叫作IP数据报,或简称为数据报。网络层的另一个任务就是要选择合适的路由,使源主机运输层所传下来的分组能够交付到目的主机。
      当发送数据时,数据链路层的任务是将在网络层交下来的IP数据报组装成帧,在两个相邻结点间的链路上传送以帧为单位的数据。每一帧包括数据和必要的控制信息(如同步信息、地址信息、差错控制、以及流量控制信息等)。控制信息使接收端能够知道—个帧从哪个比特开始和到哪个比特结束。控制信息还使接收端能够检测到所收到的帧中有无差错。
      物理层的任务就是透明地传送比特流。 在物理层上所传数据的单位是比特。传递信息所利用的一些物理媒体,如双绞线、同轴电缆、光缆等,并不在物理层之内而是在物理层的下面。因此也有人把物理媒体当做第0层。

8、请你说说TCP/IP数据链路层的交互过程

   网络层等到数据链层用mac地址作为通信目标,数据包到达网络等准备往数据链层发送的时候,首先会去自己的arp缓存表(存着ip-mac对应关系)去查找改目标ip的mac地址,如果查到了,就讲目标ip的mac地址封装到链路层数据包的包头。如果缓存中没有找到,会发起一个广播:who is ip XXX tell ip XXX,所有收到的广播的机器看这个ip是不是自己的,如果是自己的,则以单拨的形式将自己的mac地址回复给请求的机器

9、请你说说传递到IP层怎么知道报文该给哪个应用程序,它怎么区分UDP报文还是TCP报文

根据端口区分: 看ip头中的协议标识字段,17是udp,6是tcp

9.1 TCP和UDP的区别和各自适用的场景

  • TCP和UDP区别
    1、连接
      TCP是面向连接的传输层协议,即传输数据之前必须先建立好连接。
      UDP无连接。
    2、服务对象
      TCP是点对点的两点间服务,即一条TCP连接只能有两个端点;
      UDP支持一对一,一对多,多对一,多对多的交互通信。
    3、 可靠性
      TCP是可靠交付:无差错,不丢失,不重复,按序到达。
      UDP是尽最大努力交付,不保证可靠交付。
    4、拥塞控制,流量控制
      TCP有拥塞控制和流量控制保证数据传输的安全性。
      UDP没有拥塞控制,网络拥塞不会影响源主机的发送效率。
    5、报文长度
      TCP是动态报文长度,即TCP报文长度是根据接收方的窗口大小和当前网络拥塞情况决定的。
      UDP面向报文,不合并,不拆分,保留上面传下来报文的边界。
    6、首部开销
      TCP首部开销大,首部20个字节。
      UDP首部开销小,8字节。(源端口,目的端口,数据长度,校验和)
    + TCP和UDP适用场景
      从特点上我们已经知道,TCP 是可靠的但传输速度慢,UDP 是不可靠的但传输速度快。因此在选用具体协议通信时,应该根据通信数据的要求而决定。当对网络通讯质量有要求的时候,比如:整个数据要准确无误的传递给对方,这往往用于一些要求可靠的应用,比如HTTP、HTTPS、FTP等传输文件的协议,POP、SMTP等邮件传输的协议
      若通信数据完整性需让位与通信实时性,则应该选用TCP 协议(如文件传输、重要状态的更新等);反之,则使用 UDP 协议(如视频传输、实时通信等)。

9.2 请你来介绍一下udp的connect函数

  除非套接字已连接,否则异步错误是不会反悔到UDP套接字的。我们确实可以给UDP套接字调用connect,然而这样做的结果却与TCP连接不同的是没有三路握手过程。内核只是检查是否存在立即可知的错误,记录对端的IP地址和端口号,然后立即返回调用进程。对于已连接UDP套接字,与默认的未连接UDP套接字相比,发生了三个变化。其实一旦UDP套接字调用了connect系统调用,那么这个UDP上的连接就变成一对一的连接,但是通过这个UDP连接传输数据的性质还是不变的,仍然是不可靠的UDP连接。一旦变成一对一的连接,在调用系统调用发送和接受数据时也就可以使用TCP那一套系统调用了。
1、我们再也不能给输出操作指定目的IP地址和端口号。也就是说,我们不使用sendto,而改用write或send。写到已连接UDP套接字上的任何内容都自动发送到由connect指定的协议地址。可以给已连接的UDP套接字调用sendto,但是不能指定目的地址。sendto的第五个参数必须为空指针,第六个参数应该为0.
2、不必使用recvfrom以获悉数据报的发送者,而改用read、recv或recvmsg。在一个已连接UDP套接字上,由内核为输入操作返回的数据报只有那些来自connect指定协议地址的数据报。这样就限制一个已连接UDP套接字能且仅能与一个对端交换数据报。
3、由已连接UDP套接字引发的异步错误会返回给它们所在的进程,而未连接的UDP套接字不接收任何异步错误。
  来自任何其他IP地址或断开的数据报不投递给这个已连接套接字,因为它们要么源IP地址要么源UDP端口不与该套接字connect到的协议地址相匹配。
  UDP客户进程或服务器进程只在使用自己的UDP套接字与确定的唯一对端进行通信时,才可以调用connect。调用connect的通常是UDP客户,不过有些网络应用中的UDP服务器会与单个客户长时间通信TFTP,这种情况下,客户和服务器都可能调用connect。

9.2、ip报文经过一个路由器改变哪些字段?

源和目的的IP地址,源和目的的MAC地址以及TTL值。

9.3、 请你回答一下ipv6的位数

IPv6的128位地址通常写成8组,每组由四个十六进制数组成。

9.4 请你说说TCP和UDP用一个端口发送信息是否冲突

  不冲突,TCP、UDP可以绑定同一端口来进行通信,许多协议已经这样做了,例如DNS适用于udp / 53和tcp / 53。因为数据接收时时根据五元组{传输协议,源IP,目的IP,源端口,目的端口}判断接受者的。

10、 请问你有没有基于做过socket的开发?具体网络层的操作该怎么做?

服务端: socket-bind-listen-accept
客户端: socket-connect

10.1 请你来说一下socket编程中服务器端和客户端主要用到哪些函数

  • 基于TCP的socket:
    1、服务器端程序:
    a、创建一个socket,用函数socket()
    b、绑定IP地址、端口等信息到socket上,用函数bind()
    c、设置允许的最大连接数,用函数listen()
    d、接收客户端上来的连接,用函数accept()
    f、收发数据,用函数send()和recv(),或者read()和write()
    g、关闭网络连接
    2、客户端程序:
    (1)、创建一个socket,用函数socket()
    (2)、设置要连接的对方的IP地址和端口等属性
    (3)、连接服务器,用函数connect()
    (4)、收发数据,用函数send()和recv(),或read()和write()
    (5)、关闭网络连接
  • 基于UDP的socket:
    1、服务器端流程
    1建立套接字文件描述符,使用函数socket(),生成套接字文件描述符。
    2设置服务器地址和侦听端口,初始化要绑定的网络地址结构。
    3绑定侦听端口,使用bind()函数,将套接字文件描述符和一个地址类型变量进行绑定。
    4接收客户端的数据,使用recvfrom()函数接收客户端的网络数据。
    5向客户端发送数据,使用sendto()函数向服务器主机发送数据。
    6关闭套接字,使用close()函数释放资源。UDP协议的客户端流程
    2、客户端流程
    1建立套接字文件描述符,socket()。
    2设置服务器地址和端口,struct sockaddr。
    3向服务器发送数据,sendto()。
    4接收服务器的数据,recvfrom()。
    5关闭套接字,close()。
    具体过程如下:

10.2 请你讲述一下Socket编程的send() recv() accept() socket()函数?

  • send函数用来向TCP连接的另一端发送数据。客户程序一般用send函数向服务器发送请求,而服务器则通常用send函数来向客户程序发送应答,send的作用是将要发送的数据拷贝到缓冲区,协议负责传输。
    recv函数用来从TCP连接的另一端接收数据,当应用程序调用recv函数时,recv先等待s的发送缓冲中的数据被协议传送完毕,然后从缓冲区中读取接收到的内容给应用层。
    accept函数用了接收一个连接,内核维护了半连接队列和一个已完成连接队列,当队列为空的时候,accept函数阻塞,不为空的时候accept函数从上边取下来一个已完成连接,返回一个文件描述符。

11、请问server端监听端口,但还没有客户端连接进来,此时进程处于什么状态?

这个需要看服务端的编程模型,如果如上一个问题的回答描述的这样,则处于阻塞状态,如果使用了epoll,select等这样的io复用情况下,处于运行状态

12、请你来说一下数字证书是什么,里面都包含那些内容

  • 概念:
       数字证书是数字证书在一个身份和该身份的持有者所拥有的公/私钥对之间建立了一种联系,由认证中心(CA)或者认证中心的下级认证中心颁发的。根证书是认证中心与用户建立信任关系的基础。在用户使用数字证书之前必须首先下载和安装。认证中心是一家能向用户签发数字证书以确认用户身份的管理机构。为了防止数字凭证的伪造,认证中心的公共密钥必须是可靠的,认证中心必须公布其公共密钥或由更高级别的认证中心提供一个电子凭证来证明其公共密钥的有效性,后一种方法导致了多级别认证中心的出现。
  • 数字证书颁发过程:
       数字证书颁发过程如下:用户产生了自己的密钥对,并将公共密钥及部分个人身份信息传送给一家认证中心。认证中心在核实身份后,将执行一些必要的步骤,以确信请求确实由用户发送而来,然后,认证中心将发给用户一个数字证书,该证书内附了用户和他的密钥等信息,同时还附有对认证中心公共密钥加以确认的数字证书。当用户想证明其公开密钥的合法性时,就可以提供这一数字证书。
  • 内容:
       数字证书的格式普遍采用的是X.509V3国际标准,一个标准的X.509数字证书包含以下一些内容:
    1、证书的版本信息;
    2、证书的序列号,每个证书都有一个唯一的证书序列号;
    3、证书所使用的签名算法;
    4、证书的发行机构名称,命名规则一般采用X.500格式;
    5、证书的有效期,通用的证书一般采用UTC时间格式;
    6、证书所有人的名称,命名规则一般采用X.500格式;
    7、证书所有人的公开密钥;
    8、证书发行者对证书的签名。

13、请简单解释一下,arp协议和arp攻击。

地址解析协议。ARP攻击的第一步就是ARP欺骗。由上述“ARP协议的工作过程”我们知道,ARP协议基本没有对网络的安全性做任何思考,当时人们考虑的重点是如何保证网络通信能够正确和快速的完成——ARP协议工作的前提是默认了其所在的网络是一个善良的网络,每台主机在向网络中发送应答信号时都是使用的真实身份。不过后来,人们发现ARP应答中的IP地址和MAC地址中的信息是可以伪造的,并不一定是自己的真实IP地址和MAC地址,由此,ARP欺骗就产生了。

14、什么是icmp协议,它的作用是什么?

它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。

15、请你讲一下路由器和交换机的区别?

交换机用于同一网络内部数据的快速传输转发决策通过查看二层头部完成转发不需要修改数据帧工作在 TCP/IP 协议的二层 —— 数据链路层工作简单,直接使用硬件处理路由器用于不同网络间数据的跨网络传输转发决策通过查看三层头部完成转发需要修改 TTL ,IP 头部校验和需要重新计算,数据帧需要重新封装工作在 TCP/IP 协议的三层 —— 网络层工作复杂,使用软件处理。

16、请你谈谈DNS的寻址过程。

1、在浏览器中输入www.qq.com域名,操作系统会先检查自己本地的hosts文件是否有这个网址映射关系,如果有,就先调用这个IP地址映射,完成域名解析。
2、如果hosts里没有这个域名的映射,则查找本地DNS解析器缓存,是否有这个网址映射关系,如果有,直接返回,完成域名解析。
3、如果hosts与本地DNS解析器缓存都没有相应的网址映射关系,首先会找TCP/ip参数中设置的首选DNS服务器,在此我们叫它本地DNS服务器,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。
4、如果要查询的域名,不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性。
5、如果本地DNS服务器本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置(是否设置转发器)进行查询,如果未用转发模式,本地DNS就把请求发至13台根DNS,根DNS服务器收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个IP。本地DNS服务器收到IP信息后,将会联系负责.com域的这台服务器。这台负责.com域的服务器收到请求后,如果自己无法解析,它就会找一个管理.com域的下一级DNS服务器地址(qq.com)给本地DNS服务器。当本地DNS服务器收到这个地址后,就会找qq.com域服务器,重复上面的动作,进行查询,直至找到www.qq.com主机。
6、如果用的是转发模式,此DNS服务器就会把请求转发至上一级DNS服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根DNS或把转请求转至上上级,以此循环。不管是本地DNS服务器用是是转发,还是根提示,最后都是把结果返回给本地DNS服务器,由此DNS服务器再返回给客户机。
  从客户端到本地DNS服务器是属于递归查询,而DNS服务器之间就是的交互查询就是迭代查询。

16.1 请你说一说DNS解析过程

1、浏览器先检查自身缓存中有没有被解析过的这个域名对应的ip地址,如果有,解析结束。同时域名被缓存的时间也可通过TTL属性来设置。
2、如果浏览器缓存中没有(专业点叫还没命中),浏览器会检查操作系统缓存中有没有对应的已解析过的结果。而操作系统也有一个域名解析的过程。在windows中可通过c盘里一个叫hosts的文件来设置,如果你在这里指定了一个域名对应的ip地址,那浏览器会首先使用这个ip地址。但是这种操作系统级别的域名解析规程也被很多黑客利用,通过修改你的hosts文件里的内容把特定的域名解析到他指定的ip地址上,造成所谓的域名劫持。所以在windows7中将hosts文件设置成了readonly,防止被恶意篡改。
3.如果至此还没有命中域名,才会真正的请求本地域名服务器(LDNS)来解析这个域名,这台服务器一般在你的城市的某个角落,距离你不会很远,并且这台服务器的性能都很好,一般都会缓存域名解析结果,大约80%的域名解析到这里就完成了。
4. 如果LDNS仍然没有命中,就直接跳到Root Server 域名服务器请求解析
5. 根域名服务器返回给LDNS一个所查询域的主域名服务器(gTLD Server,国际顶尖域名服务器,如.com .cn .org等)地址
6. 此时LDNS再发送请求给上一步返回的gTLD
7. 接受请求的gTLD查找并返回这个域名对应的Name Server的地址,这个Name Server就是网站注册的域名服务器
8. Name Server根据映射关系表找到目标ip,返回给LDNS
9. LDNS缓存这个域名和对应的ip
10. LDNS把解析的结果返回给用户,用户根据TTL值缓存到本地系统缓存中,域名解析过程至此结束

17、请你简单讲解一下,负载均衡 反向代理模式的优点、缺点

(1)反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。
(2)反向代理负载均衡技术是把将来自internet上的连接请求以反向代理的方式动态地转发给内部网络上的多台服务器进行处理,从而达到负载均衡的目的。
(3)反向代理负载均衡能以软件方式来实现,如apache mod_proxy、netscape proxy等,也可以在高速缓存器、负载均衡器等硬件设备上实现。反向代理负载均衡可以将优化的负载均衡策略和代理服务器的高速缓存技术结合在一起,提升静态网页的访问速度,提供有益的性能;由于网络外部用户不能直接访问真实的服务器,具备额外的安全性(同理,NAT负载均衡技术也有此优点)。
(4)其缺点主要表现在以下两个方面
  反向代理是处于OSI参考模型第七层应用的,所以就必须为每一种应用服务专门开发一个反向代理服务器,这样就限制了反向代理负载均衡技术的应用范围,现在一般都用于对web服务器的负载均衡。
  针对每一次代理,代理服务器就必须打开两个连接,一个对外,一个对内,因此在并发连接请求数量非常大的时候,代理服务器的负载也就非常大了,在最后代理服务器本身会成为服务的瓶颈。
  一般来讲,可以用它来对连接数量不是特别大,但每次连接都需要消耗大量处理资源的站点进行负载均衡,如search等。

18、cdn原理

  CDN的全称是Content Delivery Network,即内容分发网络。CDN的基本原理是广泛采用各种缓存服务器,将这些缓存服务器分布到用户访问相对集中的地区或网络中,在用户访问网站时,利用全局负载技术将用户的访问指向距离最近的工作正常的缓存服务器上,由缓存服务器直接响。

19、websocket和ajax的区别是什么,websocket的应用场景有哪些?

  WebSocket的诞生本质上就是为了解决HTTP协议本身的单向性问题:请求必须由客户端向服务端发起,然后服务端进行响应。这个Request-Response的关系是无法改变的。对于一般的网页浏览和访问当然没问题,一旦我们需要服务端主动向客户端发送消息时就麻烦了,因为此前的TCP连接已经释放,根本找不到客户端在哪。
  为了能及时从服务器获取数据,程序员们煞费苦心研究出来的各种解决方案其实都是在HTTP框架下做的妥协,浏览器只支持HTTP,所以大家要么定时去轮询,要么就靠长连接——客户端发起请求,服务端把这个连接攥在手里不回复,等有消息了再回,如果超时了客户端就再请求一次——其实大家也懂,这只是个减少了请求次数、实时性更好的轮询,本质没变。
  WebSocket就是从技术根本上解决这个问题的:看名字就知道,它借用了Web的端口和消息头来创建连接,后续的数据传输又和基于TCP的Socket几乎完全一样,但封装了好多原本在Socket开发时需要我们手动去做的功能。比如原生支持wss安全访问(跟https共用端口和证书)、创建连接时的校验、从数据帧中自动拆分消息包等等。
  当我们了解了WebSocket的背景和特性之后,就可以回答它能不能取代AJAX这个问题了:
  对于服务器与客户端的双向通信,WebSocket简直是不二之选。如果不是还有少数旧版浏览器尚在服役的话,所有的轮询、长连接等方式早就该废弃掉。那些整合多种双向推送消息方式的库(如http://Socket.IO、SignalR)当初最大的卖点就是兼容所有浏览器版本,自动识别旧版浏览器并采取不同的连接方式,现在也渐渐失去了优势——所有新版浏览器都兼容WebSocket,直接用原生的就行了。
  但是讲真的,这点很像jQuery,在原生js难用时迅速崛起,当其他库和原生js都吸收了它的很多优势时,慢慢就不那么重要了。但是,很大一部分AJAX的使用场景仍然是传统的请求-响应形式,比如获取json数据、post表单之类。这些功能虽然靠WebSocket也能实现,但就像在原本传输数据流的TCP之上定义了基于请求的HTTP协议一样,我们也要在WebSocket之上重新定义一种新的协议,最少也要加个request id用来区分每次响应数据对应的请求吧。
  另外还有一种情况,也就是传输大文件、图片、媒体流的时候,最好还是老老实实用HTTP来传。如果一定要用WebSocket的话,至少也专门为这些数据专门开辟个新通道,而别去占用那条用于推送消息、对实时性要求很强的连接。否则会把串行的WebSocket彻底堵死的。
  所以说,WebSocket在用于双向传输、推送消息方面能够做到灵活、简便、高效,但在普通的Request-Response过程中并没有太大用武之地,比起普通的HTTP请求来反倒麻烦了许多,甚至更为低效。每项技术都有自身的优缺点,在适合它的地方能发挥出最大长处,而看到它的几个优点就不分场合地全方位推广的话,可能会适得其反。我们自己在开发能与手机通信的互联网机器人时就使用了WebSocket,效果很好。但并不是用它取代HTTP,而是取代了原先用于通信的基于TCP的Socket。

  • 优点
    1、原先在Socket连接后还要进行一些复杂的身份验证,同时要阻止未验证的连接发送控制指令。现在不需要了,在建立WebSocket连接的url里就能携带身份验证参数,验证不通过可以直接拒绝,不用设置状态;
    2、原先自己实现了一套类似SSL的非对称加密机制,现在完全不需要了,直接通过wss加密,还能顺便保证证书的可信性;
    3、原先要自己定义Socket数据格式,设置长度与标志,处理粘包、分包等问题,现在WebSocket收到的直接就是完整的数据包,完全不用自己处理;

20、请你回答一下搜索敏感词汇时,页面被重置的原理

  根据TCP协议的规定,用户和服务器建立连接需要三次握手:第一次握手用户向服务器发送SYN数据包发出请求(SYN, x:0),第二次握手服务器向用户发送SYN/ACK数据包发出回应(SYN/ACK, y:x+1),第三次握手用户向服务器发送ACK数据包发出确认(ACK, x+1:y+1),至此一个TCP连接建立成功。其中x为用户向服务器发送的序列号,y为服务器向用户发送的序列号。
  关键字检测,针对明文或者base64等弱加密通讯内容,与准备好的敏感词库进行匹配,当发现敏感词时,将服务器发回的SYN/ACK包改成SYN/ACK, Y:0,这代表TCP连接被重置,用户便主动放弃了连接,提示连接失败。让用户误认为服务器拒绝连接,而主动放弃继续与服务器连接,自动阻断记录含有敏感词的网页

21、从打开浏览器输入url到到达服务器上项目中某一个Controller上,请你来描述一下这一串过程

  这个过程中发生了网络通信,即利用tcp/ip协议簇进行网络通信,发送端由应用层往下走,接收端由数据链路层往上走,步骤如下:
1、浏览器输入url,其中http是协议
2、应用层DNS解析,返回对应的ip地址
3、应用层客户端发送http请求,
4、网络层ip查询mac地址,
5、传输层tcp传输报文
6、数据到达数据链路层,此时客户端发送请求结束
7、服务器在数据链路层收到数据包,再层层下上直到应用层,
8、服务器响应请求,查找客户端请求的资源并返回响应报文

22、请你介绍下session

  Session:在web开发中,服务器可以为每个用户创建一个会话对象(session对象),默认情况下一个浏览器独占一个session对象,因此在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的session中,当用户使用浏览器访问其他程序时,其他程序可以从用户的session中取出该用户的数据,为用户服务,其实现原理是服务器创建session出来后,会把session的id号,以cookie的形式回写给客户机,这样只要客户机的浏览器不关,再去访问服务器时,都会带着session的id号去,服务器发现客户机浏览器带session id过来了,就会使用内存中与之对应的session服务。
  Session和cookie的区别:
1、cookie是把用户的数据写给用户浏览器
2、session是把用户的数据写到用户独占的session中
3、session对象由服务器创建,开发人员可以调用request对象的getsession方法得到session对象

23、 请问你知道跨域吗,条件是什么,在header里需要加什么,有几种方案

  • 什么是跨域?
      浏览器从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一不同,都是跨域
  • 跨域的几种方案:
    1:基于script标签实现跨域
    2: 基于jquery跨域
    3: 通过iframe来跨子域

24、 请你来回答一下,比如淘宝的搜索算法,输入关键词,会给出搜索出来的商品结果,对于这样的算法,如何评价它的好坏?

  • 淘宝的搜索算法:
    1、目标性比较强,当然,这个相对而言,从query来看,用户对目标商品的认知度相对较强
    2、短query/符合query较多,传统搜索引擎里的xxx的商品这种query较少,当然,这与淘宝搜索的处理能力也有关系,用户对query进行分词的情况很常见
    3、属性类query较为常见,如雪纺、鱼嘴等等表明用户特征的query较为常见
    4、用户对结果的判断,基本上是价格敏感+信用敏感+销量敏感,其中销量敏感和信用敏感其实是一回事,来自知乎用户李杰。
      对于这样的算法,笔者认为是很符合淘宝搜索要求的,能够更加精准,

25、商品的种类有几十万种,在这种大数据的情况下,如何评价搜索算法的好坏?

  在大数据时代,搜索算法最重要有三点,足够快,能够将用户所潜在需要的商品全部搜索出来,性能稳定。

总结

  接着上篇文章,我们继续给大家介绍总结计算机网络在面试中的一些常见考题,截止这里,我们的计算机网络常见的问题都差不多结束了。本人之所以总结这些内容一方面是为了方便自己以后面试的复习,另外也是给大家再次面试相关岗位的时候提供复习方向以及思路解答。这里就需要我们对计算机网络有一个较为深层次的理解。于是,我们在准备的时候,首先就应该夯实基础,由于计算机网络的面试内容确实不少,希望我们花比较长的时间进行准备。只有这样才能在众多的面试者中脱颖而出。最后希望大家不断进步,都能尽早拿到自己比较满意的offer!!!!继续加油,未来可期!!!!

猜你喜欢

转载自blog.csdn.net/Oliverfly1/article/details/108553381