当前位置: 首页 > news >正文

计算机网络全栈知识:从物理层到应用层

让我们从最底层开始,一步步向上构建起整个计算机网络的知识体系。这是一个从物理信号到全球互联的宏大旅程。

第零层:物理世界 - 比特的传输

在最底层,网络关心的是:如何让一个0或1的比特,从一台设备传递到另一台设备?

  1. 传输介质

    • 铜缆(如双绞线):利用电压的高低变化来表示0和1。例如,+5V表示1,-5V表示0。问题是信号会衰减,易受电磁干扰。

    • 光纤:利用光脉冲在玻璃纤维中的全反射来传输。有光表示1,无光表示0。优势是速度快、距离远、抗干扰。

    • 无线电波(Wi-Fi/蜂窝网络):利用特定频率的电磁波承载信息。通过调制技术(如调频、调幅、调相)将数字信号“加载”到载波上。

  2. 核心挑战与解决

    • 信号衰减:信号在传输中会变弱。解决方案是使用中继器集线器来放大和再生信号。

    • 同步问题:接收方如何知道一个比特何时开始、何时结束?这就需要时钟同步。双方需要遵循共同的“节奏”来采样信号。

    • 干扰与错误:物理世界不完美,电磁干扰会导致比特翻转(0变1,1变0)。在物理层之上,必须有机制来检测和纠正错误。

此时,我们有了传输比特流的能力,但这只是一堆毫无意义的0和1。


第一层:数据链路层 - 本地邻居间的对话

这一层解决的是:“如何在同一个‘本地’网络里,准确地找到目标设备并传递数据?” 这个“本地”网络可能是一个以太网,一个Wi-Fi,或者两个路由器之间的直接连接。

  1. 成帧

    • 将物理层传来的原始比特流封装成帧。一个帧就像一封信,有收信人地址、发信人地址、内容、以及校验码。

    • 接收方需要能从比特流中识别出帧的开始和结束。

  2. MAC地址与MAC子层

    • 每个网络设备(网卡)都有一个全球唯一的物理地址——MAC地址(如 AA:BB:CC:DD:EE:FF)。

    • 以太网的工作方式:设备A想给同局域网的设备B发送数据。

      • A会广播一个 ARP请求:“谁的IP是B的IP?请告诉A。”

      • B收到后,会回复A:“B的MAC地址是XX:XX:XX:XX:XX:XX。”

      • A然后将数据封装成帧,目标MAC地址填B的MAC地址,发送出去。

      • 局域网内所有设备都会收到这个帧,但只有MAC地址匹配的设备B才会接收并处理它。

  3. 错误检测

    • 使用CRC循环冗余校验。发送方根据帧内容计算一个校验值,放在帧尾。接收方重新计算,如果校验值不匹配,就丢弃该帧。

    • 注意:数据链路层通常只检错,而不纠错。纠错由更高层(如传输层)通过重传机制完成。

此时,我们可以在一个局域网内,准确地找到目标设备并传递数据帧了。但世界不止一个局域网。


第二层:网络层 - 全球范围的寻址与路由

这一层解决的是:“如何跨越多个不同的局域网,将数据从世界任意一端的设备,发送到另一端的设备?

  1. IP协议

    • 引入了IP地址(如 192.168.1.1)。这是一个逻辑地址,用于在全局网络中标识一台设备。

    • IP包:网络层将自己的数据封装成IP包。IP包头部包含了至关重要的源IP地址目标IP地址

  2. 路由器

    • 这是网络层的核心设备。路由器连接不同的网络(局域网)。

    • 它内部维护着一张路由表,相当于一张“地图”,告诉它去往某个IP地址,下一步应该往哪个方向走。

  3. 路由过程

    • 当你的电脑(192.168.1.100)想访问谷歌(172.217.24.206)时:

      • 你的电脑判断谷歌不在本地网络,于是将IP包发给它的默认网关(通常是路由器,192.168.1.1)。

      • 路由器查看目标IP,查询自己的路由表,决定将这个包发给它的上游运营商路由器。

      • 这个包经过互联网上无数路由器的转发,每一步都更接近目标,最终到达谷歌的服务器。

    • 这个过程叫做** hop-by-hop 路由**。每个路由器只负责到下一跳的传递。

  4. 分片与重组

    • 不同的数据链路层有最大传输限制。如果一个IP包太大,路由器会将其分片。最终在目的地重新重组

此时,我们已经可以实现全球任意两台设备之间的通信了。但新的问题出现了:一台设备上可能同时运行着浏览器、游戏、邮件等多个程序,数据应该交给哪个程序?


第三层:传输层 - 程序到程序的交付

这一层解决的是:“数据已经到达了正确的设备,但应该交给设备上的哪个应用程序?

  1. 端口

    • 引入了端口号。每个需要网络通信的应用程序都会绑定一个或多个端口。

    • 目标端口告诉操作系统数据应该交给哪个程序(如80给Web服务器,53给DNS)。

    • 源端口用于让接收方知道回信该发给谁。

  2. TCP vs UDP - 核心哲学

    • UDP

      • 极其简单。在IP包基础上,增加了源端口和目标端口。没有连接,没有可靠性保证。

      • 深层价值:把控制权完全交给应用层。适用于实时性要求高、可容忍少量丢失的场景(视频会议、在线游戏、DNS查询)。

    • TCP

      • 极其复杂。它要在不可靠的IP网络上,构建一个可靠的、面向连接的字节流服务。

      • 如何实现可靠性?

        • 确认与重传:接收方每收到一个数据段,必须发送一个确认。发送方在一定时间内没收到确认,就认为数据丢失,会重新发送。

        • 序列号:为每个字节编号,解决网络包乱序到达的问题,并用于确认机制。

      • 如何保证效率与公平?

        • 流量控制:通过滑动窗口机制,防止发送方发送过快,导致接收方缓冲区溢出。

        • 拥塞控制:这是TCP最精妙的部分。通过慢启动、拥塞避免、快速重传、快速恢复等算法,动态探测网络带宽,并在发生拥塞时主动降低发送速率,避免网络崩溃。这是互联网能够稳定运行的基石。

此时,数据已经可以可靠地(或高效地)交付到目标设备的特定应用程序了。但数据的内容是什么格式?应用程序如何理解?


第四层:应用层 - 网络服务的意义

这一层解决的是:“数据的内容是什么?我们应该如何解读和交换这些信息?

  • 协议:应用层协议定义了应用程序之间交换信息的格式和规则。

    • HTTP:用于Web浏览,使用请求/响应模型(GET, POST)。

    • DNS:互联网的“电话本”,将域名(www.google.com)翻译成IP地址。

    • SMTP/POP3:用于电子邮件收发。

    • WebSocket:在单个TCP连接上实现全双工通信,用于实时应用。

总结:从底层到高层的全景图

让我们用一个发送邮件的例子,串联起所有层次:

  1. 应用层:你的邮件客户端(如Outlook)使用SMTP协议,准备好邮件内容(收件人、主题、正文)。

  2. 传输层:将邮件数据交给TCP。TCP将其分割成 manageable 的数据段,加上TCP头(包含源端口、目标端口-25)。

  3. 网络层:TCP段交给IP。IP加上IP头(包含你的IP和邮件服务器的IP),封装成IP包。

  4. 数据链路层:IP包交给以太网。以太网加上帧头帧尾(包含你的MAC地址和下一跳路由器的MAC地址),封装成帧。

  5. 物理层:网卡将帧转换成 electrical signals / light pulses,通过网线/光纤发送出去。

这个数据包经过本地网络、路由器、互联网骨干网,最终到达邮件服务器。然后反向执行一遍解封装过程,将原始的邮件数据交付给邮件服务器的SMTP服务程序。


旅程的逆向:拆解信封

现在,这串代表了“帧”的信号,通过复杂的网络路径,最终到达了纽约你朋友的电脑。

  1. 物理层:朋友的网卡接收到光/电信号,将其还原成 0 和 1 的比特流。

  2. 数据链路层:网卡驱动程序检查帧头中的目标MAC地址。如果匹配,它就拆掉帧头帧尾,将里面的 IP包 取出来,交给操作系统内核的网络层处理。

  3. 网络层:操作系统检查IP头中的目标IP地址。如果匹配(是本机),它就拆掉IP头,将里面的 TCP段 取出来,根据IP头中指示的协议(如TCP),交给传输层的TCP模块处理。

  4. 传输层:TCP模块检查TCP头中的目标端口号(这里是80)。它发现端口80正被一个Web服务器程序监听。于是,它拆掉TCP头,将里面的原始数据 “Hello, World!” 放入该Web服务器程序的接收缓冲区。

  5. 应用层:Web服务器程序从自己的缓冲区中读取到数据 “Hello, World!”,并理解这是用HTTP协议发来的请求,于是开始处理这个请求。


深层知识的精髓在于理解,每一层都为其上一层提供服务,同时每一层都通过封装和抽象,隐藏了下层的复杂性。 正是这种分层和封装的设计,使得互联网这个人类历史上最复杂的系统之一,得以被设计、构建和维护。

http://www.dtcms.com/a/520932.html

相关文章:

  • 矩阵题型hot100
  • TCP网络编程本质
  • 内蒙古建设厅官网站凡科建站公司
  • MySQL专题Day(3)————索引
  • 开源项目分享:Gitee热榜项目 2025年10月第四周 周榜
  • Linux常用命令与KVM基础
  • 全链路智能运维中的跨域数据联邦学习与隐私增强技术
  • 海曙网站制作wordpress模板使用
  • PD快充协议芯片XSP18 支持诱骗5V9V12V15V20V电压档位
  • AMD KFD的SDMA Packet 类型和定义解析
  • Python-模块和包
  • 网站首页代码怎么做写网站教程
  • 网站建设岗位能力评估表老鹰主机 wordpress
  • 什么网站好看用h5做天津免费建设网站
  • 从零起步学习MySQL || 第八章:索引深入理解及高级运用(结合常见优化问题讲解)
  • ASP.NET酒店管理系统源码
  • 汕头企业网站公司高端大气上档次网站
  • 昆明企业建网站多少钱河源网站设计怎么做
  • JavaEE知识点梳理与整合
  • 充值网站制作购物网站制作公司
  • 在线免费网站模板机械外贸有哪些平台
  • 基于MATLAB的Relief-F算法实现
  • 滥用 CDN 缓存功能(传播恶意内容)
  • 正点原子RK3568学习日志18-一个驱动兼容不同设备
  • SpringBoot-Web开发之静态资源管理
  • 广州做网站代理商建立网站的目录结构应注意哪些问题
  • 初识C语言12. 结构体(自定义类型的核心工具)
  • webrtc源码走读(二)-QOS-RTT
  • 【Java】线程安全问题
  • 数据结构算法学习:LeetCode热题100-链表篇(下)(随机链表的复制、排序链表、合并 K 个升序链表、LRU 缓存)