计算机网络面试题

文章目录

  • 本章内容概述
    • 1. 网络模型?
    • 2. TCP 三次握手?
    • 3. TCP 四次挥手?
    • 4. TCP & UDP
    • 5. HTTP & HTTPS
    • 6. 路由?
    • 7. TTL (Time To Live) ?
    • 8. IP 地址?
    • 9. 服务器安全?
    • 10. ARP 协议
    • 11. forward & redirect
    • 12. 在浏览器中输入 URL 到访问主页的全部流程
    • 13. DNS 解析
    • 14. 数字签名 & 数字证书
    • 15. cookie & session
    • 16. URI & URL
  • 本章总结


本章内容概述

本文用于笔者在准备面试过程中,对计算机网络和网络编程相关问题作出具体分析和解答。


1. 网络模型?

第一种,OSI 七层参考模型:

物理层,底层数据传输,如网卡、网线;比特流(bits)

数据链路层,定义数据基本传输格式,如何传输、如何表示,如 MAC 地址;数据帧(frames)

网络层,定义 IP 地址,路由功能,如不同设备的数据转发;数据包(packeges)

传输层,端到端传输数据的基本功能,如 TCP/UDP;数据段(segments)

会话层,控制应用程序之间会话能力,如不同软件数据分发给不同软件;

表示层,数据格式表示,基本压缩加密;

应用层,应用软件,如 HTTP、HTTPS、SSH。

只是一个标准,不是实现,网络四层模型是一个实现的应用模型。

第二种,网络五层模型,通过此模型讲解一台计算机如何找到另一台计算机并发送数据到指定计算机。

网络五层模型中,五层模型分别为:物理层,数据链路层,网络层,传输层,应用层。五层模型相对比较复杂,尽量采用简洁的语言进行分析,在网络中,一台计算机如何找到目标主机并发送数据到目标主机。

物理层,通信的基础是,两台主机必须相连,可以通过光纤、电缆、双绞线等介质,将主机相连,从而传输电信号,这是物理层的作用。

数据链路层,制定规则,进行电信号的传输,使得计算机可以读懂电信号。本层有如下几个协议规定。

以太网协议,规定一组电信号构成一个数据包,称为帧,由标头和数据两部分组成,标头中包含发送者和接收者等信息,一般是固定长度,数据部分长度可变。但是计算机之间如何区分?由此引入 MAC 地址。

MAC 地址,连入网络的每个计算机都有至少一个网卡接口,而每张网卡都有独一无二的 MAC 地址,计算机数据之间的传送就是通过 MAC 地址进行唯一寻找的,由生产厂家负责标识唯一性。

广播,在同一子网下的两个计算机进行数据传输时,发送者会将帧以广播的形式发送给子网下的全部计算机,收到帧的计算机会对比帧中标头中的 MAC 地址是否与自身匹配,不匹配则丢弃。ARP 协议,可用于识别目标主机的 MAC 地址,具体的协议内容放在上层中解释。

网络层,在整个计算机网络中,存在着很多很多子网络,这些子网络共同构成整个互联网。广播,作用域也仅仅是本子网中。

子网划分,可以有效的减少流动在网络中的无效数据包,比如如果没有子网,那么广播则需要对全部计算机发送数据,实在浪费网络资源,因此产生了子网的概念。

但接踵而来的问题是,如何区分哪些计算机属于同一个子网呢?对于同一个子网,直接广播,不同子网,则通过网关进行转发。为了区分子网,引入了 IP 地址的概念,即 IP 协议。

IP 协议,此协议定义的地址,称为 IP 地址,有两种版本,分别为 IPV4 和 IPV6,目前主要讨论 IPV4。IP 地址由 32 位二进制数组成,分为四段,前一部分代表网络部分,后一部分代表主机部分,两者占用位数不固定。当两台主机的网络号相同时,称为在同一子网,为了判断网络号是否相同,引入了子网掩码,网络部分为 1,主机部分为 0,IP 地址与子网掩码相与,便可得到网络号,判断是否在同一子网。

