面试常见问题——计算机网络(一)
目录:
- TCP/IP四层模型和OSI七层模型的区别与联系
- 电路交换、报文交换、分组交换
- 数据报和虚电路的比较
- 路由器的工作原理
- DHCP协议
- ARP协议工作流程
- HTTP协议的请求类型
- 路由器和交换机的区别
- 端口号作用,以及常用的端口号
- TCP和UDP的区别以及分别的使用场景
计算机网络定义:以能够相互共享资源的方式互联起来的自治计算机系统的集合。
1、TCP/IP四层模型和OSI七层模型的区别与联系
(1)TCP/IP四层模型(见OSI七层模型描述)
- 网络接口层(物理层+数据链路层)
- 网际层
- 传输层
- 应用层(会话层+表示层+应用层)
(2)OSI七层模型
- 通信子网(低三层)
- 物理层(Physical Link Layer)
- 传输单位:比特(bit)
- 主要功能:
- 为上层协议提供了一个传输数据的物理媒体,实现比特流的透明传输
- 定义数据终端设备和数据通信设备的物理与逻辑连接方法
- 规定通信端点之间的机械特性、电气特性、功能特性、过程特性
- 常见的物理媒体:
- 有线:
- 双绞线
- 同轴电缆
- 光纤
- 无线:
- 无线电波
- 微波
- 红外线
- 激光
- 有线:
- 典型协议:
- EIA-232C
- CCITT的X.21协议
- 物理层设备(不能隔离冲突域和广播域):
- 中继器:信号整形放大再转发,消除信号的失真及衰减问题,具有5-4-3规则
- 5-4-3规则:10BASE5以太网规范中,互相串联的中继器的个数不能超过4个,用4个中继器串联的5段通信介质中只有3段可以挂接计算机,其余两段只能用作扩展通信范围的链路段。
- 集线器(多端口的中继器)
- 中继器:信号整形放大再转发,消除信号的失真及衰减问题,具有5-4-3规则
- 数据链路层(Data Link Layer):点到点通信(主机到主机)
- 传输单位:帧(frame)
- 主要功能:
- 组装成帧:将网络层传来的IP数据报组装成帧(加首部,加尾部)
- 常用方法:
- 字符计数法:在帧头部使用一个计数字段来标明帧内字符数
- 首尾定界法:使用特定字符或者比特模式定界帧的开始和结束
- 字符填充:在数据中的特殊字符前面用转移字符填充
- 比特填充:遇到5个1填充一个0
- 违规编码法:信号传输过程中采用违规的编码来表示帧的起始和终止
- 常用方法:
- 差错控制:
- 采取奇偶校验码、循环冗余校验(CRC)方式发现位错,通过自动重传请求(Automatic Repeat reQuest,ARQ)来重传出错的帧
- 纠错编码:海明码
- 采取定时器和编号机制,保证每一帧最终都能有且仅有一次正确地交付给目的结点
- 流量控制:协调结点A的发送速率和结点B的接收速率
- 停止-等待协议(发送窗口 = 1,接收窗口 = 1):
- 发送方每发送一帧都要等待接收方的应答信号才能发送下一帧
- 后退N帧协议(GBN)(发送窗口 > 1,接收窗口 = 1):
- 发送方一次可以发送N帧,按序接收,重传最后一个确认开始
- 选择重传协议(SR)(发送窗口 > 1,接收窗口 > 1):
- 发送方一次可以发送N帧,可以不按序接收,重传没有确认的帧
- 停止-等待协议(发送窗口 = 1,接收窗口 = 1):
- 介质访问
- 随机访问
- ALOHA协议:
- 纯ALOHA协议:不检测直接发送,若无确认则等待重发
- 时隙ALOHA协议:将时间划分为若干等长时隙,按时发送
- CSMA协议(Carrier Sense Multiple Access,载波监听多路访问):
- 1-坚持:闲则发送,忙则继续监听
- p-坚持:闲则以概率p发送,概率1-p等待下一个时隙,忙则等待一个随机时间监听
- 非坚持:闲则发送,忙则等待一个随机时间监听
- CSMA/CD协议(Carrier Sense Multiple Access with Collision Detection,载波监听多路访问/碰撞检测)
- 先听后发,边听边发,冲突停发,随机重发
- 碰撞解决:二进制指数退避算法
- CSMA/CA协议(Carrier Sense Multiple Access with Collision Avoidance,载波监听多路访问/碰撞避免):
- 避免碰撞:预约信道、ACK帧、RTS/CTS帧
- 碰撞解决:二进制指数退避算法
- ALOHA协议:
- 信道划分:
- 频分复用:将多路信号调制到不同频率载波上叠加形成一个复合信号
- 时分复用:将物理信道按时间分为若干时间片,轮流给不同信号使用
- 波分复用:在一根光纤中传播多种不同波长(频率)的信号
- 码分复用:靠不同的编码来区分各路原始信号,如CDMA技术(Code Division Multiple Access,码分多址)
- 轮询访问:
- 令牌传递协议,只有得到令牌的机器才能发送数据,其他必须等待
- 随机访问
- 组装成帧:将网络层传来的IP数据报组装成帧(加首部,加尾部)
- 子层:
- 介质访问子层
- 链路访问子层
- 典型协议:
- PPP协议(Point to Point Protocol,点到点协议):面向字节流,采用字节填充方式,支持全双工链路,具有检错能力,但不具有纠错能力,不可靠
- HDLC协议(High-Level Data Link Control,高级数据链路控制协议):面向比特,采用0比特插入法,帧类分为信息帧、监督帧和无编号帧,采用CRC帧校验序列(FCS),可靠性高
- STP协议
- 帧中继协议
- 链路层设备(能隔离冲突域,不能隔离广播域):
- 网桥:网桥工作在数据链路层,可以互联不同的物理层、不同的MAC 子层及不同速率的以太网
- 类型:
- 透明网桥:按照自学习算法填写转发表,按转发表转发
- 源路由网桥:先发送发现帧,按返回结果转发
- 类型:
- 交换机:交换机工作在数据链路层,相当于一个多端口的网桥,是交换式局域网的核心设备。
- 交换方式:
- 直通式:帧在接收后只检查目的地址,几乎能马上就被传出去
- 存储转发式:先将接收到的帧缓存到高速缓存器,检查数据正确性
- 交换方式:
- 网桥:网桥工作在数据链路层,可以互联不同的物理层、不同的MAC 子层及不同速率的以太网
- 网络层(Network Layer):也称为网际层、IP层
- 传输单位:数据报
- 主要功能:
- 将IP地址翻译为MAC地址,并决定如何将数据从发送方路由到接收方
- 异构网络互联
- 差错控制
- 路由选择
- 拥塞控制:保证通信子网能够传送待发送的数据,涉及网路中所有的主机、路由器
- 流量控制:发送端和接收端之间的点对点通信量的控制,抑制发送端的发送速率,以便使接收端来得及接收
- 典型协议:
- IP协议
- ICMP协议(Internet Control Message Protocol,网络控制报文协议)
- 用来给主机或路由器报告差错和异常情况
- IGMP协议(Internet Group Management Protocol,网际组管理协议)
- 用于主机和多播路由器的请求和探询
- DHCP协议
- 给网络中的主机动态分配IP地址
- RARP协议(Reverse Address Resolution Protocol,反向地址转换协议)
- 根据物理地址,查询其IP地址。允许局域网的物理机器从网关服务器的 ARP 表或者缓存上请求其 IP 地址。
- ARP协议(Address Resolution Protocol,地址解析协议)
- 根据网络IP地址,查询其对应的物理地址
- RIP协议(Routing Information Protocol,路由信息协议)
- 基于距离-向量路由选择协议,使用UDP,与相邻路由器交换整个路由表
- OSPF协议(Open Shortest Path First,开放式最短路径优先)
- 基于链路状态路由算法,使用IP,与全部路由器交换相邻顶点链路状态
- BGP协议(Border Gateway Protocol,边界网关协议)
- 基于路径-向量选择协议,使用TCP,寻找的并非最佳路由
- 网络层设备(能隔离冲突域和广播域):
- 路由器
- 物理层(Physical Link Layer)
- 传输层承上启下
- 传输层(Transport Layer):端到端通信(进程到进程),端指用户程序的端口,端口号标识了应用层中不同的进程
- 传输单位:报文段(TCP)或用户数据报(UDP)
- 主要功能:
- 端到端连接提供可靠的传输服务
- TCP连接管理:三次握手(Three-way Handshake)建立和四次挥手释放
- 流量控制(Flow Control):
- 在确认报文中设置接收窗口rwnd的值来限制发送速率
- 差错控制
- 超时重传:计时器到期还没收到确认则重传对应报文
- 冗余确认:当收到失序报文时向发送端发送冗余ACK
- 传输层分用和复用
- 分用:接收方的传输层在剥去报文的首部后,能够把收到的信息交付给上面应用层中目的应用进程
- 复用:多个应用层进程可使用同一个传输层协议传送数据
- 拥塞控制:根据自己估算的网络拥塞程度设置拥塞窗口cwnd的值来限制发送速率
- 方法:
- 慢开始:先令cwnd = 1,即一个最大报文段长度MSS。当cwnd < ssthresh(慢开始门限初始值)时,每收到一个报文段的确认cwnd加1
- 拥塞避免:当cwnd > ssthresh时,每经过一个往返时延RTT,cwnd加1
- 快重传:当连续收到三个重复的ACK,直接重传对方期待的报文
- 快恢复:当连续收到三个冗余ACK,令ssthresh = cwnd' = cwnd/2
- 拥塞处理:ssthresh置为原cwnd的一半,cwnd置1
- 典型协议:
- TCP协议(Transmission Control Protocol,传输控制协议)
- UDP协议(User Datagram Protocol,用户数据报协议)
- 传输层(Transport Layer):端到端通信(进程到进程),端指用户程序的端口,端口号标识了应用层中不同的进程
- 资源子网(高三层)
- 会话层(Session Layer)
- 主要功能:
- 负责管理主机间的会话进程,包括建立、管理和终止进程间的会话
- 提供单工(Simplex)、半双工(Half Duplex)、全双工(Full Duplex)三种通信模式的服务
- 会话层可以使用校验点使通信会话在通信失效时从校验点继续恢复通信,实现数据同步
- RPC(Remote Procedure Call,远程过程调用)、NFS(Network File System,网络文件系统)工作在此层
- 主要功能:
- 表示层(Presentation Layer)
- 主要功能:
- 负责数据的编码以及转化,确保应用层能够正常工作
- 界面与二进制代码间互相转化的地方
- 负责数据压缩和解压、加密和解密
- 可以根据不同的应用目的将数据处理为不同的格式,表现出来就是各种各样的文件扩展名
- 主要功能:
- 应用层(Application Layer)
- 主要功能:
- 负责明确通信对象,并确保有足够的资源用于通信
- 典型协议:
- FTP(File Transfer Protocol,文件传输协议)
- SMTP(Simple Mail Transfer Protocol,电子邮件协议)
- HTTP(Hyper Text Transfer Protocol,超文本传输协议),HTTP协议用于从Web服务器传输超文本到本地浏览器的传送协议,由请求和响应构成。
- 特点:
- 无连接、无状态(但可用cookie、session等对客户端浏览器做标记)
- 支持客户/服务器模式
- 灵活,允许传输任意类型的数据对象,由Content-Type加以标记
- HTTP状态码:
-
状态码 描述 已定义范围 分类 1XX 信息性状态码 100-101 信息提示 2XX 成功状态码 200-206 成功 3XX 重定向状态码 300-305 重定向 4XX 客户端错误状态码 400-415 客户端错误 5XX 服务器错误状态码 500-505 服务器错误
-
- 特点:
- HTTPS(Hyper Text Transfer Protocol over Secure Socket Layer,安全套接层):SSL是为网络通信提供安全及数据完整性的一种安全协议
- DNS(Domain Name System,域名系统):将域名解析为IP地址
- DNS劫持:在劫持的网络范围内拦截域名解析的请求,分析请求的域名,把审查范围以外的请求放行,审查范围以内的请求返回假的IP地址,或者什么都不做使请求失去响应,可以轻松获取各种明文传输的密码,比如各种网站的账号信息都一览无余。
- SNMP(Simple Network Management Protocol,简单网络管理协议)
- 主要功能:
- 会话层(Session Layer)
(3)区别:
- OSI参考模型精确定义了三个概念:服务、协议和接口;TCP/IP模型没有,不符合软件工程思想
- 服务:下层为紧邻的上层提供的功能调用,是垂直的。对等实体在协议的控制下,使得本层可以为上一层提供服务,但要实现本层协议还需要下一层所提供的服务
- 协议:由语法、语义、同步三部分组成,是控制两个或多个对等实体进行通信的规则的集合,是水平的。
- 接口:同一结点内相邻两层间交换信息的连接点,是一个系统内部的规定。SAP(Service Access Point,服务访问点)是一个逻辑接口,服务是通过SAP提供给上层使用的
- TCP/IP模型是事实上的国际标准
- OSI参考模型在网络层支持无连接和面向连接的通信,在传输层仅有面向连接的通信。而TCP/IP模型在网际层仅有无连接的通信,传输层有面向连接和无连接的通信
(4)联系:
- 二者都采取分层的体系结构,分层的功能也大体相似
- 二者都基于独立的协议栈的概念进行分层
- 二者都可以解决异构网络的互联,实现世界上不同厂家生产的计算机之间的通信
2、电路交换、报文交换、分组交换
- 电路交换:
- 两个结点之间事先建立专用物理通信路径,这一路径在整个数据传输期间一直被独占,直到通信结束后才释放
- 灵活性差,通路中任意一点出现故障,需要重新拨号建立新的连接
- 线路独占,信道利用率低
- 适用场景:数据量很大且传送时间远大于呼叫时间,如传统电话网络
- 报文交换(早期使用,现在用分组交换):
- 单位:报文
- 将整个报文转发到相邻节点,全部存储下来,查找转发表,转发到下一个节点。
- 无须建立连接,在交换结点采取存储转发的传输方式
- 提高线路可靠性,提高线路利用率
- 对报文的大小无限制,要求网络结点有较大的缓存空间
- 分组交换:
- 分组交换限制了每次传送数据块大小的上限,再加上源地址、目的地址、分组编号信息等控制信息,构成分组。
- 需要额外的信息量,流水线传输(后一个分组的存储操作和前一个分组的转发操作并行,减少报文的传输时间)
- 适用场景:端到端的通路由多段链路组成
3、数据报和虚电路的比较
- 分组交换可以分为面向连接的虚电路和无连接的数据报方式。
4、路由器的工作原理
- 定义:具有多个输入/输出端口的专用计算机,其任务是连接异构网络并完成路由选择和分组转发
- 工作原理:
- 路由器根据特定的路由选择协议构造出路由表,同时定期的和相邻路由器交换路由信息而不断地更新和维护路由表。路由表包括:目的IP地址、子网掩码、下一跳IP地址、接口等
- 路由选择协议:
- RIP协议:基于距离向量路由选择协议,使用UDP协议,与相邻路由器交换整个路由表
- OSPF协议:基于链路状态路由算法,使用IP协议,与全部路由器交换相邻结点链路状态
- 路由选择协议:
- 路由器执行分组转发算法:
- 从数据报的首部提取目的主机IP地址,得出目的网络地址
- 若目的网络地址与此路由器直接相连,则把数据报直接交付给目的主机,即直接交付
- 间接交付分为三种:
- 若路由表中有目的地址的特定主机路由,则把数据报传送给路由表中所指明的下一跳路由器
- 若路由表中有到达目的网络的路由,则把数据报传送给路由表中所指明的下一跳路由器
- 若路由表中有一个默认路由,则把数据报传送给路由表中指明的默认路由器
- 否则,报告分组转发出错
- 路由器根据特定的路由选择协议构造出路由表,同时定期的和相邻路由器交换路由信息而不断地更新和维护路由表。路由表包括:目的IP地址、子网掩码、下一跳IP地址、接口等
5、DHCP协议
- 定义:DHCP(Dynamic Host Configuration Protocol,动态主机配置协议):一个应用层协议,允许一台计算机加入新的网络和获取IP地址不用手工参与。基于UDP协议工作
- DHCP服务器分配给DHCP客户的IP地址是临时的,因此DHCP客户只能在一段有限的时间内(租用期)使用这个分配到的IP地址
- 主要功能:
- 给内部网络自动分配IP地址
- 给用户或内部网络管理员作为对所有计算机作中央管理的手段
- 出于方便,让不会配置网络参数的普通用户通过网络系统自动配置,自动分配IP地址及设置DNS等
- 伪装的DHCP服务器:
- 用户申请IP地址时,发广播,内网中所有用户都能听到。如果存在多个DHCP服务器,则分别予以回复,客户机选择最先收到的,如果黑客在内网里也开启了DHCP服务,用户收到的回复包则很可能就是黑客发出的。
6、ARP协议工作流程
- ARP协议(Address Resolution Protocol,地址解析协议):完成IP地址到MAC地址的映射。
- 工作流程:
- 每台主机会在自己的ARP缓冲区中建立一个ARP列表,用于存储IP地址和MAC地址的对应关系
- 当源主机需要将一个数据包发送到目标主机时,会首先检查自己的ARP列表中是否存在该IP地址对应的MAC地址
- 如果存在,则直接将数据包发送到该MAC地址
- 如果不存在,则向本地网段发起一个ARP请求的广播包,用于查询目标主机对应的MAC地址,此ARP请求数据包里包括源主机的IP地址、MAC地址以及目标主机的IP地址等
- 网络中的所有主机收到这个ARP请求之后,会检查数据包中的目的IP是否与自己的IP地址一致
- 如果不同,则忽略此数据包
- 如果相同,该主机会将发送端的MAC地址与IP地址添加到自己的ARP列表中,如果ARP里列表中已经存在该IP地址的相关信息,则将其覆盖掉,然后给源主机单播一个ARP响应包,告诉对方自己是它需要查找的MAC地址
- 源主机收到这个ARP响应包后,将得到的目的主机IP地址和MAC地址添加到自己的ARP列表中,并利用此信息开始数据的传输,如果源主机一直没有收到ARP响应包,则表示ARP查询失败
- ARP用于解决同一个局域网上的主机或路由器的IP 地址和MAC地址的映射问题。如果所要找的主机和源主机不在同一个局域网上,那么就要通过ARP 找到一个位于本局域网上的某个路由器的硬件地址,然后把分组发送给这个路由器,让这个路由器把分组转发给下一个网络。剩下的工作就由下一个网络来做
7、HTTP协议的请求类型
- GET:
- 从服务器获取信息,GET传送的数据量小,不能大于2KB
- 具有幂等性,即对于同一URL的多个请求应该返回同样的结果
- GET请求的数据会放在HTTP协议头中,附在URL之后,问号分割URL和传输数据,用“与符号&”连接不同参数,如果是中文,转换为加号,如果是中文/非数字字母,直接把字符串用BASE64加密,得到%XX的形式(XX为以十六进制表示的ASCII)
- 通过GET提交数据,用户名和密码会明文出现在URL上
- GET能缓存
- GET编码类型:application/x-www-form-url
- POST:
- 向服务器传送信息,会修改服务器中的资源,POST传送的数据量较大,一般默认为不受限制
- POST请求的数据放在HTTP协议体中
- POST不能缓存
- POST编码类型:encoded application/x-www-form-urlencoded 或 multipart/form-data。为二进制数据使用多重编码。
- PUT:
- 在给定的URL下存储一个文档
- DELETE:
- 删除给定的URL所标志的资源
8、路由器和交换机的区别
- 交换机工作在数据链路层,交换机根据MAC地址转发数据帧;路由器工作在网络层,根据IP地址转发IP数据报
- 交换机是一根网线上网,但是大家上网是分别拨号,各自使用自己的宽带,大家上网没有影响;路由器比交换机多了一个虚拟拨号功能,通过同一台路由器上网的电脑是共用一个宽带账号,大家上网会相互影响。
- 交换机可以把多个主机连接起来,这些主机对外各自的IP;路由器可以把一个IP分配给很多个主机使用,这些主机对外只表现出一个IP
- 交换机主要用于组建局域网;路由器主要负责让主机连接外网
- 交换机只能隔离冲突域,不能隔离广播域;路由器可以隔离冲突域和广播域
9、端口号作用,以及常用的端口号
- 端口分为TCP端口和UDP端口,端口号用于区分服务类别,端口号标识了应用层中不同的进程,为端到端的连接提供了可能。
- 按端口号分类:
- 公认端口(Well-Known Ports):从0到1023,紧密绑定(binding)于一些服务
- 注册端口(Registered Ports):从1024到49151,松散地绑定于一些服务
- 动态和/或私有端口(Dynamic and/or Private Ports):从49152到65535。理论上,不应为服务分配这些端口
- 常用端口号:
- 21 FTP文件控制连接服务
- 23 TELNET终端仿真服务
- 25 SMTP(Simple Mail Transfer Protocol,简单邮件传输协议),提供简单邮件服务传输服务,向邮件服务器主动发送电子邮件
- UDP 53 DNS域名解析服务
- 80 HTTP超文本传输服务
- 110 POP3(Post Office Protocol,邮局协议),“邮局协议版本3”使用的端口,向邮件服务器要求接收电子邮件
- UDP 161 SNMP简单网络管理协议使用的端口
- 443 HTTPS加密的超文本传输服务
- 520 RIP路由信息协议的端口
10、TCP和UDP的区别以及分别的使用场景
- 二者区别:
- 连接方式不同。TCP是面向连接的,基于字节流,UDP是无连接的,面向报文。
- 分组首部开销不同。TCP首部开销20字节,UDP首部开销8字节
- 可靠性不同。TCP提供可靠交付,在连接时会进行三次握手,在传输数据时,有确认、重传、拥塞控制等机制,UDP不保证提供可靠交付,没有拥塞控制,不进行确认,只能提供“尽最大努力交付”,可能会出现分组丢失、重复、乱序,应用程序需要负责传输可靠性方面的所有工作
- 对系统资源的要求不同。TCP较多,UDP较少
- 通信方式不同。每个TCP连接是点到点的,UDP支持一对一,多对一,一对多,多对多的交互通信
- 适用场景:
- TCP:传输大量数据或需要接收数据许可的应用程序,如文件传输、远程登陆、接收邮件等
- UDP:即时传输少量数据的应用程序,如IP电话、视频会议、QQ聊天等
参考文献:
[1]王道论坛. 2020计算机网络考研复习指导. [M]北京:电子工业出版社,2019.1;
[2]猿媛之家. JAVA程序员面试笔试真题与解析. [M]北京:机械工业出版社,2017.01;