您的位置:首页 > 理论基础 > 计算机网络

计算机网络高频面试知识点

2020-08-04 13:22 791 查看

关于网络的高频面试题,整理了了一下大部分网络层,传输层,应用层。所以这里只找面试可能出现的。关于答案相关的很多都来自网上整理的,还有就是谢希仁的计算机网络第七版,在最后面会给上参考资料。

1 关于计算机网络的体系结构

1.1 五层协议

  • 应用层 :为特定应用程序提供数据传输服务,例如 HTTP、DNS 等协议。数据单位为报文。
  • 传输层 :为进程提供通用数据传输服务。由于应用层协议很多,定义通用的传输层协议就可以支持不断增多的应用层协议。运输层包括两种协议:传输控制协议 TCP,提供面向连接、可靠的数据传输服务,数据单位为报文段;用户数据报协议 UDP,提供无连接、尽最大努力的数据传输服务,数据单位为用户数据报。TCP 主要提供完整性服务,UDP 主要提供及时性服务。
  • 网络层 :为主机提供数据传输服务。而传输层协议是为主机中的进程提供数据传输服务。网络层把传输层传递下来的报文段或者用户数据报封装成分组。
  • 数据链路层 :网络层针对的还是主机之间的数据传输服务,而主机之间可以有很多链路,链路层协议就是为同一链路的主机提供数据传输服务。数据链路层把网络层传下来的分组封装成帧。
  • 物理层 :考虑的是怎样在传输媒体上传输数据比特流,而不是指具体的传输媒体。物理层的作用是尽可能屏蔽传输媒体和通信手段的差异,使数据链路层感觉不到这些差异

1.2 OSI协议

多了表示层和会话层:

  • 表示层 :数据压缩、加密以及数据描述,这使得应用程序不必关心在各台主机中数据内部格式不同的问题。
  • 会话层 :建立及管理会话。

1.3 TCP/IP

只有四层,相当于五层协议中数据链路层和物理层合并为网络接口层。

2 网络层

网络层的设计思路是:“网络层只向上提供简单灵活的、无连接的、尽最大努力交付的服务。”关于网络层的知识点也很多,但是在面试中的高频知识点不多。

**网络层里网际IP协议是TCP/IP体系中两个最重要的协议之一。**与IP协议配套使用的还有三个协议:

  • 地址解析协议ARP(Address Resolution Protocol)
  • 网际控制报文协议ICMP(Internet Control Message Protocol)
  • 网际组管理协议IGMP(Internet Group Management Protocol)

2.1 IP地址是如何分类的?

2.2 什么是私有/保留IP地址?

**私有/保留就是在互联网上不使用,而被使用在局域网络中的地址或者做其他特殊用途。**比如我们的联通运营商就是使用的10.开头的保留地址, 局域网组网,然后用户通过拨号的方式进入局域网,然后再通过访问网关访问Internet,这样做最大的好处就是节约了公网IP地址,极大的降低了成本。

2.3 有哪些私有/保留IP地址?

A类:10.0.0.0 ~ 10.255.255.255

B类:172.16.0.0 ~ 172.31.255.255

C类:192.168.0.0 ~ 192.168.255.255

2.4 ARP协议是如何解析MAC地址的,什么是ARP欺骗?

网络层的 ARP 协议完成了 IP 地址与物理地址的映射。

首先,每台主机都会在自己的 ARP 缓冲区中建立一个 ARP 列表,以表示 IP 地址和 MAC 地址的对应关系。当源主机需要将一个数据包要发送到目的主机时,会首先检查自己 ARP 列表中是否存在该 IP 地址对应的 MAC 地址:如果有,就直接将数据包发送到这个 MAC 地址;如果没有,就向本地网段发起一个 ARP 请求的广播包,查询此目的主机对应的 MAC 地址。此 ARP 请求数据包里包括源主机的 IP 地址、硬件地址、以及目的主机的 IP 地址。网络中所有的主机收到这个 ARP 请求后,会检查数据包中的目的 IP 是否和自己的 IP 地址一致。如果不相同就忽略此数据包;如果相同,该主机首先将发送端的 MAC 地址和 IP 地址添加到自己的 ARP 列表中,如果 ARP 表中已经存在该 IP 的信息,则将其覆盖,然后给源主机发送一个 ARP 响应数据包,告诉对方自己是它需要查找的 MAC 地址;源主机收到这个 ARP 响应数据包后,将得到的目的主机的 IP 地址和 MAC 地址添加到自己的 ARP 列表中,并利用此信息开始数据的传输。如果源主机一直没有收到 ARP 响应数据包,表示 ARP 查询失败。

ARP默认了其所在的网络是一个善良的网络,每台主机在向网络中发送应答信号时都是使用的真实身份。所以人们就发现ARP应答中的IP地址和MAC地址中的信息是可以伪造的,并不一定是自己的真实IP地址和MAC地址,由此,ARP欺骗就产生了。

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

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

3 运输层

