面试八股-计算机网络

1.概述

  • 互联网 网络的网络
  • ISP 互联网服务提供商,拥有IP地址、通信线路和路由器,个人缴纳费用就可接入互联网。
    • 第一层ISP
    • 区域ISP
    • 接入ISP
    • 互联网交换点IXP允许两个ISP直连

1.1.主机间通信方式

  • C/S:客户端请求服务,服务器提供服务
  • P2P:不区分客户和服务器

1.2.电路交换和分组交换

  • 电路交换 电话通信系统,先建立物理链路再通信,利用率可能不到10%。
  • 分组交换 邮局通信系统,有首部尾部,包含原地址目的地址等控制信息。分组交换进行存储转发。

1.3.时延

总时延=排队时延+处理时延+传输时延+传播时延

  • 排队时延 路由器输入队列和输出队列中排队等待的时间
  • 处理时延 收到分组后处理所需时间,如分析首部、差错检验等
  • 传输时延 传输数据帧所需时间t=数据帧长度/传输速率
  • 传播时延 电磁波在信道中传播所需时间 delay=信道长度/电磁波在信道上传播速度

1.4.计算机网络体系结构

1.4.1.五层协议

  • 应用层 应用程序提供数据传输 HTTP、DNS等。报文
  • 传输层 为进程提供通用数据传输服务 TCP、UDP。数据报
  • 网络层 为主机提供数据传输服务。分组
  • 数据链路层 同一链路上的主机间数据传输服务。帧
  • 物理层 传输媒体上传输数据比特流,屏蔽传输媒体和通信手段的差异。比特流

1.4.2.OSI

  • 应用层
  • 表示层 数据压缩、加密以及数据描述,使应用程序不必关心割台主机中数据内部格式不同问题
  • 会话层 建立和管理会话
  • 会话层
  • 传输层
  • 网络层
  • 数据链路层
  • 物理层

1.4.3.TCP/IP

  • 应用层, 可能直接调用IP层或网络接口层
  • 传输层
  • 网络层
  • 网络接口层

2.物理层

2.1.通信方式

  • 单工通信
  • 半双工通信
  • 全双工通信

2.2.带通调制

将离散的数字信号转换为连续的模拟信号

3.链路层

3.1.功能

  • 封装成帧 将网络层的分组增加首部和尾部
  • 透明传输 对数据中出现的首部尾部标识进行转义
  • 差错检测 使用CRC来检查比特差错

3.2.信道分类

  • 广播通信 一个节点发送的数据被全部节点接收
    • 信道复用技术
      • 频分复用 相同时间内占用不同频率带宽资源
      • 时分复用 不同时间占用相同频率
      • 统计时分复用 不固定每个用户在时分复用帧的位置,有数据就集中起来发送
      • 波分复用 由于光的频率高,使用波长而不是频率表示使用的光载波
      • 码分复用 每个用户分mbit的码片,所有码片正交,发送数据量为原来m倍
    • CSMA/CD协议 载波监听多点接入/碰撞检测
      • 多点接入 总线型网络,许多主机连接到总线上
      • 载波监听 不停监听信道,发送前信道使用就等待
      • 碰撞检测 监听到有其他主机发送数据,在2τ2\tau
### 计算机网络面试题及相关知识点总结 #### OSI模型与TCP/IP协议栈 OSI七层模型从下到上分别是:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层[^1]。而TCP/IP四层模型则分为:网络接口层、网络层、传输层以及应用层。两者之间的映射关系表明,TCP/IP中的每一层通常对应于OSI模型的一个或多层功能。 #### TCP粘包问题及其解决方案 TCP粘包现象是指在网络通信过程中,发送端发出的多个消息可能在接收端被合并成一条消息处理;或者单条消息可能会被拆分成多部分分别接收[^2]。解决该问题的方法主要包括但不限于通过设置固定的报文长度、使用特殊的分隔符来区分不同消息边界,或是利用自定义的消息头部携带消息长度信息等方式实现消息边界的清晰划分。 #### TCP确认机制 TCP协议采用一种基于滑动窗口的概念来进行流量控制并确保可靠的数据传输。其中涉及到的关键概念之一即为确认号(ACK),它是一个32位字段用于指示期望接收到下一字节的位置序号,并且只有当ACK标志位置位时此字段才具有实际意义[^3]。每当目标主机成功接受一段连续的数据流之后便会返回相应的确认应答给源主机,从而让后者能够跟踪哪些数据已被安全送达目的地。 ```python def simulate_tcp_acknowledgment(expected_seq_num, received_data): """ Simulates the behavior of a receiver acknowledging receipt of data segments. Args: expected_seq_num (int): The next sequence number that is expected to be received. received_data (list[tuple]): A list where each tuple contains two elements; first element being an integer representing starting seq num, second one represents length of segment. Returns: int: Updated value for what should now become new 'expected_seq_num'. """ updated_seq = None for start_seq, seg_len in sorted(received_data): end_seq = start_seq + seg_len if not updated_seq or start_seq == updated_seq: # If there's no gap between current and previous packet(s), update accordingly. updated_seq = max(end_seq, updated_seq) if updated_seq else end_seq return updated_seq if updated_seq >= expected_seq_num else -1 # Example usage demonstrating how function works with some sample inputs. example_input_1 = [(0, 5)] # Single contiguous block from byte 0 -> 4 inclusive. print(simulate_tcp_acknowledgment(0, example_input_1)) example_input_2 = [(7, 8), (0, 6)] # Two blocks covering bytes range [0..5], then another at [7..14]. print(simulate_tcp_acknowledgment(0, example_input_2)) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值