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

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

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

1.1 五层协议

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

1.2 OSI协议

多了表示层和会话层:git

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

1.3 TCP/IP

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

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支持一对1、一对多、多对一和多对多的交互通讯。
  • 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工程师面试宝典

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

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

阿提说说

相关文章
相关标签/搜索