计算机网络面试题


  1. 主机之间的通信方式

    客户-服务器(C/S):客户是服务的请求方,服务器是服务的提供方。

    对等(P2P):不区分客户和服务器

  1. 五层协议

    应用层 :为特定应用程序提供数据传输服务,例如 HTTP、DNS 等协议。数据单位为报文。

    传输层 :为进程提供通用数据传输服务。由于应用层协议很多,定义通用的传输层协议就可以支持不断增多的 应用层协议。运输层包括两种协议:传输控制协议 TCP,提供面向连接、可靠的数据传输服务,数据单位为报 文段;用户数据报协议 UDP,提供无连接、尽最大努力的数据传输服务,数据单位为用户数据报。TCP 主要提 供完整性服务,UDP 主要提供及时性服务。

    网络层 :为主机提供数据传输服务。而传输层协议是为主机中的进程提供数据传输服务。网络层把传输层传递 下来的报文段或者用户数据报封装成分组。

    数据链路层 :网络层针对的还是主机之间的数据传输服务,而主机之间可以有很多链路,链路层协议就是为同 一链路的主机提供数据传输服务。数据链路层把网络层传下来的分组封装成帧。

    物理层 :考虑的是怎样在传输媒体上传输数据比特流,而不是指具体的传输媒体。物理层的作用是尽可能屏蔽 传输媒体和通信手段的差异,使数据链路层感觉不到这些差异。

    image-20210410143808905

  2. OSI

    表示层 :数据压缩、加密以及数据描述,这使得应用程序不必关心在各台主机中数据内部格式不同的问题。

    会话层 :建立及管理会话。

  1. TCP/IP

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

    TCP/IP 体系结构不严格遵循 OSI 分层概念,应用层可能会直接使用 IP 层或者网络接口层。

  1. 物理层通信方式

    单工通信:单向传输

    半双工通信:双向交替传输

    全双工通信:双向同时传输

  1. 网络层

    使用 IP 协议,可以把异构的物理网络连接起来,使得在网络层看起来好像是一个统一的网络。

  1. IP数据报格式

    image-20210410144400550

    版本 : 有 4(IPv4)和 6(IPv6)两个值;

    首部长度 : 占 4 位,因此最大值为 15。值为 1 表示的是 1 个 32 位字的长度,也就是 4 字节。因为首部固定长度 为 20 字节,因此该值最小为 5。如果可选字段的长度不是 4 字节的整数倍,就用尾部的填充部分来填充。

    区分服务 : 用来获得更好的服务,一般情况下不使用。

    总长度 : 包括首部长度和数据部分长度。

    生存时间 :TTL,它的存在是为了防止无法交付的数据报在互联网中不断兜圈子。以路由器跳数为单位,当 TTL 为 0 时就丢弃数据报。

    协议 :指出携带的数据应该上交给哪个协议进行处理,例如 ICMP、TCP、UDP 等。

    首部检验和 :因为数据报每经过一个路由器,都要重新计算检验和,因此检验和不包含数据部分可以减少计算 的工作量。

    标识 : 在数据报长度过长从而发生分片的情况下,相同数据报的不同分片具有相同的标识符。

    片偏移 : 和标识符一起,用于发生分片的情况。片偏移的单位为 8 字节。

  1. IP地址编值方式

    分类:

    由两部分组成,网络号和主机号,其中不同分类具有不同的网络号长度,并且是固定的。 IP 地址 ::= {< 网络号 >, < 主机号 >}

    image-20210410144818017

    子网划分:

    通过在主机号字段中拿一部分作为子网号,把两级 IP 地址划分为三级 IP 地址

    IP 地址 ::= {< 网络号 >, < 子网号 >, < 主机号 >}

    要使用子网,必须配置子网掩码。一个 B 类地址的默认子网掩码为 255.255.0.0,如果 B 类地址的子网占两个比特,那 么子网掩码为 11111111 11111111 11000000 00000000,也就是 255.255.192.0。

    注意,外部网络看不到子网的存在。

    无分类:

    无分类编址 CIDR 消除了传统 A 类、B 类和 C 类地址以及划分子网的概念,使用网络前缀和主机号来对 IP 地址进行编 码,网络前缀的长度可以根据需要变化。

    IP 地址 ::= {< 网络前缀号 >, < 主机号 >} CIDR 的记法上采用在 IP 地址后面加上网络前缀长度的方法,例如 128.14.35.7/20 表示前 20 位为网络前缀。

    CIDR 的地址掩码可以继续称为子网掩码,子网掩码首 1 长度为网络前缀的长度。

    一个 CIDR 地址块中有很多地址,一个 CIDR 表示的网络就可以表示原来的很多个网络,并且在路由表中只需要一个路 由就可以代替原来的多个路由,减少了路由表项的数量。把这种通过使用网络前缀来减少路由表项的方式称为路由聚 合,也称为 构成超网 。 在路由表中的项目由“网络前缀”和“下一跳地址”组成,在查找时可能会得到不止一个匹配结果,应当采用最长前缀匹 配来确定应该匹配哪一个。

  1. 地址解析协议 ARP

    网络层实现主机之间的通信,而链路层实现具体每段链路之间的通信。因此在通信过程中,IP数据报的源地址和目的地址始终不变,而MAC地址随着链路的改变而改变。

    image-20210410170545690

