计算机网络八股文(2022最新整理)

本文详细梳理了计算机网络中的核心概念,包括网络分层结构、TCP/IP的三次握手和四次挥手、TCP特性和报文首部字段、TCP与UDP的区别、HTTP协议特点以及HTTP状态码等。此外,还探讨了TCP的滑动窗口机制、拥塞控制策略、HTTP的长连接与短连接、HTTPS的安全性、数字证书的作用,以及DNS解析和网页加载过程。内容深入浅出,适合网络协议学习和面试准备。

网络分层结构

计算机网络体系大致分为三种,OSI七层模型、TCP/IP四层模型和五层模型。一般面试的时候考察比较多的是五层模型。

五层模型:应用层、传输层、网络层、数据链路层、物理层。

  • 应用层:为应用程序提供交互服务。在互联网中的应用层协议很多,如域名系统DNS、HTTP协议、SMTP协议等。
  • 传输层:负责向两台主机进程之间的通信提供数据传输服务。传输层的协议主要有传输控制协议TCP和用户数据协议UDP。
  • 网络层:选择合适的路由和交换结点,确保数据及时传送。主要包括IP协议。
  • 数据链路层:在两个相邻节点之间传送数据时,数据链路层将网络层交下来的 IP 数据报组装成帧,在两个相邻节点间的链路上传送帧。
  • 物理层:实现相邻节点间比特流的透明传输,尽可能屏蔽传输介质和物理设备的差异。

ISO七层模型是国际标准化组织(International Organization for Standardization)制定的一个用于计算机或通信系统间互联的标准体系。

  • 应用层:网络服务与最终用户的一个接口,常见的协议有:HTTP FTP SMTP SNMP DNS.
  • 表示层:数据的表示、安全、压缩。,确保一个系统的应用层所发送的信息可以被另一个系统的应用层读取。
  • 会话层:建立、管理、终止会话,对应主机进程,指本地主机与远程主机正在进行的会话.
  • 传输层:定义传输数据的协议端口号,以及流控和差错校验,协议有TCP UDP.
  • 网络层:进行逻辑地址寻址,实现不同网络之间的路径选择,协议有ICMP IGMP IP等.
  • 数据链路层:在物理层提供比特流服务的基础上,建立相邻结点之间的数据链路。
  • 物理层:建立、维护、断开物理连接。

TCP/IP 四层模型

  • 应用层:对应于OSI参考模型的(应用层、表示层、会话层)。
  • 传输层: 对应OSI的传输层,为应用层实体提供端到端的通信功能,保证了数据包的顺序传送及数据的完整性。
  • 网际层:对应于OSI参考模型的网络层,主要解决主机到主机的通信问题。
  • 网络接口层:与OSI参考模型的数据链路层、物理层对应。

三次握手

假设发送端为客户端,接收端为服务端。开始时客户端和服务端的状态都是CLOSED

  1. 第一次握手:客户端向服务端发起建立连接请求,客户端会随机生成一个起始序列号x,客户端向服务端发送的字段中包含标志位SYN=1,序列号seq=x。第一次握手前客户端的状态为CLOSE,第一次握手后客户端的状态为SYN-SENT。此时服务端的状态为LISTEN
  2. 第二次握手:服务端在收到客户端发来的报文后,会随机生成一个服务端的起始序列号y,然后给客户端回复一段报文,其中包括标志位SYN=1ACK=1,序列号seq=y,确认号ack=x+1。第二次握手前服务端的状态为LISTEN,第二次握手后服务端的状态为SYN-RCVD,此时客户端的状态为SYN-SENT。(其中SYN=1表示要和客户端建立一个连接,ACK=1表示确认序号有效)
  3. 第三次握手:客户端收到服务端发来的报文后,会再向服务端发送报文,其中包含标志位ACK=1,序列号seq=x+1,确认号ack=y+1。第三次握手前客户端的状态为SYN-SENT,第三次握手后客户端和服务端的状态都为ESTABLISHED此时连接建立完成。

两次握手可以吗?

