计算机网络面试问题整理
1 网络分层
1.1 OSI七层模型
- 应用层:产生网络流量的应用程序
- 表示层:数据的表现形式、utf8/ASCII、加密/不加密
- 会话层:与那些服务器建立了会话
- 传输层:控制两台主机的数据传输,有可靠传输TCP、不可靠传输UDP
- 网络层:路径规划,如何找到目标服务器
- 数据链路层:定义帧的开始与结束,负责点到点的传输
- 物理层:定义电器与接口标准
1.2 TCP/IP四层协议
- 应用层:应用进程之间的交互来完成特定网络应用。主要协议有:http、https、DNS、FTP等
- 传输层:为两台主机间进程的通信我i共数据传输服务
- 网络层:将传输层产生的流量进行分组打包发送。选择合适的路由,根据IP地址找到目的地址,主要协议有:IP、ARP、ICMP、IGMP。网络城中健身被是路由器。
- 数据链路层:将网络层交付下来的IP数据包封装成帧,在两个节点上进行传输,主要协议有PPP、CSMA/CD协议。中间身背是交换机。
- 物理层*:屏蔽掉传输介质的差异,为上层提供统一的接口。
2 数据链路层相关协议
2.1 点对点协议PPP
负责两点之间的数据传输。PPP 协议的特点是简单、只检测差错而不纠正差错、不使用序号也不进行流量控制、可同时支持多种网络层协议。
2.2 CSMA/CD协议
主要应用于局部网络的通信。协议的要点是:发送前先监听、边发送边监听,一旦发现总线上出现了碰撞就立即停止发送。然后按照退避算法等待一段随机时间后再次发送,因此每一个站在自己发送数据之后的一小段时间内存在遭遇碰撞的可能性。以太网上各站点都平等地争用以太网信道。
2.3 主要问题
-
封装成帧
-
透明传输
-
差错检验
3 网络层协议
3.1 地址解析协议ARP
根据目标IP地址找到目标MAC地址,以用于数据链路层的数据传输。
3.2 IP协议
网际协议 IP 是 TCP/IP 体系中两个最主要的协议之一,一般指的是 IPv4。与 IP 协议配套使用的协议还有 ARP、ICMP 和 IGMP,IP 使用 ARP,ICMP 和 IGMP 要使用 IP。由于网际协议 IP 是用来使互连起来的许多计算机网络能够进行通信的,因此 TCP/IP 体系中的网络层也称网际层或 IP 层。
要解决 IP 地址耗尽的问题,根本方法是采用具有更大地址空间的新版本 IP 协议即 IPv6,向 IPv6 过渡可以使用双协议栈或使用隧道技术。
3.3 路由选择协议
选择到目标主机的合适的路径。主要协议有RIP、OSPF(内部网关协议)与BGP-4(外部网关协议)。
BGP-4 是不同自治系统的路由器之间交换路由信息的协议,是一种路径向量路由选择协议。其目标是寻找一条能够到达目的网络且比较好的路由而不是最佳路由。
3.4 网际报文控制协议
ICMP 报文作为 IP 数据报的数据,加上首部后组成 IP 数据报发送出去,使用 ICMP 并非为了实现可靠传输,ICMP 允许主机或路由器报告差错情况和提供有关异常情况的报告。ICMP 报文的种类有两种,即 ICMP 差错报告报文和 ICMP 询问报文。
ICMP 的一个重要应用就是分组间探测 PING,用来测试两台主机之间的连通性,PING 使用了 ICMP 回送请求与回送回答报文。
3.5 网际组管理协议
IGMP 协议是让连接在本地局域网上的多播路由器知道本局域网上是否有主机上的某个进程参加或推出了某个多播组。主要作用时进行分组广播。
4 传输层协议
4.1 用户数据报协议UDP
UDP 只在 IP 的数据报服务上增加了很少一点功能,就是复用和分用以及差错检测,其特点主要是:
- UDP 是无连接的,发送数据之前不需要建立连接;
- UDP 使用尽最大努力交付,不保证数据传输的可靠性;
- UDP 是面向报文的,发送方 UDP 对应用程序交下来的报文在添加首部后就向下交付 IP 层;
- UDP 没有拥塞控制;
- UDP 支持一对一、一对多、多对一和多对多的交互通信;
- UDP 的首部开销小,只有 8 个字节,TCP至少需要 20 字节。
4.2. TCP协议
4.2.1 特点
- 面向连接:在通信前需要先三次握手建立连接,在通信结束后四次挥手释放连接
- 点对点连接:megeTCP只能由两个端点
- 可靠传输,保证传输的数据无差错、丢失与重复
- 全双工通信,在发送方和接收方都属于和有缓存
- 面向字节流的,TCP传输时会用一个序号来表明自己传输/接收的是哪些字节
4.2.2 如何保障可靠性
IP尽最大努力交付,但是也不能保证可靠传输。TCP通过超时重传来解决数据出错的问题,使用流量控制来解决两端性能不一致的问题,使用拥塞控制避免网络拥塞。
1)停止等待协议
- 每发一个分组就停下来等待接收方的确认
- 接收到确认后就继续发下一个分组
- 在规定时间内没有收到确认便会进行超时重传
三点支持保证
- 计时器略大于往返时间
- 为没有收到确认的数据分组进行缓存
- 为分组编号
ARQ协议
ARQ automatic repeat request自动重传请求,接收端不需要向发送端发出重传请求,发送端等待超时后会继续超时重传。
ARQ协议信道利用率低
连续ARQ协议
连续ARQ使用一个滑动窗口,发送时可以顺序的发送窗口内的数据。而接受方只需返回最大接收数据的序号即可。
2)流量控制
解决发送端与接收端处理速度不一致问问题。发送端会根据接收端的接受能力动态地调整发送速度,确保接收端来得及接收。
3)拥塞控制
为了避免网络环境导致的数据包超时与丢失的问题,TCP根据网络环境动态的调整滑动窗的大小。主要有四种方法:慢开始、拥塞避免、快重传、快恢复。
慢开始
为了避免开始时注入过多的数据引起网络拥塞,设置了慢开始的初始值与慢开始阈值,初始将欢动窗口的值设置为1,然后逐渐增大拥塞窗口的大小,每经过一轮发送欢动窗口大小翻倍,直至阈值。大于该值时使用拥塞避免
拥塞避免
每经过一个往返时间将滑动窗口的大小增加1
快重传
有时候可能是由于某个报文段丢失,但是并未出现拥塞,错误的触发了慢开始,降低了传输效率。快重传要求接收端不必等待自己发送数据时再捎带确认,而是立即回复确认。当发送端连续收到三个重复的确认后就会得知报文段丢失,就会立即重传,快充穿会使整个网络的吞吐量提升约20%。
快恢复
当发送端知道了只是个别报文段丢失,不会进行慢开始,并恢复拥塞窗口的值
4.2.3 三次握手
过程
①客户端发送SYN请求,此时序号为x,客户端进入SYN-SENT状态
②服务器接收到SYN请求,然后回复该请求ACK并建立连接SYN,此时序号为y,确认好为x+1
③客户端收到ACK,进图Established状态,并且回复服务器的请求ACK,此时序号为x+1,确认号为y+1
④服务器收到同步确认号ACK,进入Established状态
为什么三次?
为了防止服务端开启一些无用的链接增加服务器开销,以及防止已失效的请求报文传送到了服务端,因而产生错误。
两次连接的数据包丢失
- 服务端收到SYN请求,此时建立连接并发送数据,此时如果数据包丢失,
- 客户端没有收到而导致关闭创建链接的请求,再次发出创建链接的请求
- 此时服务端没有收到接收确认包,便会等待/重传,因为客户端已经断开链接,此时的工作都是无效的
失效SYN包
- 客户端第一次发送的SYN请求包未能及时到达服务器端
- 第二次SYN成功建立的连接
- 在建立连接后服务端又收到第一次传送的SYN包,服务端误认为是有效的请求,进而产生错误
4.2.4 四次挥手过程
以客户端主动发起断开连接为例
- 客户端发送FIN包,序号为u,进入FIN-WAIT-1状态
- 服务器接收到FIN请求返回ACK表示接收到数据包,序号为sqe=v,确认好为ack=u+1,进图CLOSE-WAIT状态,并做释放连接的准备
- 客户端接收到回馈,机内FIN-WAIT-2状态
- 服务端做好了释放连接的准备,发送第二各确认包,序号seq=w,确认号ack=u+1,然后进入LAST-ACK状态等待最后确认
- 客户端收到第二次确认,发送最后确认ACK包,此时seq=u+1, ack=w+1,进入TIME-WAIT状态,等待时间为2MSL
- 服务器收到确认,断开连接
- 客户端等待结束,断开连接
1.2.1 为什么断开连接需要四次挥手?
在创建连接时,服务端不需要任何准备,SYN请求和ACK确认可以放在同一个数据包中发送。但是在断开连接时,服务器可以先发送ACK确认接收到数据包,但是还需要时间进行相应的断开连接的工作,完成再发第二个FIN包。
1.2.2 为什么要等待2MSL
MSL的英文全称为Maximum Segment Lifetime,表示一段TCP保温在文件传输过程中的最大生命周期。2MSL是一来一回的时间。等待2MSL的原因是防止服务端未能正确接收到最终的确认包,进而无法正确进入Close状态。
5 应用层协议
5.1 域名解析系统DNS
端口号:53
负责解析域名,将域名解析成IP地址。主要特点如下
- 稳定:采用分布式系统,单个DNS服务器出现问题不会影响整个DNS系统的运行
- 快速:大部分的域名解析都在本地进行,少量的解析会放到互联网上
过程如下:首先向本地DNS服务器发送解析请求,若本地服务器不知道则会向其他根服务器进行查询
5.2 DHCP
端口号68
DHCP动态主机ip配置
- DHCP服务器必须是静态地址
5.3 FTP
文件传输协议:21端口
5.4 TELNET
远程终端协议:23端口
5.5 RDP
远程桌面协议:3389
5.6 超文本传输协议HTTP
端口号:80
HTTP是超文本传输协议,规范了浏览器如何向万维网服务器请求万维网文档,服务器如何向浏览器发送万维网文档。有如下特点:
- 无状态:对事务没有记忆性,同一个客户的两次访问服务响应的结果是一样的。可以使用Cookies与Session解决无状态问题。
- 明文传输:不安全