ARP 协议,在 IP 地址和子网掩码的帮助下,计算机便可以找到无论是本子网还是另一子网中的目标计算机,会在对应子网中广播目标主机的 IP 地址,当目标主机发现是自己的 IP 地址后,将自己的 MAC 地址回复回去即可,这样发送主机便可以得到目标主机的 MAC 地址了。不同子网之间的数据由网关负责转发。

DNS 服务器,可以将网址域名解析为 IP 地址返回给访问域名的主机,这样便可以获得域名对应的服务器的 IP 地址了。总而言之,网络层的功能是使得一台主机可以找到另一台主机。

传输层,实现端到端的通信,数据到达主机后,主机需要区分这个数据应该交付哪个进程处理,因此设定了端口的概念。可以说,网络层以下,建立了主机到主机的链路,传输层,则建立了端到端,也即进程到进程的链路。网络层常用的协议是,TCP & UDP。

应用层,处理数据包格式,最常见如 HTTP 数据包。

在网络五层模型中,每一层常见的协议如下:

计算机网络面试题_第1张图片

2. TCP 三次握手?

基本握手过程:第一次握手客户端向服务器发送一个 SYN 报文;第二次握手服务器受到客户端 SYN 报文后,向客户端发送一个 SYN+ACK 报文;第三次握手客户端收到服务器的 SYN+ACK 报文后,向服务器发送 ACK 报文,服务器收到 ACK 报文后,连接便正式建立。根本原因是为了保证双方接受和发送数据的能力。

第一次握手服务器确认客户端发数据能力正常,第二次握手确认服务器收发数据能力正常,第三次握手确认客户端收数据能力正常。因此必须三次握手才能确认双方的收发数据能力全部正常,也可以在一定程度上防止恶意连接占用服务器资源。

上述描述虽然正确,但是还不够严谨详细,接下来进行详细分析。

第一次握手,客户端向服务器发送 SYN 报文,指明自己的初始化序列号 ISN,然后客户端处于 SYN_SEND 状态第二次握手,服务器收到客户端的 SYN 报文之后,会发送 SYN 报文,指明自己的初始化序列号,并且将客户端的 ISN+1 作为 ACK 值,表明收到了客户端的 SYN,此时服务器处于 SYN_RCVD 状态第三次握手,客户端收到 SYN 报文后,向服务器发送 ACK 报文,内容为服务器初始化序列号 ISN+1,此时客户端处于 established 状态服务器收到报文后也处于 established 状态,连接建立完毕。

三次握手作用很多,可以确认双方接受、发送数据的能力是否正常;指定自己的初始化序列号,为后续的可靠传输做准备。其中,ISN 是随机生成的,可以告知对方接下来接受数据时如何按序列号组装数据,如果固定的话可能会给攻击者可乘之机,也能防止保温杯下一个相同四元组的连接接收。需要注意,当服务器第一次收到客户端的 SYN 后,会处于 SYN_RCVD 状态,虽然还未完全建立连接,但会将其放入半连接队列(backlog),完成三次握手后会放入全连接队列。在三次握手中,尽最后一次可以携带数据,因为此时客户端已经确认服务器收发功能正常,避免存在恶意攻击刻意将大量数据写入 SYN 中,浪费服务器资源。

3. TCP 四次挥手?

在正常建立连接后,双方都处于 established 状态,一般是客户端主动发起关闭请求。

第一次挥手,客户端向服务器发送 FIN 报文,报文中指定序列号,此时客户端处于 FIN_WAIT1 状态;第二次挥手,服务端收到客户端的 FIN 后,发送 ACK 报文,将客户端的序列号 ISN+1 作为 ACK 内容,表明收到了客户端的 FIN,此时服务器处于 CLOSE_WAIT 状态;第三次挥手,服务器向客户端发送 FIN 报文,指定自己的序列号,此时客户端处于 LAST_ACK 状态;第四次挥手,客户端收到服务器的 FIN 后,回复 ACK,将序列号 ISN+1 作为 ACK 内容,此时客户端处于 TIME_WAIT 状态,需要确保服务器收到自己的信息后才会 CLOSED,服务器收到后直接 CLOSED。