第三次握手主要为了防止已失效的连接请求报文段突然又传输到了服务端,导致产生问题。

  • 比如客户端A发出连接请求,可能因为网络阻塞原因,A没有收到确认报文,于是A再重传一次连接请求。
  • 连接成功,等待数据传输完毕后,就释放了连接。
  • 然后A发出的第一个连接请求等到连接释放以后的某个时间才到达服务端B,此时B误认为A又发出一次新的连接请求,于是就向A发出确认报文段。
  • 如果不采用三次握手,只要B发出确认,就建立新的连接了,此时A不会响应B的确认且不发送数据,则B一直等待A发送数据,浪费资源。

四次挥手

  1. A的应用进程先向其TCP发出连接释放报文段(FIN=1,seq=u),并停止再发送数据,主动关闭TCP连接,进入FIN-WAIT-1(终止等待1)状态,等待B的确认。
  2. B收到连接释放报文段后即发出确认报文段(ACK=1,ack=u+1,seq=v),B进入CLOSE-WAIT(关闭等待)状态,此时的TCP处于半关闭状态,A到B的连接释放。
  3. A收到B的确认后,进入FIN-WAIT-2(终止等待2)状态,等待B发出的连接释放报文段。
  4. B发送完数据,就会发出连接释放报文段(FIN=1,ACK=1,seq=w,ack=u+1),B进入LAST-ACK(最后确认)状态,等待A的确认。
  5. A收到B的连接释放报文段后,对此发出确认报文段(ACK=1,seq=u+1,ack=w+1),A进入TIME-WAIT(时间等待)状态。此时TCP未释放掉,需要经过时间等待计时器设置的时间2MSL(最大报文段生存时间)后,A才进入CLOSED状态。B收到A发出的确认报文段后关闭连接,若没收到A发出的确认报文段,B就会重传连接释放报文段。

第四次挥手为什么要等待2MSL?

  • 保证A发送的最后一个ACK报文段能够到达B。这个ACK报文段有可能丢失,B收不到这个确认报文,就会超时重传连接释放报文段,然后A可以在2MSL时间内收到这个重传的连接释放报文段,接着A重传一次确认,重新启动2MSL计时器,最后A和B都进入到CLOSED状态,若A在TIME-WAIT状态不等待一段时间,而是发送完ACK报文段后立即释放连接,则无法收到B重传的连接释放报文段,所以不会再发送一次确认报文段,B就无法正常进入到CLOSED状态。
  • 防止已失效的连接请求报文段出现在本连接中。A在发送完最后一个ACK报文段后,再经过2MSL,就可以使这个连接所产生的所有报文段都从网络中消失,使下一个新的连接中不会出现旧的连接请求报文段。

为什么是四次挥手?

因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。但是在关闭连接时,当Server端收到Client端发出的连接释放报文时,很可能并不会立即关闭SOCKET,所以Server端先回复一个ACK报文,告诉Client端我收到你的连接释放报文了。只有等到Server端所有的报文都发送完了,这时Server端才能发送连接释放报文,之后两边才会真正的断开连接。故需要四次挥手。

TCP有哪些特点?

  • TCP是面向连接的运输层协议。
  • 点对点,每一条TCP连接只能有两个端点。
  • TCP提供可靠交付的服务。
  • TCP提供全双工通信
  • 面向字节流

说说TCP报文首部有哪些字段,其作用又分别是什么?