从通信和信息处理两个角度看,运输层向它上面的应用层提供了通信服务。其主要的两个协议是UDP协议(用户数据报协议)和TCP协议(传输控制协议),重点在于TCP协议和可靠传输的原理。

3.1 TCP与UDP的特点和区别?

UDP的特点:

  • **UDP是无连接的。**即发送数据之前不需要建立连接,所有也没有连接释放,减少了时延。
  • **UDP是尽最大努力交付的。**即不保证可靠交付。
  • UDP是面向报文的。
  • **UDP没有拥塞控制。**因此网络出现的阻塞不会使源主机的发送效率降低。
  • UDP支持一对一、一对多、多对一和多对多的交互通信。
  • **UDP的首部开销小。**只有八个字节,比TCP的20个字节的首部短。

TCP的特点:

  • **TCP是面向连接的运输层协议。**应用进程之间的通信好像在“打电话”:通话前要先拨号建立连接,通话结束后要挂机释放连接。
  • **每一条TCP连接只能有两个端点。**即TCP是点对点连接的。
  • **TCP提供可靠交付的服务。**通过TCP连接传送的数据,无差错、不丢失、不重复,并且按序到达。
  • **TCP提供全双工通信。**TCP允许通信双方的应用进程在任何时候都能发送数据。
  • TCP面向字节流。“面向字节流”的含义是虽然应用程序和TCP的交互是一次一个数据块,但TCP把应用程序交下来的数据仅仅看成是一连串的无结构的字节流。

TCP与UDP的区别:

  • UDP是无连接的,即发送数据之前不需要建立连接;TCP是面向连接的运输层协议。
  • UDP使用尽最大努力交付,即不保证可靠交付,同时也不使用拥塞控制;TCP提供可靠的交付服务,提供全双工通信。
  • UDP支持一对一,一对多,多对一和多对多的交互通信;TCP只能一对一连接。
  • UDP首部开销小,只有8个字节;TCP 面向字节流,头部最低20个字节。
  • TCP消耗更多的资源,传输速度慢,UDP相对较快,所以一些即时通讯软件使用UDP效果更好。

3.2 使用UDP和TCP协议的各种应用和应用层协议

应用 应用层协议 运输协议
名字转换 DNS(域名系统) UDP
文件传送 TFTP(简单文件传送协议) UDP
路由选择协议 RIP(路由信息协议) UDP
IP地址配置 DHCP(动态主机配置协议) UDP
网络管理 SNMP(简单网络管理协议) UDP
远程文件服务器 NFS(网络文件系统) UDP
IP电话 专用协议 UDP
流式多媒体通信 专用协议 UDP
多播 IGMP(网际管理协议) UDP
电子邮件 SMTP(简单邮件传送协议) TCP
远程终端接入 TELNET(远程终端协议) TCP
万维网 HTTP(超文本传送协议) TCP
文件传送 FTP(文件传送协议) TCP

3.3 三次握手四次挥手全过程

三次握手

  1. 第一次握手,客户端给服务器发送一个SYN包,序号为x,等待服务器的响应。

  2. 第二次握手,服务器给客户端发送了有ACK/SYN标志的包,序号为y,确认号为x+1,并等待客户端响应。

  3. 第三次握手,客户端收到服务器的确认包后,给服务器发送了一个ACK包,序号为x+1,确认号为y+1。

    三次握手完毕后,就可以正式传递数据了。

四次挥手

  1. 第一次挥手,客户端给服务器发送一个FIN包,此时客户端不会再向服务器发送数据,但客户端能接收服务器的数据。

  2. 第二次挥手,当服务器收到FIN包后,会给客户端发一个确认包,并传递剩下的数据。

  3. 第三次挥手,当服务器将剩余数据发送完后,就向发送方发一个FIN包。此时服务器也不会继续向客户端发送数据了。

  4. 第四次挥手,客户端收到服务器的FIN包后,就向服务器发送一个确认包。

    服务端接收到后,完成四次挥手。服务器断开连接,客户端在等待一段时间后也断开连接。

3.4 为什么需要三次握手,四次挥手?

三次握手的目的是建立可靠的通信信道,无论是客户端,还是服务器都需要确保自己和对方的发送/接收功能都是正常的,三次握手的过程就能保证这一点。

  • 第一次握手,服务器收到客户端发来的同步包后,能确定客户端的发送功能和自己的接收功能是正常的。

  • 第二次握手,客户端收到服务器发来的确认包后,能确定自己的发送/接收功能,服务器的发送/接收功能是正常的。

  • 第三次握手,服务器收到客户端的确认包后,能确定自己的发送/接收功能,服务器的发送/接收功能是正常的。

如果不进行挥手操作,比如客户端直接断开与服务器的连接,那么服务器不知情,还会继续向客户端发送数据,这就造成资源浪费。

3.5 为什么需要有Time_Wait状态和等待2MSL?

为了保证客户端发送的最后一个确认,能够达到服务器

