持续输出面试题之计算机网络篇
开篇介绍
大家好,我是Java最全面试题库
的提裤姐,今天这篇是计算机网络,主要总结了计算机网络相关的面试题;在后续,会沿着第一篇开篇的知识线路一直总结下去,做到日更!如果我能做到百日百更,希望你也可以跟着百日百刷,一百天养成一个好习惯。
说一下TCP/IP四层模型
TCP/IP协议是美国国防部高级计划研究局为实现ARPANET互联网而开发的。
image.png
- 网络接口层(链路层):包括操作系统中的设备驱动程序、计算机中对应的网络接口卡
- 网络层(互连层、网际层):处理分组在网络中的活动,比如分组的选路。负责IP寻址,分割和组装数据包,路由选择等。
- 运输层:主要为两台主机上的应用提供端到端的通信
- 应用层:负责处理特定的应用程序细节。
说一下OSI七层模型
image.png-
物理层
:主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流。单位:比特、数据位、流、比特流 -
数据链路层
:主要将从物理层接收的数据进行 MAC 地址(网卡的地址)的封装与解封装。在这一层工作的设备是交换机,数据通过交换机来传输。 单位:帧、数据帧 - `网络层:主要将从下层接收到的数据进行 IP 地址(例 192.168.0.1)的封装与解封装。在这一层工作的设备是路由器。单位:数据报、数据包、分组、包
-
传输层
:定义了一些传输数据的协议和端口号(WWW 端口 80 等),如:TCP(传输控制协议,传输效率低,可靠性强,用于传输可靠性要求高,数据量大的数据),UDP(用户数据报协议,与 TCP 特性恰恰相反,用于传输可靠性要求不高,数据量小的数据,如 QQ 聊天数据就是通过这种方式传输的)。 主要是将从下层接收的数据进行分段进行传输,到达目的地址后在进行重组。单位:数据段、分段、报文段 -
会话层
:通过传输层(端口号:传输端口与接收端口)建立数据传输的通路。主要在你的系统之间发起会话或者接受会话请求(设备之间需要互相认识可以是 IP 也可以是 MAC 或者是主机名) -
表示层
:主要是进行对接收的数据进行解释、加密与解密、压缩与解压缩等(也就是把计算机能够识别的东西转换成人能够能识别的东西(如图片、声音等)) -
应用层
: 主要是一些终端的应用,比如说FTP(各种文件下载),WEB(IE浏览),QQ等。单位:报文
OSI参考模型与TCP/IP参考模型对应关系及区别?
image.png共同点:
- 两个都是以
协议栈
的概念为基础,协议栈中的协议彼此互相独立; - 都采用了
层次结构
的概念,各层功能大体相似。
不同点:
- OSI有7层,TCP/IP有4层。
- TCP/IP网络层提供无连接通信,传输层支持无连接和面向连接两种;
OSI网络层支持面向连接和无连接,传输层只支持面向连接的通信。
介绍一下TCP 三次握手和四次挥手
三次握手:
为了准确无误地把数据送达目标处,TCP协议采用了三次握手策略。
用TCP协议把数据包送出去后,TCP不会对传送后的情况置之不理,它一定会向对方确认是否成功送达。握手过程中使用了TCP的标志:SYN和ACK
- 发送端首先发送一个带SYN标志的数据包给对方。
- 接收端收到后,回传一个带有SYN/ACK标志的数据包以示传达确认信息。
- 最后,发送端再回传一个带ACK标志的数据包,代表“握手”结束。
注意:若在握手过程中某个阶段莫名中断,TCP协议会再次以相同的顺序发送相同的数据包
四次挥手:
断开一个TCP连接则需要四次挥手
- 第一次挥手:主动关闭方发送一个FIN,用来关闭主动方到被动关闭方的数据传送,也就是主动关闭方告诉被动关闭方:我已经不 会再给你发数据了(当然,在fin包之前发送出去的数据,如果没有收到对应的ack确认报文,主动关闭方依然会重发这些数据),但是,此时主动关闭方还可 以接受数据
- 第二次挥手:被动关闭方收到FIN包后,发送一个ACK给对方,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号)
- 第三次挥手:被动关闭方发送一个FIN,用来关闭被动关闭方到主动关闭方的数据传送,也就是告诉主动关闭方,我的数据也发送完了,不会再给你发数据了
- 第四次挥手:主动关闭方收到FIN后,发送一个ACK给被动关闭方,确认序号为收到序号+1,至此,完成四次挥手
TCP和UDP的区别?
- TCP(Transmission Control Protocol,传输控制协议)是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接。一个TCP连接必须要经过三次“对话”才能建立起来
- UDP(User Data Protocol,用户数据报协议)是与TCP相对应的协议。它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去! UDP适用于一次只传送少量数据、对可靠性要求不高的应用环境
TCP如何进行流量控制?
TCP协议利用窗口机制实现流量控制;
TCP连接建立时,双方都为之分配了固定大小的缓冲空间;TCP的接收端只允许另一端发送其缓冲区所能接纳的数据:
- 接收端在给发送端发送确认段时,通告接收窗口大小;
- 发送端在接下来发送数据段时,确保未确认段的应用层数据总量不超过接收端通告的接收窗口大小,从而确保接收端不会发生缓存溢出。
什么是拥塞控制?TCP是如何进行拥塞控制的?
拥塞
拥塞是指太多主机以太快的速度向网络中发送太多的数据,超过了网络处理能力,导致大量数据分组“拥挤”在网络中间设备(如路由器)队列中等待转发,网络性能显著下降的现象。
拥塞的后果:
①数据分组通过网络的时延显著增加。
②由于队列满导致大量分组被丢弃。
拥塞控制
拥塞控制就是通过合理调度、规范、调整向网络中发送数据的主机数量、发送速率或数据量,以避免拥塞或尽快消除已发生的拥塞。
TCP拥塞控制:
从端到端的角度,推测网络是否发生拥塞,如果推断网络发生拥塞,则立即将数据发送速率降下来,以便缓解网络拥塞。
①窗口机制:
通过调节窗口的大小实现对发送数据速率的调整。
②窗口调整的基本策略:
AIMD(Additive Increase,Multiplicative Decrease)
加性增加,乘性减少;
网络未发生拥塞时,逐渐“加性”增加窗口大小,当网络拥塞时“乘性”快速减小窗口大小。
③TCP的拥塞控制算法:
包括了慢启动
、拥塞避免
、快速重传
和快速恢复
4部分。
UDP如何实现可靠性传输?
传输层无法保证数据的可靠传输,只能通过应用层来实现。
实现的方式可以参照tcp可靠性传输的方式,只是实现不在传输层,实现转移到了应用层。
实现确认机制、重传机制、窗口确认机制。
如果不利用linux协议栈以及上层socket机制,自己通过抓包和发包的方式去实现可靠性传输,那么必须实现如下功能:
- 发送:包的分片、包确认、包的重发
- 接收:包的调序、包的序号确认
注:
①给数据包编号,按照包的顺序接收并存储;
②接收端接收到数据包后发送确认信息给发送端,发送端接收确认数据以后再继续发送下一个包,如果接收端收到的数据包的编号不是期望的编号,则要求发送端重新发送。
目前利用udp实现了可靠的数据传输分别为RUDP、RTP、UDT。
面向连接和非面向连接的服务的特点是什么?
面向连接的服务,通信双方在进行通信之前,要先在双方建立起一个完整的可以彼此沟通的通道,在通信过程中,整个连接的情况一直可以被实时地监控和管理。
非面向连接的服务,不需要预先建立一个联络两个通信节点的连接,需要通信的时候,发送节点就可以往网络上发送信息,让信息自主地在网络上去传,一般在传输的过程中不再加以监控。
Http和Https的区别
Http协议运行在TCP之上,明文传输,客户端与服务器端都无法验证对方的身份;
Https是身披SSL(Secure Socket Layer)外壳的Http,运行于SSL上,SSL运行于TCP之上,是添加了加密和认证机制的HTTP。
二者之间存在如下不同:
- 端口不同:Http与Http使用不同的连接方式,用的端口也不一样,前者是80,后者是443;
- 资源消耗:和HTTP通信相比,Https通信会由于加减密处理消耗更多的CPU和内存资源;
- 开销:Https通信需要证书,而证书一般需要向认证机构购买;
Https的加密机制是一种共享密钥加密和公开密钥加密并用的混合加密机制。
HTTP请求报文和响应报文的结构是怎样的?
请求报文:从客户向服务器发送请求报文
HTTP典型的请求方法有:
- GET:请求读取由URL所标识的信息
- HEAD:请求读取由URL所标识的信息的首部,无须在响应报文中包含对象。
- POST:给服务器添加信息(例如:注释)
- OPTION:请求一些选项的信息
- PUT:在指明的URL下存储一个文档
响应报文:从服务器到客户的回答
HTTP状态码:
- 1xx:信息提示;通告信息,可能还需要进一步交互。
- 2xx:成功;成功完成客户请求的操作,并进行响应
- 3xx:重定向;表示资源已移走,需要向新的URL发送请求
- 4xx:客户端错误;由于客户请求错误,无法成功响应
- 5xx:服务端错误;由于服务端错误,无法成功响应
IP地址有哪些分类?
image.pngA类地址(1~126):网络号占前8位,以0开头,主机号占后24位。
B类地址(128~191):网络号占前16位,以10开头,主机号占后16位。
C类地址(192~223):网络号占前24位,以110开头,主机号占后8位。
D类地址(224~239):以1110开头,保留位多播地址。
E类地址(240~255):以1111开头,保留位今后使用。
ARP地址解析协议的工作过程?
通过IP地址获得物理地址,是设备通过自己知道的IP地址来获得自己不知道的物理地址的协议。
工作过程:
- 每个主机都会在自己的 ARP 缓冲区中建立一个 ARP 列表,以表示 IP 地址和 MAC 地址之间的对应关系
- 当源主机要发送数据时,首先检查 ARP 列表中是否有对应 IP 地址的目的主机的 MAC 地址,如果有,则直接发送数据,如果没有,就向"本网段"的所有主机发送 ARP 数据包,该数据包包括的内容有:
源主机 IP 地址,源主机 MAC 地址,目的主机的 IP 地址
。 - 当本网络的所有主机收到该 ARP 数据包时,首先检查数据包中的目的主机 IP 地址是否是自己的 IP 地址,如果不是,则忽略该数据包,如果是,则首先从数据包中取出源主机的 IP 和 MAC 地址写入到 ARP 列表中,如果已经存在,则覆盖,然后将自己的 MAC 地址写入 ARP 响应包中,告诉源主机自己是它想要找的 MAC 地址。
- 源主机收到 ARP 响应包后。将目的主机的 IP 和 MAC 地址写入 ARP 列表,并利用此信息发送数据。如果源主机一直没有收到 ARP 响应数据包,表示 ARP 查询失败。广播发送ARP请求,单播发送 ARP 响应。
DNS(Domain Name System)域名系统的工作原理?
当 DNS 客户机需要在程序中使用名称时,它会查询 DNS 服务器来解析该名称。客户机发送的每条查询信息包括三条信息:
- 指定的 DNS 域名
- 指定的查询类型
- DNS 域名的指定类别
基于 UDP 服务,端口 53,该应用一般不直接为用户使用,而是为其他应用服务,如 HTTP
,SMTP
等在其中需要完成主机名到 IP 地址的转换。
说说静态路由和动态路由有什么区别?
静态路由是由管理员手工配置的,适合比较简单的网络或需要做路由特殊控制。
动态路由则是由动态路由协议自动维护的,不需人工干预,适合比较复杂大型的网络。
路由器能够自动地建立自己的路由表,并且能够根据实际实际情况的变化适时地进行调整。动态路由机制的运作依赖路由器的两个基本功能:对路由表的维护;路由器之间实时的路由信息交换。