TIME_WAIT 状态可以确保对方收到自己的最后一次挥手,以防未收到还需重传,可以保证对方主机能够安全进入 CLOSED 状态。同时可以防止失效的连接请求报文出现在本连接中,因为经过 2MSL 后,本链接持续时间内的全部报文段都会消失,保证下一个连接不会出现旧的连接请求报文段。

但是每一个处于 TIME_WAIT 状态的 TCP 连接都会占用一个 socket 文件资源描述符,会降低服务器性能,因此也需要尽快将连接回收,快速投入重用,保证服务器性能。解决方法是设置服务器的 SO_REUESADDR ,通知内核当端口被占用但 TCP 连接处于 TIME_WAIT 状态时可以被重用。

为了防止意外关闭的客户端连接依然占用服务器资源,会通过保活计时器(心跳包)来确认连接有效,并及时断开并回收无效连接,节约服务器资源。

4. TCP & UDP

TCP 是面向连接的传输层协议,需要先建立通道,在进行通信,最后销毁通道。每一条 TCP 连接仅有两个端点,只能点对点;TCP 提供可靠的传输服务,无差错、不丢失、不重复,按序到达;TCP 提供全双工通信;面向字节流,当做字节流发送。

TCP 的可靠性通过多方面保证。三次握手和四次挥手保证可靠传输信道;采用 ARQ 协议和滑动窗口,进行流量控制;慢开始、拥塞避免、快重传和快回复进行拥塞控制,避免网络拥塞。TCP 的重传机制,滑动窗口确立发送边界,使得发送方知道已经确认的发送数据,接收方知道已经确认接受的字节数,使用选择重传对传输出错的序列重传。

UDP 无连接,不保证可靠交付;面向报文,不合并或者拆分应用层交付的报文,保留便捷;无拥塞控制;支持多对多;首部开销小。

两者相比,

协议 TCP UDP
可靠性 可靠 不可靠
连接 有连接 无连接
数据有序性 数据有序 数据无序
数据边界 不保留 保留
速度
流量控制
拥塞控制
量级 重量级 轻量级
首部 较长,20字节 较短,8字节

因为 TCP 面向连接,数据以字节流的形式,在连接上流动,没有边界,因此称为 TCP 数据流;而 UDP 没有连接,每个数据包都是独立的,不会拆分合并,直接对上层数据报打包,因此称为 UDP 数据报。

基于 TCP 的常用协议有:HTTP、HTTPS、FTP、TELNET、SMTP等;基于 UDP 的常用协议有:DNS、DHCP、TETP、SNMP等。

具体分析 TCP 的可靠传输和拥塞控制原理:可靠体现在 TCP 有状态,可控制。有状态是指,会确认发送报文和接受报文,保证报文按序到达,无差错;可控制是指在丢包或者网络不佳的情况下降低速度。通过两方面保证数据包有效传输。

首先分析可靠传输的保证实现。

数据包校验,对收到的数据包进行差错检测,如果发现数据包出错会丢弃并不确认,等待崇重传;重排序,对收到的 IP 数据包进行重新排序,再交付应用层;丢弃重复数据,收到重复数据直接丢弃;应答机制,对收到的数据包回复确认消息;超时重传,如果迟迟没有受到确认消息,则会重新发送数据包;流量控制,连接双方都有缓冲区,进行流量控制,采用滑动窗口协议。

拥塞控制发生在整个网络环境不佳的情况下,常用三种方法:慢启动阈值和拥塞避免、快速重传、快速恢复。

慢启动阈值和拥塞避免,是指采用比较保守的慢启动算法逐渐适应网络,在开始传输的一段时间设置较小的滑动窗口,随后每轮 RTT 窗口大小翻倍,达到阈值后降低增加速度。

快速重传,是指在传输过程中发生丢包,接收端就会重复发送之前的 ACK,发送端收到重复 ACK 后就会意识到发生丢包,立刻重传。

快速回复,是指发送端收到重复 ACK,发现丢包,但此时网络环境进入拥塞,则会将拥塞阈值降低为拥塞窗口的一半,然后拥塞窗口大小变为拥塞阈值,拥塞窗口继续线性增加,以适应网络状况。

分析 TCP 相关的一些协议,大致如下:

停止等待协议,也叫停等协议,即发送一个数据包后就停止发送,持续等待直到收到确认消息后再继续发送下一个数据包。

ARQ 协议,停止等待协议中持续等待,超时则自动重传,称为 自动重传请求 ARQ,与之相对的是连续 ARQ 协议,发送方维持一个滑动窗口,可以持续发送窗口内的数据包,接收方只需确认最后收到的分组即可。

因为 TCP 对资源的消耗比较高,因此 TCP 存在最大连接数限制,规定用一个四元组来唯一标识一个 TCP 连接[local IP, local Port, remote IP, remote Port],接下来讨论最大连接数的限制条件。

client 端,大多数客户端有且仅有一个 IP 地址,因此 TCP 最大连接数就取决于端口的数量,本地端口数最大为 65536,但是考虑到端口 0 的特殊含义,因此最多有 65535 条 TCP 连接。

server 端,在不考虑地址重用(SO_REUSEADDR)的情况下,最大连接数直接取决于远程 IP 和远程 Port 数量,理论上可以达到 2 ^ 32 * 2 ^ 16 个 TCP 连接,但是受到实际硬件条件的限制,远远无法达到上限。

UDP 可以在一些机制的辅助下实现可靠传输的效果:

  • 添加 seq/ack 机制
  • 添加超时重传机制
  • 添加收发缓冲区,用于超时重传

具体的收发机制为:发送方将待发送数据放入发送缓冲区,数据发送后等待确认消息;接收方受到数据后将数据放入接受缓冲区,并发送 ack 确认包;发送端收到确认包后,删除发送缓冲区内数据,定时检查是否需要重传。

5. HTTP & HTTPS

HTTP 协议,即超文本传输协议,有多个版本,分别是 HTTP/1.0、HTTP/1.1、HTTP/2,接下来分别讨论。

HTTP/1.0,最先推出的协议,规定浏览器和服务器只保持短暂的连接,浏览器每次请求都需要与服务器建立一个 TCP 连接,完成请求后会立刻断开,服务器也不会追踪请求记录。在这种方式下,只保持端正那链接,连接无法复用,每次请求都需要建立新的连接,性能比较差。

HTTP/1.1,为改进原来的缺陷,推出了新的协议,引入了持久连接,即 TCP 连接默认不关闭,可以被多个请求复用,如果发现对方一段时间没有活动,则可以关闭连接。同时,还引入了管道机制,即在同一个 TCP 连接中,浏览器可以同时发送多个请求,进一步提高效率。但是在这种条件下,请求仍必须按顺序处理,效率还能进一步提高。

HTTP/2,在原有基础上增加了多路复用,在一个连接中,浏览器和服务器都可以同时发送多个请求和回应,不用按照顺序一一对应,但是前提是 HTTP/2 进行了二级制分帧。

长连接,更适合用于操作频繁、连接数不多的点对点通信;短连接一般用于数量很多的连接情况。

最常用的 HTTP 方法有两种,分别为 GET 和 POST,对两种方法进行分析。

请求 GET POST
功能 从服务器请求数据 上传数据到服务器
参数传递 在 URL 中发送 在消息主体中发送
数据传输大小限制 不超过 2KB 默认无限制
安全性 安全性低 安全性较高
数据包个数 产生 1 个 TCP 数据包 产生 2 个 TCP 数据包

GET 请求中,会对 URL 中非西文字符进行编码,以避免歧义。

// 在特殊条件下
"name1=value1"
value1="va&lu=e1"
// 引发歧义
"name1=va&lu=e1"

可以通过对产生歧义的字符进行 URL 编码,服务端会将 % 修饰的字符当做普通字符处理,避免产生歧义

"name1=va%26lu%3De1"

除此之外,还有其他一些方法,如下表所示:

方法 作用
GET 获取资源,广泛应用
POST 传输实体主体
HEAD 获取报文首部
PUT 上传文件,无安全验证,使用少
PATCH 修改部分资源
OPTIONS 查询指定的 URL 支持方法
CONNECT 要求通信时建立隧道
TRACE 追踪路径
DELETE 删除文件且无安全验证

HTTP 常用的状态码分类:

  • 1xx,表示处于协议中间态,需要后续请求
  • 2xx,表示请求成功
  • 3xx,表示重定向状态,需要重新请求
  • 4xx,表示请求报文错误
  • 5xx,表示服务端错误

具体的状态码有:

状态码 含义
101 切换请求协议,从 HTTP 切换到 WebSocket
200 请求成功,有响应体
301 永久重定向,有缓存
302 临时重定向,无缓存
304 协商缓存命中
400 请求错误
403 服务器禁止访问
404 资源未找到
500 服务端错误
503 服务器繁忙

HTTP 通过特定参数保持长连接。在 HTTP/1.0 中,可以在头部设置 keep-alive,HTTP/1.1 之后,就默认是长连接了。本质上还是通过 TCP 长连接复用,减少资源消耗。

HTTPS,可以理解为具有加密效果的 HTTP 协议,大致工作流程为:

  1. 客户端发送自身支持的加密规则到服务器,告知服务器准备服务器准备进行链接;
  2. 服务器从加密规则中选择一种加密算法和 hash 算法,将自己的身份信息以证书形式发送到浏览器,证书中包括了服务器信息、加密公钥、颁发机构等信息;
  3. 客户端收到证书后会依次验证证书合法性、生成随机数加密公钥、按照约定好的算法计算握手消息、用生成的密钥进行加密后发送到服务器;
  4. 服务器接收到客户端信息后依次解析密码验证 hash 值、使用密钥加密消息;
  5. 计算 hash 值一致,握手成功。

HTTP 和 HTTPS 相比,本质上有所不同:HTTP 是基于 TCP 的协议,明文传输,客户端与服务端都无法验证对方身份;但是,HTTPS 是基于 SSH 的 HTTP,而 SSH 是基于 TCP 的,可以说 HTTPS 是添加了加密认证的 HTTP,具体有如下不同:

协议 HTTP HTTPS
端口 80 443
资源消耗 处理 ssl 加密,cpu 和内存消耗高
开销 购买通信证书
安全性 连接简单,无状态 加密传输、身份认证,更安全

HTTPS 的加密机制是一种共享密钥加密和公开密钥加密并用的混合加密机制,公钥是对外公开的,但是私钥是仅通讯双方可见的。

因此,HTTPS 可以提高数据发送安全性,基于 SSL + HTTP 构建加密传输、身份认证的网络协议,是目前最为安全的协议。但是相应的,HTTPS 会更加消耗时间和性能,效率会低一些,成本也会更高

6. 路由?

路由表,可以用来决定如何将一个包从一个子网传送到另一个子网,也即用来决定从一个网卡接收到的包应该发送到哪一张网卡上去。

路由表是一张表,每一行分别有目标网络号、子网掩码(netmask)、到该子网应使用的网卡。当路由器从某一个网卡接收到数据后,会扫描路由表的每一行,用子网掩码和包中的目标 IP 地址相与,比较是否为对应子网掩码的目标网络号:如果匹配,则保留下来作为备用路由,如果已存在备用路由,则保留网络号最长的作为备用路由;如果不匹配,则继续扫描下一行。如果没有匹配的,则通过默认路由转发出去。

在实际视线中,路由表中可能还包含更多的信息,但是路由算法效率并不高,且不 scalable 可伸缩,可以使用 IP 交换机解决,如 MPLS。