这个ACK可能丢失,就会导致服务器在LAST-ACK状态,没办法正常结束,那么服务器收不到就会超时重传可以断开的消息。

那么A就能够在这个2MSL中收到这个重传的消息,并且重新计时2MSL。

而且,客户端持续2MSL时间后断开,就可以保证这个连接的所有报文都会死亡,可以看下MSL的含义,也就是2MSL之后,断开这个连接之后,肯定不会还存在这个连接的旧的报文了。

补充:MSL(最大报文段的生成时间)在RFC793中规定hi2分钟,实际应用是30秒,1分钟,2分钟等

3.6 为什么不能两次握手,或者三次挥手?

  1. 二次握手不行,假设客户端的一个SYN包在网络中滞留了很久,这就是个失效的报文段了,如果服务器收到这个报文段,就认为这是一个连接请求,并建立连接。这样,就会浪费服务器资源,采用三次握手就能避免这种情况。

  2. 三次挥手不行,如果没有最后一次挥手,即服务器在第三次挥手,即发送完FIN包后就断开连接,如果这个包丢失了,那么客户端就会一直等待,这显然是不行的。

3.7 TCP是如何保证可靠传输的?

  • 超时重传,如果一个已经发送的报文段在超时时间内没有收到确认,那么就重传这个报文段。

  • 首部校验和,提供了差错检测功能。

  • 确认与序号机制,能保证接收到数据的有序性。

  • 流量控制,能控制端到端之间的数据传递速率,有效避免丢包。

  • 拥塞控制,根据整个网络环境来条件传输速率,有效避免丢包。

4 应用层

4.1 URI和URL的区别?

URL我们说是叫统一资源定位符,URI我更愿意叫做统一资源标识符。

举个例子:

一个人,身份证是他的唯一标识,可以作为统一资源标识符,而地址是为了找到他,所以是统一资源定位符。

4.2 HTTP请求的GET与POST方式的区别?

  • GET在浏览器回退是无害的,而POST会再次提交请求

  • GET请求会被浏览器主动cache,而POST不会,除非手动设置

  • GET请求只能进行URL编码,而POST支持多种编码

  • GET请求参数会被完整保留在浏览器历史记录中,而POST中的参数不会被保留

  • GET请求在URL中传送参数是有大小限制的,不能大于2KB,而POST可以说没有

  • GET只接受ASCII字符,而POST没有限制

  • GET参数直接暴露在URL上,而POST将数据放在request body中

4.3 从输入网址到获取页面的过程?

  • 查询DNS, 获取域名对应的IP地址

  • 浏览器搜索自身的DNS缓存
    • 搜索操作系统的DNS缓存
    • 读取本地的HOST文件
    • 发起一个DNS系统调用(宽带运营服务器查看本身缓存,运营服务器发起一个迭代DNS解析请求)
  • 浏览器获得域名对应的IP地址后,发起TCP三次握手

  • TCP/IP建立连接后,浏览器可以向服务器发送HTTP请求了

  • 服务器接收到请求后,根据路径参数,经过后端处理将页面返回给浏览器

  • 浏览器渲染页面,和外部资源,最终将完整的页面呈现给用户

  • 4.4 常见的HTTP请求?

    • GET:对服务器资源的简单请求-
    • POST:用于发送包含用户提交数据的请求
    • PUT:用来传输文件,但是不带有验证机制,任何人都可以上传,有安全隐患。除了REST风格API会发送这种请求,一般的网站不会使用该方法
    • DELETE:发出一个删除指定文档的请求,和PUT一样,有安全隐患,除了REST API一般不会发送这种请求。
    • HEAD:和 GET 方法一样,只是不返回报文主体部分,只返回报头。通常用来检验url的有效性或资源更新日期。
    • OPTIONS:查询服务器对给定url支持的所有请求方法
    • TRACE:查询发送出去的请求是怎样被加工修改的。
    • CONNECT:要求与代理服务器通信时建立隧道。使用加密协议如SSL来进行TCP通信。

    4.5 HTTP状态码有哪几类?常见的状态码有哪些?

    200:请求成功状态码。

    301:永久重定向。该资源已经分配了新的 URI,服务器返回301响应时,会自动将请求者转移到新URI。

    302:临时重定向。表示请求的资源临时分配了新的 URI,希望用户(本次)能使用新的 URI 访问。

    404:服务器找不到目标资源。

    500:服务器内部出错,无法完成请求。

    4.6 HTTP与HTTPS的区别?

    • https协议要申请证书到ca,需要一定经济成本;
    • http是明文传输,https是加密的安全传输;
    • 连接的端口不一样,http是80,https是443;
    • http连接很简单,没有状态;https是ssl加密的传输,身份认证的网络协议,相对http传输比较安全。

    5 参考资料

    计算机网络第七版-谢希仁

    CyC2018/CS-Notes

    Java工程师面试宝典

    网络是如何连接的?网络发展简介(四)

    计算机网络-高频面试题详细总结

    阿提说说

    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: