0、计算机网络基础

厨子大约 8 分钟计算机网络网络协议面试题传输层原创程序员

1. 🌟请描述一下 OSI 七层协议

物理层(Physical Layer)

物理层是 OSI 模型的最底层,主要负责处理物理介质上的信号传输。它定义了物理连接的机械、电气、功能和规程特性。

数据链路层(Data Link Layer)

数据链路层负责将物理层接收到的原始信号转换为数据帧,并进行差错检测和纠正。它在物理层提供的物理连接基础上,建立相邻节点之间的数据链路

网络层(Network Layer)

网络层负责将数据从源节点传输到目标节点,主要功能是进行路由选择和分组转发。它根据网络的拓扑结构和通信协议,确定数据传输的最佳路径,使得不同网络之间能够相互通信。

网络层协议如 IP(Internet Protocol)协议,为每个连接到网络的设备分配一个唯一的 IP 地址。当一个设备要向另一个设备发送数据时,网络层会根据目标设备的 IP 地址和当前网络的路由信息,选择合适的路径来转发数据包。

在互联网中,数据包可能需要经过多个路由器才能从源主机到达目标主机,网络层的路由器会根据路由表进行数据包的转发决策。

传输层(Transport Layer)

传输层提供端到端的通信服务,确保数据能够正确、有序地从源端应用程序传输到目的端应用程序。

它在不同主机的应用程序之间建立逻辑连接,对上层屏蔽了下层网络的细节,使得应用程序只需要关注数据的传输,而不需要关心网络的具体实现。

传输层有两个主要协议,TCP 和 UDP 是一种面向连接的、可靠的传输协议,它通过三次握手建立连接,使用序列号和确认号来保证数据的可靠传输和顺序性,还提供流量控制和拥塞控制机制。

是一种无连接的、不可靠的传输协议,它不保证数据的顺序和完整性,但具有传输速度快的特点,适用于对实时性要求较高、对数据丢失不太敏感的应用场景,如实时视频流、音频通话等

会话层(Session Layer)

会话层主要负责建立、维护和管理会话。会话是指两个或多个通信实体之间为完成一次完整的通信过程而建立的逻辑连接,包括会话的建立、会话的同步和会话的拆除等操作

这块考差不多

表示层(Presentation Layer)

表示层主要处理数据的表示、转换和加密等功能。它负责将应用层的数据转换为适合在网络上传输的格式,或者将从网络接收到的数据转换为应用层能够理解的格式,同时还可以对数据进行加密、解密、压缩、解压缩等操作。

考察不多

应用层(Application Layer)

应用层是 OSI 模型的最高层,它直接面向用户的应用程序,为用户提供各种网络服务,如文件传输、电子邮件、远程登录、网页浏览等。应用层协议规定了应用程序如何使用网络进行通信,它是用户和网络之间的接口。

常见的应用层协议有 HTTP、FTP、SMTP 等。例如,当用户在浏览器中输入一个网址时,浏览器通过 HTTP 协议与网站服务器进行通信,请求网页内容并将其显示给用户。

在电子邮件应用中,SMTP 协议用于发送邮件,POP3(Post Office Protocol 3)或 IMAP(Internet Message Access Protocol)协议用于接收邮件。

每一层的作用有可能做为单独考点

OSI层
核心功能
关键协议/技术
数据单位
典型设备
考察重点
物理层
- 比特流传输
- 定义机械/电气特性(如接口形状、电压)
RS-232、V.35、光纤、双绞线
比特(bit)
集线器、中继器

传输介质特性、信号编码方式
数据链路层
- 帧定界与透明传输
- 差错控制(CRC)
- 流量控制(滑动窗口)
Ethernet、PPP、HDLC、MAC地址
帧(Frame)
交换机、网桥
MAC地址、CSMA/CD、差错控制机制
网络层
- 路由选择
- 拥塞控制
- 异构网络互联
IP、ICMP、ARP、OSPF、BGP
包(Packet)
路由器、三层交换机
IP分组格式、路由算法、NAT原理
传输层
- 端到端可靠传输
- 复用/分用
- 流量控制(TCP窗口)
TCP、UDP、SCTP
段(Segment)
网关、防火墙
TCP三次握手、UDP特性、端口概念
会话层
- 建立/维护/终止会话
- 会话同步(检查点恢复)
NetBIOS、SSH、TLS
会话数据
会话网关
会话令牌管理、活动管理
表示层
- 数据格式转换(编码/解码)
- 加密解密
- 压缩解压
JPEG、MPEG、ASCII、SSL/TLS加密
格式化数据
加密设备
数据压缩算法、加密技术
应用层
- 用户接口
- 网络服务实现(文件传输/邮件/网页)
HTTP、FTP、SMTP、DNS、DHCP
报文(Message)
应用服务器、代理服务器
HTTP状态码、DNS查询过程、邮件协议

关键对比维度补充

维度
下层(1-3层)特性
上层(4-7层)特性
关注点
数据传输的物理/逻辑路径
应用程序间的数据交互
地址类型
MAC地址/IP地址
端口号/URL/邮箱地址
可靠性保证
无(需上层实现)
TCP实现可靠传输
典型问题
信号衰减、冲突检测
会话劫持、数据格式兼容性
协议示例
Ethernet/IP/ARP
HTTP/SMTP/SSH

2. 简述 TCP/IP 五层协议

这个问题参考上面的回答即可

请说一下 REST API

REST API 是一种软件架构风格,用于构建分布式系统中的网络应用程序。REST API 是基于 REST 架构风格设计的应用程序接口。

它通过使用 HTTP 协议的方法(如 GET、POST、PUT、DELETE)来对资源进行操作,这些资源可以是任何类型的数据,如文本、图像、数据库记录等。

以下是一段 flask 示例

from flask import Flask, request, jsonify

app = Flask(__name__)

books = {}

# 创建书籍(对应POST方法)
@app.route('/books', methods=['POST'])
def create_book():
    data = request.get_json()
    book_id = data.get('id')
    title = data.get('title')
    author = data.get('author')
    if book_id and title and author:
        books[book_id] = {
            'title': title,
            'author': author
        }
        return jsonify({"message": "Book created successfully", "book": books[book_id]}), 201
    return jsonify({"message": "Invalid data"}), 400

# 获取所有书籍(对应GET方法)
@app.route('/books', methods=['GET'])
def get_books():
    return jsonify({"books": list(books.values())})

# 获取单本特定书籍(对应GET方法)
@app.route('/books/<int:book_id>', methods=['GET'])
def get_book(book_id):
    if book_id in books:
        return jsonify({"book": books[book_id]})
    return jsonify({"message": "Book not found"}), 404

# 更新书籍(对应PUT方法)
@app.route('/books/<int:book_id>', methods=['PUT'])
def update_book(book_id):
    if book_id in books:
        data = request.get_json()
        title = data.get('title')
        author = data.get('author')
        if title:
            books[book_id]['title'] = title
        if author:
            books[book_id]['author'] = author
        return jsonify({"message": "Book updated successfully", "book": books[book_id]}), 200
    return jsonify({"message": "Book not found"}), 404

# 删除书籍(对应DELETE方法)
@app.route('/books/<int:book_id>', methods=['DELETE'])
def delete_book(book_id):
    if book_id in books:
        del books[book_id]
        return jsonify({"message": "Book deleted successfully"}), 200
    return jsonify({"message": "Book not found"}), 404

if __name__ == '__main__':
    app.run(debug=True)