路由表有两种,一种是静态路由,由管理员手动配置,一般不会改变,相对固定,可以减少网络流量;另一种是动态路由表,自动建立,使用房间,增删简单,但需要占用路由器资源。

如果两台设备在物理连接无误的情况下无法连通,可以先 ping,失败的话通过 traceroute 确定断开的路由器,更换设备等。

7. TTL (Time To Live) ?

TTL ,即 Time To Live,一般是 hup count,每经过一次路由器就会减一,当减小到0时,这个数据包就会被丢弃,主要目的是防止包在有回路的网络中死转,浪费网络资源。

在 IP 网络中,往往存在回环,因此为防止数据包在网络中漫无目的的空转,引入此值,当此值为0时丢弃数据包。在丢弃数据包后,路由器会发送一个 ICMP 包返回,这也是 traceroute 的原理。ping 不一定需要此值,ifconfig、netstat 不需要此值。

8. IP 地址?

IP 地址分类如下:

类别 网络号
A类地址 (001~126) 网络号占前 8 位,以 0 开头,主机号占后 24 位
B类地址 (128~191) 网络号占前 16 位,以 10 开头,主机号占后 16 位
C类地址 (192~223) 网络号占前 24 位,以 110 开头,主机号占后 8 位
D类地址 (224~239) 以 1110 开头,保留位多播地址
E类地址 (240~255) 以 1111 开头,保留位今后使用

9. 服务器安全?

常见的攻击方式有两种,

  • SQL 注入攻击
  • XSS 攻击
  • SYN_FLOOD

SQL 注入攻击,是指通过将 SQL 命令插入到 web 表单或输入域名或页面请求的查询字符串,最终欺骗服务器执行恶意的 SQL 命令。常用解决办法是通过预编译绑定参数,将攻击者的 SQL 语句当做参数传递。

XSS 攻击,利用网站疏与对客户端信息处理的漏洞,添加一些脚本语言到 web 页面当中,从而窃取用户信息等恶意行为。主要原因是过于相信客户端提交的数据,应当对客户端数据进行过滤处理,如固定数据类型、标记重要的 cookie、过滤和移除特殊的 html 标签等。

SYN FLOOD,即 SYN 洪水攻击,是拒绝服务攻击的一种,攻击者通过发送大量的 SYN 请求到服务器消耗服务器资源,导致服务器性能下降无法回应合法请求。

具体操作是,攻击者通过虚拟 IP 向服务器发送大量第一次握手的 SYN 包,服务器需要一一回应 ACK 包,导致服务器资源被占用,

加密方式,常见的加密方式有对称加密和非对称加密两种。

对称加密,是指加密和解密采用同一种密钥,这样的方式存在的最大问题就是如何安全发送密钥。

非对称加密,是指采用公钥和私钥两种加密方式,公钥随意发布,但私钥仅自己知道,采用公钥加密,但解密需要私钥,这样的方式无需发送解密的私钥,因此可以保证安全性。但是非对称加密效率低,很慢,因此常用的还是对称加密。

10. ARP 协议

ARP 协议完成了 IP 地址与 MAC 地址的映射,实现方式大致如下。

在每台主机当中,会缓存一个 ARP 列表,包含目标 IP 地址和 MAC 地址的映射关系,在需要发送数据包时,会优先查找是否有对应 IP 地址的 MAC 地址,若有,则直接发送数据包到 MAC 地址,否则,发起一个查询 MAC 地址的网络请求,查询 MAC 地址。

目的主机收到对应的查询请求数据包后,会将数据包中的源主机 IP 地址和源 MAC 地址更新到 ARP 列表当中,并返回给源主机自己的 MAC 地址。源主机收到后,也会将其更新到自身的 ARP 列表,如果一直未收到,则 ARP 查询失败。

11. forward & redirect

两者表示两种请求方式,分别是直接转发和间接转发。

forward,直接转发,客户端和浏览器仅发出一次请求,有第二个信息资源响应请求,请求对象对每个信息资源共享。

