关于网络的高频面试题,整理了了一下大部分网络层,传输层,应用层。所以这里只找面试可能出现的。关于答案相关的很多都来自网上整理的,还有就是谢希仁的计算机网络第七版,在最后面会给上参考资料。
关于计算机网络的体系结构
五层协议
- 应用层 :为特定应用程序提供数据传输服务,例如 HTTP、DNS 等协议。数据单位为报文。
- 传输层 :为进程提供通用数据传输服务。由于应用层协议很多,定义通用的传输层协议就可以支持不断增多的应用层协议。运输层包括两种协议:传输控制协议 TCP,提供面向连接、可靠的数据传输服务,数据单位为报文段;用户数据报协议 UDP,提供无连接、尽最大努力的数据传输服务,数据单位为用户数据报。TCP 主要提供完整性服务,UDP 主要提供及时性服务。
- 网络层 :为主机提供数据传输服务。而传输层协议是为主机中的进程提供数据传输服务。网络层把传输层传递下来的报文段或者用户数据报封装成分组。
- 数据链路层 :网络层针对的还是主机之间的数据传输服务,而主机之间可以有很多链路,链路层协议就是为同一链路的主机提供数据传输服务。数据链路层把网络层传下来的分组封装成帧。
- 物理层 :考虑的是怎样在传输媒体上传输数据比特流,而不是指具体的传输媒体。物理层的作用是尽可能屏蔽传输媒体和通信手段的差异,使数据链路层感觉不到这些差异
OSI协议
多了表示层和会话层:
- 表示层 :数据压缩、加密以及数据描述,这使得应用程序不必关心在各台主机中数据内部格式不同的问题。
- 会话层 :建立及管理会话。
TCP/IP
只有四层,相当于五层协议中数据链路层和物理层合并为网络接口层。
网络层
网络层的设计思路是:“网络层只向上提供简单灵活的、无连接的、尽最大努力交付的服务。”关于网络层的知识点也很多,但是在面试中的高频知识点不多。
网络层里网际IP协议是TCP/IP体系中两个最重要的协议之一。与IP协议配套使用的还有三个协议:
- 地址解析协议ARP(Address Resolution Protocol)
- 网际控制报文协议ICMP(Internet Control Message Protocol)
- 网际组管理协议IGMP(Internet Group Management Protocol)
IP地址是如何分类的?
什么是私有/保留IP地址?
私有/保留就是在互联网上不使用,而被使用在局域网络中的地址或者做其他特殊用途。比如我们的联通运营商就是使用的10.开头的保留地址, 局域网组网,然后用户通过拨号的方式进入局域网,然后再通过访问网关访问Internet,这样做最大的好处就是节约了公网IP地址,极大的降低了成本。
有哪些私有/保留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
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欺骗就产生了。
什么是icmp协议,它的作用是什么?
它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。
运输层
从通信和信息处理两个角度看,运输层向它上面的应用层提供了通信服务。其主要的两个协议是UDP协议(用户数据报协议)和TCP协议(传输控制协议),重点在于TCP协议和可靠传输的原理。
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效果更好。
使用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 |
三次握手四次挥手全过程
三次握手
第一次握手,客户端给服务器发送一个SYN包,序号为x,等待服务器的响应。
第二次握手,服务器给客户端发送了有ACK/SYN标志的包,序号为y,确认号为x+1,并等待客户端响应。
-
第三次握手,客户端收到服务器的确认包后,给服务器发送了一个ACK包,序号为x+1,确认号为y+1。
三次握手完毕后,就可以正式传递数据了。
四次挥手
第一次挥手,客户端给服务器发送一个FIN包,此时客户端不会再向服务器发送数据,但客户端能接收服务器的数据。
第二次挥手,当服务器收到FIN包后,会给客户端发一个确认包,并传递剩下的数据。
第三次挥手,当服务器将剩余数据发送完后,就向发送方发一个FIN包。此时服务器也不会继续向客户端发送数据了。
-
第四次挥手,客户端收到服务器的FIN包后,就向服务器发送一个确认包。
服务端接收到后,完成四次挥手。服务器断开连接,客户端在等待一段时间后也断开连接。
为什么需要三次握手,四次挥手?
三次握手的目的是建立可靠的通信信道,无论是客户端,还是服务器都需要确保自己和对方的发送/接收功能都是正常的,三次握手的过程就能保证这一点。
第一次握手,服务器收到客户端发来的同步包后,能确定客户端的发送功能和自己的接收功能是正常的。
第二次握手,客户端收到服务器发来的确认包后,能确定自己的发送/接收功能,服务器的发送/接收功能是正常的。
第三次握手,服务器收到客户端的确认包后,能确定自己的发送/接收功能,服务器的发送/接收功能是正常的。
如果不进行挥手操作,比如客户端直接断开与服务器的连接,那么服务器不知情,还会继续向客户端发送数据,这就造成资源浪费。
为什么需要有Time_Wait状态和等待2MSL?
为了保证客户端发送的最后一个确认,能够达到服务器
这个ACK可能丢失,就会导致服务器在LAST-ACK状态,没办法正常结束,那么服务器收不到就会超时重传可以断开的消息。
那么A就能够在这个2MSL中收到这个重传的消息,并且重新计时2MSL。
而且,客户端持续2MSL时间后断开,就可以保证这个连接的所有报文都会死亡,可以看下MSL的含义,也就是2MSL之后,断开这个连接之后,肯定不会还存在这个连接的旧的报文了。
补充:MSL(最大报文段的生成时间)在RFC793中规定hi2分钟,实际应用是30秒,1分钟,2分钟等
为什么不能两次握手,或者三次挥手?
二次握手不行,假设客户端的一个SYN包在网络中滞留了很久,这就是个失效的报文段了,如果服务器收到这个报文段,就认为这是一个连接请求,并建立连接。这样,就会浪费服务器资源,采用三次握手就能避免这种情况。
三次挥手不行,如果没有最后一次挥手,即服务器在第三次挥手,即发送完FIN包后就断开连接,如果这个包丢失了,那么客户端就会一直等待,这显然是不行的。
SSL四次挥手过程?描述一下
TCP是如何保证可靠传输的?
超时重传,如果一个已经发送的报文段在超时时间内没有收到确认,那么就重传这个报文段。
首部校验和,提供了差错检测功能。
确认与序号机制,能保证接收到数据的有序性。
流量控制,能控制端到端之间的数据传递速率,有效避免丢包。
拥塞控制,根据整个网络环境来条件传输速率,有效避免丢包。
应用层
URI和URL的区别?
URL我们说是叫统一资源定位符,URI我更愿意叫做统一资源标识符。
举个例子:
一个人,身份证是他的唯一标识,可以作为统一资源标识符,而地址是为了找到他,所以是统一资源定位符。
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中
从输入网址到获取页面的过程?
-
查询DNS, 获取域名对应的IP地址
浏览器搜索自身的DNS缓存
搜索操作系统的DNS缓存
读取本地的HOST文件
发起一个DNS系统调用(宽带运营服务器查看本身缓存,运营服务器发起一个迭代DNS解析请求)
浏览器获得域名对应的IP地址后,发起TCP三次握手
TCP/IP建立连接后,浏览器可以向服务器发送HTTP请求了
服务器接收到请求后,根据路径参数,经过后端处理将页面返回给浏览器
浏览器渲染页面,和外部资源,最终将完整的页面呈现给用户
常见的HTTP请求?
- GET:对服务器资源的简单请求-
- POST:用于发送包含用户提交数据的请求
- PUT:用来传输文件,但是不带有验证机制,任何人都可以上传,有安全隐患。除了REST风格API会发送这种请求,一般的网站不会使用该方法
- DELETE:发出一个删除指定文档的请求,和PUT一样,有安全隐患,除了REST API一般不会发送这种请求。
- HEAD:和 GET 方法一样,只是不返回报文主体部分,只返回报头。通常用来检验url的有效性或资源更新日期。
- OPTIONS:查询服务器对给定url支持的所有请求方法
- TRACE:查询发送出去的请求是怎样被加工修改的。
- CONNECT:要求与代理服务器通信时建立隧道。使用加密协议如SSL来进行TCP通信。
HTTP状态码有哪几类?常见的状态码有哪些?
200:请求成功状态码。
301:永久重定向。该资源已经分配了新的 URI,服务器返回301响应时,会自动将请求者转移到新URI。
302:临时重定向。表示请求的资源临时分配了新的 URI,希望用户(本次)能使用新的 URI 访问。
404:服务器找不到目标资源。
500:服务器内部出错,无法完成请求。
HTTP与HTTPS的区别?
- https协议要申请证书到ca,需要一定经济成本;
- http是明文传输,https是加密的安全传输;
- 连接的端口不一样,http是80,https是443;
- http连接很简单,没有状态;https是ssl加密的传输,身份认证的网络协议,相对http传输比较安全。
参考资料
计算机网络第七版-谢希仁