<think>好的,我现在需要回答用户关于OSPF协议的基础知识、配置和面试题的问题。首先,我得确保自己正确理解OSPF的原理,包括它的工作方式、特点以及相关术语。OSPF属于链路状态路由协议,使用Dijkstra算法计算最短路径树,这点要明确。接下来要想到它的区域划分,比如骨干区域Area 0和其他区域如何连接,避免出现区域不连续的情况。 然后是OSPF的邻居建立过程,需要详细描述从Down状态到Full状态的转换,涉及到的Hello报文、DR/BDR选举等步骤。这部分容易混淆,得仔细回忆各个状态之间的转换条件和报文交换顺序。 配置方面,用户可能需要知道基本的OSPF配置命令,比如在Cisco设备或华为设备上的配置方法。这里需要区分不同厂商的配置差异,但用户可能更关注通用步骤,比如启用OSPF进程、指定网络和区域等。 面试题部分,常见的八股文问题包括OSPF的特点、邻居与邻接的区别、LSA类型、区域类型等。需要整理这些问题并给出简明扼要的回答,同时引用相关的知识点,比如引用[3]提到的RPC框架封装思想,可能可以类比到OSPF如何封装链路状态信息。 还要注意用户提供的引用内容,比如引用[1]关于Socket的抽象层概念,可能与OSPF协议在应用层和传输层之间的交互无关,但引用[4]提到的进程同步问题,或许可以联系到OSPF中路由器之间的同步机制,比如如何确保链路状态数据库的一致。 需要确保回答结构清晰,分点列出基础概念、工作原理、配置示例和常见面试题,每个部分都要有逻辑性,帮助用户逐步理解。同时,检查是否有遗漏的重要知识点,如OSPF的报文类型、区域认证、虚链路等高级配置可能也需要简要提及。 最后,生成的相关问题需要覆盖OSPF的不同方面,比如优缺点、区域设计考虑因素、与RIP的比较等,确保用户能够通过这些问题进一步深入学习。同时,按照用户要求,使用正确的中文和LaTeX格式,避免语法错误,并合理添加引用标注。</think>### OSPF协议基础与面试题解析 #### 一、OSPF协议基础原理 1. **基本概念** OSPF(Open Shortest Path First)是**链路状态路由协议**,基于Dijkstra算法计算最短路径树[^1],使用IP协议号89,通过泛洪链路状态通告(LSA)同步网络拓扑。 2. **核心特点** - **分区域设计**:骨干区域(Area 0)与非骨干区域(Area 1,2...)必须物理或逻辑相连[^4] - **支持VLSM/CIDR** - 以Cost作为度量值(计算公式:$Cost = \frac{10^8}{Bandwidth}$) - 触发更新与周期性更新(默认30分钟) 3. **邻居建立过程** OSPF路由器通过以下状态机建立邻接关系: ``` Down → Init → 2-Way → ExStart → Exchange → Loading → Full ``` - **DR/BDR选举**:基于优先级和Router ID(优先级为0则不参与选举) - **Hello报文**:维护邻居关系,默认间隔10/40秒(广播/NBMA网络) #### 二、关键配置示例(以Cisco为例) ```python Router(config)# router ospf 1 # 启动OSPF进程1 Router(config-router)# network 192.168.1.0 0.0.0.255 area 0 # 宣告直连网络 Router(config-router)# auto-cost reference-bandwidth 1000 # 调整Cost计算基准 ``` #### 三、高频面试题与答案 1. **OSPF的LSA类型及作用** - **Type 1 (Router LSA)**:描述路由器直连链路状态,仅在区域内传播 - **Type 2 (Network LSA)**:由DR生成,描述广播网络成员 - **Type 3 (Summary LSA)**:ABR生成,实现区域间路由汇总[^3] - **Type 5 (External LSA)**:ASBR生成,传播外部路由 2. **OSPF为何划分区域?** - 减少LSDB规模,限制LSA泛洪范围 - 提高网络收敛速度 - 实现路由汇总优化(需手动配置) 3. **OSPF与RIP的主要区别** | 对比项 | OSPF | RIP | |--------------|-----------------------|---------------| | 算法类型 | 链路状态(Dijkstra) | 距离矢量 | | 收敛速度 | 快(触发更新) | 慢(周期更新)| | 最大跳数 | 无限制 | 15跳 | #### 四、进阶知识点 - **虚链路(Virtual Link)**:用于连接不连续Area 0的特殊配置 - **区域认证**:支持明文/MD5认证增强安全性 - **Stub/NSSA区域**:优化LSA传播(Type 5 LSA禁止进入Stub区域)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值