redirect,间接转发,实际上发送两次 HTTP 请求,服务端响应后会向另一个 URL 发送请求,完成转发。

12. 在浏览器中输入 URL 到访问主页的全部流程

总体可以分为六个步骤,大致如下:

DNS 解析,浏览器查询 DNS ,获取对应 IP 地址;TCP 连接,获得 IP 地址后,发起三次握手;发送 HTTP 请求,建立连接后主动发送 HTTP 请求;服务器处理并返回报文,服务器处理请求并返回对应的结果给客户端;浏览器解析渲染,浏览器解析报文,如果遇到静态资源引用,则继续发送请求资源,最终呈现完整页面;断开连接,客户端主动断开连接或长时间无相应被服务端踢出。

13. DNS 解析

整个查询过程大致可以分为两个步骤,第一个环节是主机向本地域名服务器查询,第二个过程是本地域名服务器向根域名服务器查询。

递归查询,主机向本地域名服务器查询一般采用递归查询,即当本地域名服务器不知道查询结果时,会以 DNS 客户的身份向根域名服务器查询,换言之,即本地域名服务器代替主机查询,然后返回结果到主机。

迭代查询,本地域名服务器向根域名服务器查询一般采用迭代查询,即当根域名服务器收到请求时,会返回查询地址或下一步查询地址,根域名服务器通常会告知本地域名服务器顶级域名服务器地址,再由顶级域名服务器告知本地域名服务器下一步查询。

域名缓存,为了提高查询效率,会在域名服务器中缓存最近的映射记录,主机也会下载一些本地域名服务器的映射信息,也会删除一些无效信息,需要维护。但域名改动并不频繁,因此无需经常维护。

在整个解析过程中,会使用到 TCP 和 UDP 两种传输协议。

在区域传送时(主域名服务器和辅助域名服务器之间的数据传送),会使用 TCP,因为此时数据同步传送的数据量超过一个请求和应答数据量允许的报文更长,为确保数据正确性,必须使用 TCP;在主机和本地域名服务器之间,则直接使用 UDP,提高响应速度,但是域名解析服务器需要自行处理超时重传,从而保证可靠。

基于 DNS 的原理,一些恶意攻击者便可以通过篡改 DNS 服务器中的域名注册信息,使得用户无法正常访问对应的 IP 地址。为避免 DNS 被劫持,用户端可以通过直接访问 IP 地址来避免 DNS 劫持,并且由于域名劫持往往只能发生在特定的网络范围内,因此用户可以通过网络设置让 DNS 指向正常的域名服务器。

14. 数字签名 & 数字证书

数字签名,在数据传输过程中,可能会被攻击者恶意修改,因此需要在发送端做一个数字签名,对数据的摘要信息进行加密,与数据包一同发送这样就可以通过对比数据和加密码来判断数据是否被恶意修改。

数字证书,由 CA 证书机构颁发的一个证书,用来保证公钥的准确性。

15. cookie & session

因为 HTTP 协议是无状态的,但是为了提升用户使用质量,需要记录一些用户的状态,因此需要一些机制来完成。

session,服务段为特定的用户创建独有的 session,用于标识此用户,保存了用户的很多信息,保存在服务端。

cookie,客户端本地的,用于方便服务器识别客户信息的机制,提高用户体验。

总而言之,session 是在服务端保存的数据结构,用于跟踪用户状态;cookie 是保存在本地的一种机制,是实现 session 的一种方式。

16. URI & URL

URL,即统一资源定位符,就是平时上网时输入的网址,可以唯一表示一个互联网资源,并且指定对其进行操作和获取该资源的方法。

URI,也称为统一资源标识符,但是是一种抽象的,可相对的概念,但 URL 必须是绝对的,需要加入许多信息才能保证定位。


本章总结

本章主要分析计算机网络相关面试问题,希望对读者有所帮助。

最后,我是Alkaid#3529,一个追求不断进步的学生,期待你的关注!

你可能感兴趣的:(C++,面试核心与项目设计,计算机网络,网络,linux)