image-20210410170601966

每个主机都有一个ARP高速缓存,里面有本局域网上的各主机和路由器的IP地址到MAC地址的映射表。

​ 如果主机A知道主机B的IP地址,但是ARP高速缓存中没有该IP地址到MAC地址的映射,此时主机A通过广播的方式发送AARP请求分组,主机B收到该请求后发送ARP响应分组给主机A告知其MAC地址,随后主机A向其高速缓存中写入主机B的IP地址到MAC地址的映射。

  1. 网际控制报文协议 ICMP

    ICMP 是为了更有效地转发 IP 数据报和提高交付成功的机会。它封装在 IP 数据报中,但是不属于高层协议。

image-20210410171042199

ICMP 报文分为差错报告报文和询问报文。

image-20210410171059878

Ping

Ping 是 ICMP 的一个重要应用,主要用来测试两台主机之间的连通性。 Ping 的原理是通过向目的主机发送 ICMP Echo 请求报文,目的主机收到之后会发送 Echo 回答报文。Ping 会根据时间 和成功响应的次数估算出数据包往返时间以及丢包率。

Traceroute

Traceroute 是 ICMP 的另一个应用,用来跟踪一个分组从源点到终点的路径。 Traceroute 发送的 IP 数据报封装的是无法交付的 UDP 用户数据报,并由目的主机发送终点不可达差错报告报文。

源主机向目的主机发送一连串的 IP 数据报。第一个数据报 P1 的生存时间 TTL 设置为 1,当 P1 到达路径上的第一 个路由器 R1 时,R1 收下它并把 TTL 减 1,此时 TTL 等于 0,R1 就把 P1 丢弃,并向源主机发送一个 ICMP 时间超 过差错报告报文;

源主机接着发送第二个数据报 P2,并把 TTL 设置为 2。P2 先到达 R1,R1 收下后把 TTL 减 1 再转发给 R2,R2 收 下后也把 TTL 减 1,由于此时 TTL 等于 0,R2 就丢弃 P2,并向源主机发送一个 ICMP 时间超过差错报文。

不断执行这样的步骤,直到最后一个数据报刚刚到达目的主机,主机不转发数据报,也不把 TTL 值减 1。但是因为数据报封装的是无法交付的 UDP,因此目的主机要向源主机发送 ICMP 终点不可达差错报告报文。 之后源主机知道了到达目的主机所经过的路由器 IP 地址以及到达每个路由器的往返时间。

  1. 虚拟专用网 VPN

    由于 IP 地址的紧缺(原因),一个机构能申请到的 IP 地址数往往远小于本机构所拥有的主机数。并且一个机构并不需要把所 有的主机接入到外部的互联网中,机构内的计算机可以使用仅在本机构有效的 IP 地址(专用地址)。

    有三个专用地址块:

    10.0.0.0 ~ 10.255.255.255

    172.16.0.0 ~ 172.31.255.255

    192.168.0.0 ~ 192.168.255.255

    VPN 使用公用的互联网作为本机构各专用网之间的通信载体。专用指机构内的主机只与本机构内的其它主机通信;虚 拟指好像是,而实际上并不是,它有经过公用的互联网。 下图中,场所 A 和 B 的通信经过互联网,如果场所 A 的主机 X 要和另一个场所 B 的主机 Y 通信,IP 数据报的源地址 是 10.1.0.1,目的地址是 10.2.0.3。数据报先发送到与互联网相连的路由器 R1,R1 对内部数据进行加密,然后重新加 上数据报的首部,源地址是路由器 R1 的全球地址 125.1.2.3,目的地址是路由器 R2 的全球地址 194.4.5.6。路由器 R2 收到数据报后将数据部分进行解密,恢复原来的数据报,此时目的地址为 10.2.0.3,就交付给 Y。

    image-20210410171328241

  2. 网络地址转换 NAT

    专用网内部的主机使用本地 IP 地址又想和互联网上的主机通信时,可以使用 NAT 来将本地 IP 转换为全球 IP。 在以前,NAT 将本地 IP 和全球 IP 一一对应,这种方式下拥有 n 个全球 IP 地址的专用网内最多只可以同时有 n 台主机 接入互联网。为了更有效地利用全球 IP 地址,现在常用的 NAT 转换表把传输层的端口号也用上了,使得多个专用网 内部的主机共用一个全球 IP 地址。使用端口号的 NAT 也叫做网络地址与端口转换 NAPT。

