笔者在2023年参加了部分985和华五计算机夏令营和预推免面试,下面是作者对于计算机网络知识点一些总结(对于期末复习、保研和考研均适用,对找工作的同学也有一定参考作用,欢迎大家点赞、收藏、评论,如需要其他学科的问题请关注我~)
相关文章:
计算机保研/考研面试题——编程语言篇(C和C++)-CSDN博客
NOTE:重点在应用层(HTTP、HTTPS)和传输层(TCP),如果你读研阶段想走这个方向,那么计算机网络和操作系统都是非常重要的。
1. 请你介绍OSI参考模型?★★★★★★
参考视频:OSI参考模型---表示层_哔哩哔哩_bilibili
OSI参考模型是由国际标准化组织制定的,这个模型有7层,从上到下为应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。
(1)应用层:负责为应用程序提供服务。
(2)表示层:负责解决通信时数据格式问题,保证了跨平台的应用通信时能正确编码解码、压缩解压缩、加密解密。
(3)会话层:负责在应用之间建立、维护、终止会话,应用必须基于会话才能通信。
(4)传输层:负责进程到进程之间的数据传输,进程通过IP和端口号唯一标识。如果是TCP协议还要保证可靠传输。
(5)网络层:负责主机到主机之间的数据传输,主机通过IP唯一标识。还负责寻址和路由。
(6)数据链路层:负责在相邻节点之间建立、维护和终止链路,以确保可靠的数据传输。
(7)物理层:负责硬件之间通过物理媒介(光纤、电缆、无线电波)传输二进制比特流,即0和1。
2. 请你介绍TCP/IP网络模型?★★★★★★
TCP/IP网络模型有4层,从上到下为应用层、传输层、网络层、网络接口层。
(1)应用层:负责为应用程序提供服务。
(2)传输层:负责进程到进程之间的数据传输,进程通过IP和端口号唯一标识。如果是TCP协议还要保证可靠传输。
(3)网络层:负责主机到主机之间的数据传输,主机通过IP唯一标识。还负责寻址和路由。
(4)网络接口层:它相当于OSI模型中的数据链路层和物理层。数据链路层负责在相邻节点之间建立、维护和终止链路,以确保可靠的数据传输。物理层负责硬件之间通过物理媒介(光纤、电缆、无线电波)传输二进制比特流,即0和1。
3. 请你说说网络模型为什么要分层?★★★★
(1)简化问题。分层可以将复杂的网络通信问题分割成小问题。
(2)灵活性好。只要层与层的接口不变,某一层可以有多种实现。
(3)易于标准化。方便对每一层的协议和层与层的接口进行标准化管理。
(4)易于维护。出故障后,可以快速定位到层级,针对性修复。
4. 电路交换、报文交换、分组交换的技术特点。★
(1)电路交换:
定义:传输前,必须建立一条专用的物理通信路径,一直被独占,结束后才释放。
优点:通信时延小,实时性好;有序传输;没有冲突;控制简单;适用范围广。
缺点:建立连接时间长;线路使用效率低;灵活性差;控制简单。
(2)报文交换:
定义:数据交换的单位是报文,采用存储转发方式。
优点:无须建立连接;动态分配线路;提高线路可靠性;利用率高;提供多目标服务。
缺点:存储转发时延打;较大的缓存空间。
(3)分组交换:
定义:采用存储转发,限制每次传送数据块大小上限,加上一些控制信息,构成分组
优点:没有建立时延;线路利用率高;简化了存储管理;并行加速传输;减少出错几率和重发数据量。
缺点:存在传输时延;需要传输额外的信息量;采用数据报服务,出现失序、丢失、重复分组。
5. MAC地址、IP地址、域名分别在哪一层,有什么作用,用哪些协议建立这些地址的映射。★★
MAC地址在数据链路层,IP地址在网络层,域名在应用层。
作用:
MAC地址作用:区分网卡,这个地址不能改变。
IP地址作用:区分用户,为每个用户对应一个IP地址。
域名:便于记住网站。
映射:
IP转MAC协议:ARP
MAC转IP协议:RARP
域名转换成IP:DNS
6. 局域网中数据怎么传的?和WiFi无线网中传播的区别。★
局域网中的数据采用CSMA/CD协议。
WIFI无线网中采用CSMA/CA协议。
7. 简述一下CSMA/CD协议。★
CSMA/CD(载波监听多点接入/碰撞检测)协议的执行流程如下:
(1)在发送数据前需要监听信道。如果信道忙,则持续等待;如果信道空闲,则在等待一段细微时间后将开始传输数据;(载波监听,碰撞检测)
(2)在传输数据的过程中,一边传输一边监听信道是否发生碰撞。如果在争用期之内没有检测到碰撞,则说明已经独占信道,可以持续至完成发送;若在争用期内发生碰撞,则将停止数据发送,并发送一个拥塞信号;(边听边发,冲突停发)
(3)检测到发生碰撞后,适配器将执行二进制退避算法随机等待一段时间后,在进行数据发送。(截断二进制指数规避算法,随机重发)
8. 简单介绍一下HTTP/1.0~HTTP/3.0?你了解QUIC协议吗?★★★★★★
(1)HTTP/1.0
HTTP/1.0默认是短连接,不支持Pipeline(管道)。但也支持长连接,必须在请求和响应报文头部同时显式设置Connection: Keep-Alive。
(2)HTTP/1.1
HTTP/1.1是第一个真正意义的HTTP标准版本,也是应用最普遍的HTTP版本。
① HTTP/1.1之后默认是长连接。服务器可以设置Keep-Alive头部来指定保持连接的时间。节省了创建和销毁连接的开销。
② HTTP/1.1默认支持Pipeline。建立连接后,客户端发起了第一个请求,就可以马上发第二个请求,不必等第一个请求的响应回来,提高了吞吐量。
③ HTTP/1.1有队头阻塞的问题。建立连接后,按顺序发送的请求必须按顺序接收它们的响应,即使开启了Pipeline。如果前面请求的响应没有接收,会一直阻塞。
④ HTTP/1.1基于明文传输,存在窃听、篡改和冒充的风险。
(3)HTTP/2
一篇文章带你彻底了解HTTP 2.0_13250163的技术博客_51CTO博客
2015年HTTP/2发布。HTTP/2协议是基于HTTPS的,所以HTTP/2的安全性也是有保障。
① HTTP/2基于HTTPS,HTTPS是安全的,在TCP上层多了一个SSL/TLS层。
② HTTP/2采用了HPACK算法进行头部压缩。在客户端和服务器同时维护一张Header信息表,所有字段存入这个表,每个字段对应一个索引号,对于重复字段只发送索引号,这样就可以减少数据量、提高速度。
③ HTTP/2基于二进制格式传输,而不再是明文,提高了安全性和数据传输的效率。
④ HTTP/2采用并发传输。HTTP/2并发地发送多个请求的各个帧,然后在接收方得到帧后根据是否是同一个流来进行组装。解决了HTTP层对头阻塞的问题,真正实现了多个请求复用一个TCP连接。(但是没有解决TCP层对头阻塞的问题)
⑤ HTTP/2引入了静态推送功能,允许服务器有可用的新数据时直接向客户端发送更新,不需要客户端拉取。
(4)HTTP/3
HTTP/3基于UDP协议,并在UDP层上加了一层QUIC。
① 极速连接。首次连接只要1个RTT就可以完成握手并协商。比传统的TCP+TLS快。再次连接时如果之前连接过相同的服务器,可以实现0个RTT就连接,无需等待直接发送数据。
② 解决了对头阻塞问题。HTTP/2虽然解决了HTTP层的对头阻塞问题,但是TCP层的对头阻塞没解决。QUIC在UDP层实现了多路复用,方法类似于HTTP/2,彻底消除了对头阻塞问题。
③ 使用连接ID来标识一个连接,而不是IP+端口。当从WIFI切换到4G时,只要连接ID不变,连接就不会中断。
9. 简述一下与自治系统AS相关的内部网关协议和外部网关协议?★
(1)内部网关协议IGP
指自治系统内部所使用的路由选择协议,一般有路由信息协议RIP和开放最短路径优先协议OSPF。
RIP:
RIP协议是基于距离向量的路由选择协议。一条RIP路径最多包含15个路由器,当距离为16时表示不可达。该协议中路由器只和相邻路由器进行信息交换,交换的信息是路由表。它适用于小型网络,但在大型网络中存在收敛慢、更新频繁等缺点。
OSPF:
OSPF是一种基于链路状态的路由选择协议。协议中路由器发送的信息是相邻路由器的链路状态,并且使用洪泛法进行发送。最终,每个路由器都将建立一个链路状态数据库,即整个网路的拓扑结构。
(2)外部网关协议EGP
是指在不同自治系统之间交换信息的协议。例如BGP是一种EGP。通常每个自治系统需要选择一个路由器作为BGP发言人,并且建立使用TCP连接,利用BGP会话交换路由信息。
10. 为什么无线局域网不能使用CSMA/CD?
(1)无线信道特性:无线信道具有广播性质和随机性质,无法实现完全的碰撞检测。由于无线信道中存在传播延迟、多径效应、信号衰落等因素,无法准确检测到信号的冲突。与有线媒体不同,无线信道上的碰撞无法通过监听到碰撞信号来进行检测和处理。
(2)信号干扰:在无线局域网中,多个设备共享同一无线信道进行通信。由于无线信号的传播范围和干扰范围较大,相邻的无线设备发送信号时容易相互干扰,导致更多的碰撞发生。
(3)隐藏终端问题:无线局域网中存在隐藏终端问题,指的是即使在发送前进行了碰撞检测,但由于某些设备之间的距离较远或者受到障碍物的干扰,无法感知到对方的存在而导致碰撞。
11. 简述流量控制、拥塞控制和可靠传输机制的原理。★★
(1)流量控制
答:TCP使用滑动窗口大小来控制发送方的发送速率,防止发送方数据发送过快,导致接收方来不及处理。
流量控制用于确保发送方与接收方之间的数据传输速率相匹配,以防止接收方无法及时处理大量的数据。
流量控制通过使用滑动窗口协议来实现。
发送方会根据接收方的接收能力和缓冲区的剩余空间来动态调整发送数据的速率。当接收方的缓冲区快满时,它会发送一个流量控制信号给发送方,告知发送方降低发送速率,以避免数据丢失或溢出。
(2)拥塞控制
答:TCP通过拥塞窗口来避免网络拥塞。当网络拥塞时,TCP会减少数据发送速率,以减少数据包丢失和网络拥塞的可能性。
拥塞控制用于在网络中防止过多的数据流量导致网络拥塞。拥塞控制是一个端到端的过程,涉及到发送方、接收方以及中间设备(如路由器)。
拥塞控制通过监测网络中的拥塞状态来调整发送速率。当网络中发生拥塞时,路由器会发送拥塞通知给发送方,告知其减少数据发送速率。发送方接收到拥塞通知后,会减少发送数据的速率以减轻网络拥塞。通过不断检测和调整发送速率,拥塞控制可以维持网络中的稳定性和公平性。
(3)可靠传输
可靠传输是一种确保数据在通信过程中不丢失、不损坏且按正确顺序到达目标地的机制。实现可靠传输通常需要以下几个关键技术:
序号与确认、超时重传、滑动窗口、错误检测与纠正。
12. 什么是ARP协议?说说ARP的工作流程以及四种典型情况。★★★
答:ARP是一个网络接口层(数据链路层)协议。客户端通过ARP协议获取目标IP的MAC地址。ARP解析的过程:检查ARP缓存→局域网内发送ARP广播→目标设备回复ARP单播→更新ARP缓存。
ARP用于将IP地址解析为物理MAC地址。每个网络设备都有一个唯一的MAC地址,而IP地址则用于在互联网上进行通信。
ARP的工作流程:
当一个设备需要发送数据到另一个设备时,它会首先检查自己的ARP缓存表。ARP缓存表存储了IP地址和对应的MAC地址。
如果目标设备的MAC地址不在ARP缓存表中,发送设备将广播一个ARP请求消息到局域网上的所有设备,询问该目标IP地址对应的MAC地址。
接收到ARP请求的设备会检查自己的IP地址是否与请求中的目标IP地址匹配,如果匹配,则会回复一个ARP应答消息,将自己的MAC地址提供给发送设备。
发送设备接收到ARP应答后,将目标IP地址和对应的MAC地址添加到ARP缓存表中,并使用这个MAC地址发送数据包。
13. 什么是滑动窗口协议和停止等待协议,有什么区别,滑动窗口协议有什么优点。★
滑动窗口协议:
发送方和接收方都维护了一个固定大小的窗口,用于控制发送和接收的数据包数量。
停止等待协议:
发送方发送一个数据包后,就会停止发送并等待接收方的确认,只有在收到接收方的确认后,才会发送下一个数据包。
与停止等待协议相比,滑动窗口协议具有以下区别和优点:
(1)发送窗口和接收窗口:滑动窗口协议中,发送方和接收方都维护了一个窗口。发送窗口控制着允许发送的数据包数量,而接收窗口控制着允许接收的数据包数量。发送方可以连续发送多个数据包,而不需要等待每个数据包的确认。
(2)流水线传输:滑动窗口协议支持流水线传输,即发送方可以一次发送多个数据包,而无需等待每个数据包的确认。这具有更高的传输效率和带宽利用率。
(3)窗口大小动态调整:滑动窗口协议允许动态调整发送窗口和接收窗口的大小,根据网络状况进行自适应。通过调整窗口大小,可以更好地适应网络的延迟、丢包率等变化,提高传输效率和性能。这具有更好的动态适应性。
14. 为什么出现IPv6,和IPv4相比有什么优点?★★★
IPv6的可以解决IPv4地址短缺的问题。IPv6还增加了更多的功能和特性,改进首部的格式,快速处理/转发数据报,提供更高效的路由和更好的网络配置灵活性,同时还支持更多的安全特性。
优点:
(1)大规模地址空间:IPv6采用128位地址,相较于IPv4的32位地址,IPv6的地址空间巨大到几乎无限。
(2)改进的性能和效率:IPv6在头部格式和地址分配方式上进行了优化,减少了路由器和主机处理数据包的开销,提高了网络性能和传输效率。
(3)增强网络的安全性:IPv6在设计时考虑了一些安全机制的加强,例如IPSec(IP Security)协议的原生支持,提供了对数据传输的认证、加密和完整性校验,增强了网络的安全性。
15. IPv6和IPv4相比,报文首部的变化?★
(1)IPv6取消了首部长度字段,因为IPv6首部长度固定40字节。
(2)IPv6取消了区分服务字段,IPv6数据报首部中的通信量类和流表号字段实现了区分服务字段的功能。
(3)IPv6取消了总长度字段,改为有效载荷长度字段。这是因为IPv6数据报的首部长度是固定的40B,只有后面的有效载荷长度是不变的。
(4)IPv6取消了标识、标志、片偏移字段,因为这些功能已经包含在IPv6数据报的分片扩展首部中。
(5)IPv6把生存时间TTL字段改成跳数限制字段,这样名称与左右更加一致。
(6)IPv6取消了协议字段,改用下一个首部字段。
(7)IPv6取消了首部检验和字段,加快路由器处理IPv6数据报的速度。
(8)IPv6取消了选项字段,改用扩展首部来实现选项功能。
16. 简述一下SDN的工作原理。★★★★
SDN通过将网络的控制平面与数据平面分离,并将网络控制逻辑集中到一个中心化的控制器中来实现网络的灵活性和可编程性。
传统的网络架构中,网络设备(如路由器)负责同时处理数据转发和网络控制功能。而在SDN中,网络设备仅负责数据转发,而控制逻辑则由集中式的控制器进行管理。控制器作为网络控制平面的中心,通过与网络设备间的OpenFlow等协议进行交互,向网络设备下发指令来控制和管理整个网络。
SDN的工作原理可以简述如下:
(1)分离控制平面和数据平面:SDN将网络设备的控制功能从设备本身分离出来,在控制器上进行集中管理和配置。这样可以实现控制逻辑的灵活编程和网络策略的集中管理。
(2)集中式控制器:SDN网络中的控制器作为中心节点,负责网络的全局控制和管理。控制器与网络设备之间通过标准化的协议进行通信,如OpenFlow。控制器接收来自网络设备的状态信息,来指导数据包的转发行为。
(3)网络编程和应用:在SDN中,控制器可以通过编程接口提供给应用程序,让应用能够根据需要控制和管理网络。
17. 简述一下TCP和UDP的区别。★★★★★
(1)TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层协议。UDP(用户数据报协议)是一种无连接的、不可靠的、基于数据报的传输层协议。
(2)TCP由于需要连接、要保证可靠性,通常更慢;UDP 不需要连接、不需要保证可靠性,通常更快。
(3)TCP 以连续字节流的方式发送,因此数据会按顺序到达;UDP每个数据报独立,且有明确的边界。顺序发送的数据报可能会乱序到达接收方。
(4)TCP 需要保证可靠性,所以头部更大;UDP 不需要保证可靠性,所以头部更小。
【*子问题:TCP和UDP适合用于什么场景?】
(5)TCP 适用于可靠性高的应用,如网页浏览、文件传输(如FTP)、电子邮件传输(如SMTP)等。UDP 适用于实时性好的应用,如视频通话、直播、在线游戏、DNS查询等。
18. TCP的机制是什么?★★★★
TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。
(1)面向连接
在数据传输开始之前,TCP需要通过“三次握手”过程建立一个连接。数据传输完成后,通过“四次握手”过程终止连接。
(2)可靠传输
如果数据包在传输过程中丢失,TCP会重新发送丢失的数据包。通过序列号和确认应答(ACK)机制,TCP确保数据包按序到达。
(3)基于字节流
用户消息通过TCP协议传输时,消息可能会被操作系统分组成多个的TCP报文。数据的边界不由TCP维护,而是由上层应用层协议(如HTTP)来处理。
19. 详细说说TCP的拥塞控制?★★★
TCP阻塞控制的基本原理是通过监测网络的拥塞情况和调整发送速率来实现。当网络出现拥塞时,数据包的丢失率和延迟会增加,为了避免进一步加重网络负载,TCP会降低发送数据的速率。
以下是TCP阻塞控制的主要机制:
(1)慢启动:在TCP连接建立后,发送方初始将拥塞窗口设置为一个较小的值(通常为1个MSS),然后每经过一个往返时间(RTT),拥塞窗口就会加倍。这种机制使得发送方在开始时以较慢的速度逐渐增加发送的数据量,以便观察网络状况。
(2)拥塞避免:慢启动阶段过后,发送方会进入拥塞避免阶段。此时,拥塞窗口的增长速率变为线性增加,即每经过一个RTT,拥塞窗口只增加一个MSS。通过缓慢增加发送速率,TCP可以更好地探测到网络的容量,并避免过度拥塞。
(3)快速重传:当发送方连续收到3个重复的确认应答时,它会认为某个数据包丢失,并立即进行重传,而不必等待超时。这可以提前恢复丢失的数据包,减少重传带来的延迟。
(4)快速恢复:在快速重传后,发送方将进入快速恢复状态。此时,发送方会将拥塞窗口减半,并逐渐增加拥塞窗口的大小。这样做是为了降低发送速率,减少网络负载,同时也允许接收方继续接收数据。
20. 建立TCP连接为什么要三次握手,而不是不两次握手?★★★★
(1)三次握手可以确保双方都知道自己和对方具有接收和发送的能力,二次握手不能确定发送方的接受能力。
(2)三次握手可以防止历史连接的建立。
如果是两次握手,由于网络拥塞,客户端新旧连接发送了两个SYN报文,服务器收到旧连接的SYN报文后进入ESTABLISHED 状态,并发送SYN+ACK报文给客户端,客户端检查序列号,发现不是新连接的SYN+ACK报文,就会发送RST报文让服务器终止。对比三次握手,服务器多了一次连接的建立和销毁,增大了开销。
(3)四次握手也可以进行通信,但是三次已经足够了,可以把服务器的SYN和ACK合并成一条报文减少一次通信。
21. 流量控制引发的死锁?怎么避免死锁的发生?★
当发送者收到了一个窗口为0的应答,发送者便停止发送,等待接收者的下一个应答。但是如果这个窗口不为0的应答在传输过程丢失,发送者一直等待下去,而接收者以为发送者已经收到该应答,等待接收新数据,这样双方就相互等待,从而产生死锁。
为了避免流量控制引发的死锁,TCP使用了持续计时器。每当发送者收到一个零窗口的应答后就启动该计时器。时间一到便主动发送报文询问接收者的窗口大小。若接收者仍然返回零窗口,则重置该计时器继续等待;若窗口不为0,则表示应答报文丢失了,此时重置发送窗口后开始发送,这样就避免了死锁的产生
22. DNS域名解析的过程?★★★★
DNS解析就是将域名转换为IP。按照本地DNS服务器→本地DNS服务器→根域名服务器→顶级域名服务器→权威域名服务器的顺序递归查询,得到IP。
23. DHCP的作用和工作原理?★★★★
DHCP属于应用层协议,传输层采用的是UDP协议,DHCP用于自动分配IP地址给网络中的主机。当客户端初次接入网络,或者网络发生变化时,会触发DHCP机制。
(1)客户端首先发起DHCP发现报文,使用UDP广播,目的IP为255.255.255.255,源IP为0.0.0.0。
*由于客户端没有分配IP,也不知道DHCP服务器的IP,所以
(2)DHCP服务器收到后,会发送 DHCP提供报文响应。源IP为DHCP服务器的IP地址,目的IP为255.255.255.255,报文携带了可租约IP、子网掩码、默认网关、DNS服务器以及IP地址租用期。
(3)客户端选择一个服务器发送的DHCP提供报文,发送 DHCP请求报文。目的IP为255.255.255.255,源IP地址为0.0.0.0。
(4)DHCP服务器会发送DHCP确认报文进行响应。随后,客户端就能够在租用期内使用分配的IP。
24. 为什么有MAC地址还需要IP地址?★★
(1)各式各样的网络使用不同的硬件地址,IP地址的作用是屏蔽异构网路的差异,使得不同网络之间的设备可以进行信息交互。
(2)IP地址的本质是终点地址,它在跳过路由器的时候不会改变,而MAC地址则是下一跳的地址,每一次经过一个路由器都会改变。
(3)分别用MAC地址和IP地址表示物理地址和逻辑地址方便网络分层,使得网络层和数据链路层的协议可以更灵活地替换。
25. 在TCP拥塞控制中,什么是慢开始,拥塞避免,快重传和快恢复算法?★★★
慢开始和拥塞避免:
发送方会维持一个拥塞窗口,刚开始拥塞窗口和发送窗口大小相同,初值为1。每次收到一个确认,就让拥塞窗口大小变为原来的两倍,并以此类推,形成指数增大。而当窗口值等于慢开始门限值时,就会执行拥塞避免,窗口值每次加1,形成加法增大。若此时出现网络拥塞,则将拥塞窗口值重新设置为1,并且修改门限值为发生网络拥塞时的拥塞窗口值的一半;
快重传和快恢复:
当发送方收到三个连续确认时,发送方执行乘法减小策略,将拥塞窗口设置为当前的一半,同时对接收方请求的帧执行快重传算法立刻进行重传而不是等待超时,并且直接执行快恢复算法,即进入拥塞避免状态,采取加法增大每次将拥塞窗口大小+1。
26. 请你说说HTTP的一些特性?★★★
(1)HTTP是无状态的,不会保存客户端与服务器之间的交互状态。每次请求之间是独立的,不会记忆上一次请求的信息。如果想要维护状态,可以使用cookies和session。
(2)HTTP是不安全的,基于明文传输,存在窃听、篡改和冒充的风险。
【子问题:为什么HTTP是无状态的?】
防止传输的数据被窃听、篡改、冒充;如果每次都要携带状态信息,会增加网络传输的压力,也会客户端和服务器内存的压力。
【子问题:如何让HTTP有状态?】
如果想要维护状态,可以使用cookies。如果客户端携带了cookie,服务器就可以通过cookie判断客户端是否保存已发送的资源。
① 流程:cookie保存在客户端,用来存储状态信息。客户端发起请求,如果请求报文没有cookie,服务器在响应报文中写上set-cookie。客户端把cookie保存在浏览器,后续请求都有cookie,这样就维持了状态。
② 优缺点:cookie一定程度可以保存状态,但是有一定安全风险,用户可以篡改cookie发送给服务器;cookie的容量也是有限的,默认传输4KB。
除了使用cookies的其他方法:session、token等。
27. 简述HTTP和HTTPS的区别。★★★★★
HTTPS是基于HTTP的加密传输协议,使用SSL或TLS协议对HTTP进行加密,使得传输过程更加安全可靠。过使用公钥加密和私钥解密的方式,对客户端和服务器之间的通信进行加密保护,使得第三方无法轻易获取和篡改传输的数据。
主要区别如下:
(1)安全性:HTTP不进行数据加密,数据以明文形式传输,容易被拦截、窃取和篡改;而HTTPS通过加密技术对数据进行加密,通信过程更加安全。
(2)协议端口:HTTP默认使用80端口进行通信,而HTTPS默认使用443端口进行通信。
(3)证书认证:HTTPS使用数字证书来验证网站的身份,确保通信的安全性和可信度,防止中间人攻击等安全问题;而HTTP不需要进行证书认证。
(4)网络性能:由于HTTPS需要进行数据加密和解密操作,相比HTTP会增加一定的计算和传输开销,因此可能会稍微降低网络性能。
应用场景:
HTTPS通过加密技术保护了通信过程中的数据安全,适用于对数据安全性要求较高的场景,例如在线支付、用户登录等;
而HTTP适用于一些对数据安全性要求不高的场景,例如博客。
28. 请你说说HTTPS是如何建立连接的?
(1)HTTPS与HTTP一样,需要通过TCP协议三次握手建立连接。
(2)建立TCP连接后,将进行SSL/TLS四次握手,利用RSA算法握手具体如下:
① 第一次握手:Client Hello
客户端通过发送一个Client Hello消息。Client Hello消息包含了支持的SSL/TLS版本、客户端生成的第一随机数和支持的加密套件列表等。
② 第二次握手:Server Hello
服务器收到Client Hello后,回应一个Server Hello消息。Server Hello消息包含了确认使用的SSL/TLS版本、服务器生成的第二随机数,从客户端提供的加密套件列表中选择一个加密套件(如RSA算法、ECDHE算法)和服务器证书(包含服务器的公钥)等。
③ 客户端证书验证
客户端收到服务器的Server Hello后,通过本地内置的可信任的认证机构的公钥,确认证书的有效性。
④ 第三次握手
如果客户端验证证书有效,客户端用服务器公钥向服务器发送第三随机数。服务器和客户端有了这三个随机数,接着就用双方协商的加密算法,各自生成本次通信的会话秘钥。
客户端生成好会话秘钥之后,给服务器发送加密通信算法改变通知,告诉服务器接下来使用会话秘钥加密通信,然后再把之前所有发送的数据做个摘要发送给服务器。
⑤ 第四次握手
服务器生成好会话秘钥之后,给客户端发送加密通信算法改变通知,告诉客户端接下来使用会话秘钥加密通信,然后再把之前所有发送的数据做个摘要发送给服务器。
(3)TLS的握手阶段结束后,客户端和服务器使用会话密钥加密HTTP数据,进行安全的数据传输。
29. 在浏览器里输入一个网址,会发生什么?★★★★★
面试官:请说一下浏览器从输入URL 到页面展示这个过程中都经历了什么?你能答出来吗?_哔哩哔哩_bilibili
你知道 HTTP 是如何使用 TCP 连接的吗?今天我就来告诉你!_网易订阅
(1)解析URL
首先解析URL,如果URL协议、域名、IP不合法,会直接交给搜索引擎。然后检查URL中是否又非法字符(空格、#和?),则对非法字符进行转义后在进行下一过程。
(2)缓存判断
按照浏览器缓存→操作系统缓存→路由器缓存的顺序进行检查,如果缓存中找到结果直接返回。
*例如,操作系统查询本地Hosts文件(如/etc/hosts或C:\Windows\System32\drivers\etc\hosts)。
(3)DNS解析
如果缓存未命中,首先进行DNS解析,将域名转换为IP。按照本地DNS服务器→本地DNS服务器→根域名服务器→顶级域名服务器→权威域名服务器的顺序递归查询,得到IP。
(4)ARP解析
客户端通过ARP协议获取目标IP的MAC地址。ARP解析的过程:检查ARP缓存→局域网内发送ARP广播→目标设备回复ARP单播→更新ARP缓存。
(5)建立TCP连接
客户端创建socket,绑定本机IP和端口,通过三次握手建立TCP连接,如果使用的是HTTPS协议,三次握手结束后还要TLS的四次握手。
(6)发送HTTP/HTTPS请求和响应
连接建立后,浏览器会向服务器发送HTTP/HTTPS请求。可以使用GET、POST等方法。服务器收到请求后,处理并返回响应给客户端。
(7)浏览器渲染
解析HTML,构建DOM树;解析CSS,构建CSSOM树;CSSOM树与DOM树合并成渲染树,然后进行布局与绘制。
30. 一个TCP连接可以供多少HTTP连接使用?
在HTTP/1.0和HTTP/1.1协议中,一个TCP连接可以供一个HTTP连接使用。
HTTP/1.0属于非持久连接,通常每个HTTP请求都会打开一个新的TCP连接,请求完成后关闭连接。
HTTP/1.1引入了持久连接,这使得单个TCP连接可以在发送完一个HTTP响应后保持打开状态,用于传输后续的HTTP请求和响应。尽管用管道机制,HTTP/1.1没有内建真正的并行请求处理机制。
HTTP/2引入了多路复用,允许在单个TCP连接上并行发送多个HTTP请求和响应。
HTTP/3不再使用TCP,而改为使用UDP,且在UDP和应用层之间新增一层QUIC协议。
31. TCP三次握手的过程是怎样的?★★
一开始,客户端和服务端都处于CLOSE状态。先是服务端主动监听某个端口,处于LISTEN状态。
(1)第一次握手
客户端会随机初始化序号(client_isn),将此序号填入TCP首部的32位序号字段中,同时把 SYN 标志位置为 1,表示希望建立连接。接着把第一个SYN报文发送给服务端,该报文不包含应用层数据,之后客户端处于SYN-SENT状态。
(2)第二次握手
服务端收到客户端的SYN报文后,首先服务端也随机初始化自己的序号(server_isn),将此序号填入TCP首部的32位序号字段中,其次在32位确认应答号字段填入client_isn+1,接着把SYN和ACK标志位置为 1。最后把该SYN和ACK报文发给客户端,该报文也不包含应用层数据,之后服务端处于 SYN-RCVD 状态。
(3)第三次握手
客户端收到服务端的SYN和ACK报文后,还要向服务端回应最后一个应答报文,首先该应答报文TCP首部 ACK 标志位置为 1 ,其次在32位确认应答号字段填入server_isn+1,最后把报文发送给服务端,这次报文可以携带客户到服务端的数据,之后客户端处于 ESTABLISHED 状态。服务端收到客户端的应答报文后,也进入 ESTABLISHED 状态。
32. TCP四次挥手过程是怎样的?
(1)第一次挥手
客户端打算关闭连接,此时会发送一个TCP首部FIN标志位被置为1的报文,也即FIN报文,之后客户端进入FIN_WAIT_1状态。
(2)第二次挥手
服务端收到该报文后,就向客户端发送ACK应答报文,接着服务端进入CLOSE_WAIT状态。客户端收到服务端的ACK应答报文后,之后进入FIN_WAIT_2状态。
(3)第三次挥手
等待服务端处理完数据后,也向客户端发送FIN报文,之后服务端进入LAST_ACK状态。
(4)第四次挥手
客户端收到服务端的FIN报文后,回一个ACK应答报文,之后进入TIME_WAIT状态
服务端收到了ACK应答报文后,就进入了CLOSE状态,至此服务端已经完成连接的关闭。
(5)等待2MSL
客户端在经过2MSL(报文最大生存时间)一段时间后,自动进入CLOSE状态,至此客户端也完成连接的关闭。
33. TCP为什么需要三次握手?两次握手或四次握手可以吗?
(1)三次握手可以保证双方具有接收和发送的能力
第一次握手服务端可以确认客户端的发送能力和服务端的接收能力是正常的;第二次握手客户端可以确认客户端和服务端的收发能力是正常的,但是服务端无法确认客户端的接收能力是正常的;第三次握手服务端可以确认客户端和服务端的收发能力都是正常的。
(2)三次握手可以防止历史连接的建立(最主要原因)
如果客户端有一个请求,但由于网络拥塞先后发送了两个SYN报文,其中旧的SYN报文有可能先到达服务器。
如果是两次握手,服务器收到了旧的SYN报文就会立刻建立连接。旧的SYN报文引起的第二次握手到达客户端,客户端会比较确认应答号字段是否是新的SYN报文的序列号+1,如果是旧的SYN报文发起的,那么会给服务器发送RST报文中止连接。服务器中止后,新的SYN报文又到达了服务器,此时才能建立起正确的连接。对比三次握手的相同情况,二次握手多建立起了一次连接,造成了资源的浪费。
(3)三次握手可以同步双方的初始序列号
TCP协议的通信双方,都必须维护一个序列号,才能保证按序可靠传输。也就是发送了携带了初始序列号的SYN报文,必须用携带了应答序列号的ACK报文来接收。四次握手其实也能够可靠的同步双方的初始化序号,可以把ACK和SYN报文合并在一起进行优化,所以就成了三次握手,这样减少了一次通信。二次握手少了一次ACK报文,也无法可靠的同步双方序列号。
(4)三次握手可以避免资源浪费
当客户端发的 SYN 报文在网络中阻塞,可能会超时重发多个SYN报文。如果多个SYN报文到达了服务端,这样会建立多个冗余的无效链接,造成不必要的资源浪费。
因此,通过三次握手能确认客户端和服务器的收发能力,防止历史连接的建立,能减少不必要的资源开销,能帮助双方同步初始化序列号。不使用两次握手是因为两次握手无法防止历史连接的建立,会造成双方资源的浪费,也无法可靠的同步双方序列号;不使用四次握手是因为三次握手就已经理论上最少可靠连接建立,所以不需要使用更多的通信次数。
34. 请你说说为什么四次挥手的TIME_WAIT时间是2MSL?为什么不是4MSL?
(1)如果第四次挥手的报文丢失了,服务端会超时重发第三次挥手报文,这一来一回的传输时间正好不超过2MSL,因为MSL指的是报文在网络中生存的最大时间。
(2)4MSL考虑的是第四次挥手报文丢失了两次,假设网络的丢包率1%,连续两次丢包就1/10000。连续两次丢包的概率实在太小了,因此2MSL的性价比最高。
35. 当视频突然卡帧,是什么原因?★★★★
(1)客户端
客户端网络带宽不够,或者CPU、GPU、内存等资源不足,或解码器问题。
(2)服务器
服务器负载量过大,或配置不当,或硬件故障。
(3)网络链路拥塞
网络中的数据流量过大,导致出现丢包。如果两端使用UDP进行传输,丢失的包并不会重传。
36. 访问一个网页时一直在转圈圈,分析是什么原因?★★★★
可以按F12查看状态码定位是服务器的问题还是客户端的问题:如果是4xx,那么是客户端的问题;如果是5xx,则是服务端的问题;如果是2xx,说明服务端返回了资源,但是前端代码有问题,没有渲染出页面。
可以从从服务器、客户端、网络的角度排查问题:
(1)服务器
可能是服务器连接数过多,CPU、内存、带宽的压力过大;或者服务出现了异常,例如代码错误、配置不当、或者受到限流/熔断/降级;或服务器遭受了DoS攻击。
(2)客户端
可能是客户端连接数过多,CPU、内存、带宽的压力过大;或者WIFI信号弱,有限网卡出故障了。
(3)网络
DNS解析失败;TCP连接异常,没有建立三次握手;网络链路拥塞,或被防火墙拦截。
37. 如何提高一个文件的下载速度,如何加速网络传输?★★★
(1)文件下载
① 多线程下载。将文件划分成若干块,客户端用多线程下载不同块,下载完成后再拼接起来。
② 减少传输量。对服务端发送的内容压缩传输(如 GZIP)。
拓展办法:③ 通过CDN就近分发,减少传输距离和延迟。
(2)通用办法
① 应用层:可以使用HTTP/2并发地发送多个请求的各个帧,然后在接收方得到帧后根据是否是同一个流来进行组装。可以使用使用QUIC协议,直接基于UDP实现低延迟传输,抗丢包能力强。
② 传输层:增大TCP缓冲区大小,并设置缓冲区大小为时延带宽积。
③ 网络层:升级网络设备,增大带宽。
38. 什么是HTTP长连接?★★
短连接的工作方式:三次握手建立TCP连接后,客户端发送一次请求报文,服务器发送一次响应报文,然后通过四次挥手释放连接。如果有多个请求,必须多次建立和销毁连接,开销会很大,传输效率很低。
基于短连接效率低的问题,长连接允许建立一次连接后可以发送多个请求,只要任意一端没有明确断开连接,就保持连接状态。
HTTP/1.0是默认是短连接,如果想要设置为长连接,必须在请求和响应报文头部同时显式设置Connection: Keep-Alive。HTTP/1.1之后默认是长连接。服务器可以设置Keep-Alive头部来指定保持连接的时间。例如Keep-Alive: timeout=5, max=100,表示这个连接在5秒内没有活动将会被关闭,同时最多可以处理100个请求。
39. 你了解过计算机网络的一些新兴技术吗?★★★★★
课本内的:
(1)HTTP/3.0和QUIC
HTTP/3基于UDP协议,并在UDP层上加了一层QUIC。QUIC具有以下特性:
① 极速连接。首次连接只要1个RTT就可以完成握手并协商。比传统的TCP+TLS快。再次连接时如果之前连接过相同的服务器,可以实现0个RTT就连接,无需等待直接发送数据。
② 解决了对头阻塞问题。HTTP/2虽然解决了HTTP层的对头阻塞问题,但是TCP层的对头阻塞没解决。QUIC在UDP层实现了多路复用,方法类似于HTTP/2,彻底消除了对头阻塞问题。
③ 使用连接ID来标识一个连接,而不是IP+端口。当从WIFI切换到4G时,只要连接ID不变,连接就不会中断。
(2)SDN
SDN是一种网络架构,其核心思想是将网络控制平面(决定数据如何流动)与数据平面(实际转发数据包)分离,并通过软件进行集中控制。这使得网络更加灵活,易于管理和编程,有助于实现自动化和简化网络配置。
(3)CDN
CDN将资源缓存到离用户更近的服务器节点,加速内容访问。
课本外的:(这里就不一一详细例举了)
NFV、5G、WIFI 6、边缘计算等等。