image-20210410171409845

  1. 路由器的结构

    路由器从功能上可以划分为:路由选择和分组转发。

    分组转发结构由三个部分组成:交换结构、一组输入端口和一组输出端口。

    image-20210410171803399

  2. 路由器分组转发流程

    从数据报的首部提取目的主机的 IP 地址 D,得到目的网络地址 N。

    若 N 就是与此路由器直接相连的某个网络地址,则进行直接交付;

    若路由表中有目的地址为 D 的特定主机路由,则把数据报传送给表中所指明的下一跳路由器;

    若路由表中有到达网络 N 的路由,则把数据报传送给路由表中所指明的下一跳路由器;

    若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;

    报告转发分组出错。

    image-20210410171902917

  1. 路由选择协议

    路由选择协议都是自适应的,能随着网络通信量和拓扑结构的变化而自适应地进行调整。

    互联网可以划分为许多较小的自治系统 AS,一个 AS 可以使用一种和别的 AS 不同的路由选择协议。

    可以把路由选择协议划分为两大类:

    自治系统内部的路由选择:RIP 和 OSPF

    自治系统间的路由选择:BGP

  1. UDP 和 TCP 的特点

    用户数据报协议 UDP(User Datagram Protocol)是无连接的,尽最大可能交付,没有拥塞控制,面向报文(对 于应用程序传下来的报文不合并也不拆分,只是添加 UDP 首部),支持一对一、一对多、多对一和多对多的交 互通信。

    传输控制协议 TCP(Transmission Control Protocol)是面向连接的,提供可靠交付,有流量控制,拥塞控制,提 供全双工通信,面向字节流(把应用层传下来的报文看成字节流,把字节流组织成大小不等的数据块),每一 条 TCP 连接只能是点对点的(一对一)。

  1. UDP首部格式

    image-20210410172554467

首部字段只有 8 个字节,包括源端口、目的端口、长度、检验和。12 字节的伪首部是为了计算检验和临时添加的。

  1. TCP首部格式

    image-20210410172633864

序号 :用于对字节流进行编号,例如序号为 301,表示第一个字节的编号为 301,如果携带的数据长度为 100 字 节,那么下一个报文段的序号应为 401。

确认号 :期望收到的下一个报文段的序号。例如 B 正确收到 A 发送来的一个报文段,序号为 501,携带的数据 长度为 200 字节,因此 B 期望下一个报文段的序号为 701,B 发送给 A 的确认报文段中确认号就为 701。

数据偏移 :指的是数据部分距离报文段起始处的偏移量,实际上指的是首部的长度。

确认 ACK :当 ACK=1 时确认号字段有效,否则无效。TCP 规定,在连接建立后所有传送的报文段都必须把 ACK 置 1。

同步 SYN :在连接建立时用来同步序号。当 SYN=1,ACK=0 时表示这是一个连接请求报文段。若对方同意建立 连接,则响应报文中 SYN=1,ACK=1。

终止 FIN :用来释放一个连接,当 FIN=1 时,表示此报文段的发送方的数据已发送完毕,并要求释放连接。

窗口 :窗口值作为接收方让发送方设置其发送窗口的依据。之所以要有这个限制,是因为接收方的数据缓存空 间是有限的。

  1. TCP的三次握手

    image-20210410172745968

假设 A 为客户端,B 为服务器端。

首先 B 处于 LISTEN(监听)状态,等待客户的连接请求。

A 向 B 发送连接请求报文,SYN=1,ACK=0,选择一个初始的序号 x。

B 收到连接请求报文,如果同意建立连接,则向 A 发送连接确认报文,SYN=1,ACK=1,确认号为 x+1,同时也选 择一个初始的序号 y。

A 收到 B 的连接确认报文后,还要向 B 发出确认,确认号为 y+1,序号为 x+1。

B 收到 A 的确认后,连接建立。

  1. 三次握手的原因

    第三次握手时为了防止失效的连接请求到达服务器,让服务器错误打开连接。

    客户端发送的连接请求如果在网络中滞留,那么就会隔很长一段时间才能收到服务器端发回的连接确认。客户端等待一个超时重传时间之后,就会重新请求连接。但这个滞留的连接请求最后还是会到达服务器,如果不进行三次握手,那么服务器就会打开两个连接。如果有第三次握手,客户端会忽略服务器之后发送的对滞留连接请求的连接确认,不进行第三次握手,因此就不会再次打开连接。

  1. 域名系统DNS

    DNS 是一个分布式数据库,提供了主机名和 IP 地址之间相互转换的服务。这里的分布式数据库是指,每个站点只保 留它自己的那部分数据。

    域名具有层次结构,从上到下依次为:根域名、顶级域名、二级域名。

    image-20210410173517213

  1. 文件传送协议FTP

    FTP 使用 TCP 进行连接,它需要两个连接来传送一个文件:

    控制连接:服务器打开端口号 21 等待客户端的连接,客户端主动建立连接后,使用这个连接将客户端的命令传 送给服务器,并传回服务器的应答。

    数据连接:用来传送一个文件数据。


文章作者: youminglan
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 youminglan !