欢迎光临
我们一直在努力

linux之网络基础

1. 网络发展历程

网络源于人的需求——让计算机之间能够协作。发展路径由局部(局域网)到整体(广域网)。

新技术(需求)带来新设备。

LAN(局域网)

![LAN 图示]
局域网的覆盖范围有限(一栋楼、一个校园),通过交换机等设备连接。

WAN(广域网)

![WAN 图示]
将多个局域网互连起来,形成更大范围的网络,即广域网。


2. 协议

本质是约定,用于形成共识,减少通信成本。协议需要先有约定,然后让多方共同遵守。

统一的网络协议标准由 ISO 制定,称为 OSI(开放系统互连) 模型。ISO 只制定标准,不写代码实现。

协议分层

协议也是软件,所有软件都是分层的。

  • 同层之间能"直接"通信(逻辑上)。
  • 分层之后能无障碍替换任意一层(解耦)。
  • OSI 七层模型

    由于实现复杂度问题,实际工程中合并为 5 层(简化为 TCP/IP 协议 4 层,物理层一般不计入讨论)。

    ![OSI 七层模型与 TCP/IP 四层模型对照]

    OSI 七层TCP/IP 四层典型协议/设备
    应用层 应用层 HTTP, FTP, DNS, SSH
    表示层 SSL/TLS(实现在应用层库中)
    会话层
    传输层 传输层 TCP, UDP
    网络层 网络层 IP, ICMP, ARP
    数据链路层 数据链路层 以太网, MAC 地址, 交换机
    物理层 (不计) 集线器, 网线, 光纤

    TCP/IP 协议的意义

    本地通信:所有本地硬件通过"线"连接起来(设备到设备)。冯诺依曼体系本身就是一个网络结构(CPU ↔ 内存 ↔ I/O)。

    网络通信:本质是多台主机之间的设备(网卡)与设备(网卡)之间的通信,只是单纯的点之间的距离变长了,从而引发新的问题:

    • 数据丢失怎么办?
    • 如何定位目标主机?
    • 如何找到通往目标的路径?
    • 如何处理收到的数据?

    ![局域网 → 跨网络的问题]

    解决问题的方案就是 TCP/IP 协议栈。

    协议分层的一个重要原因:不同层用于解决不同种类、不同性质的问题。

    分层解决的核心问题
    应用层 如何组织和处理数据
    传输层 数据是否可靠到达(丢包重传、流量控制)
    网络层 目标主机在哪里(寻址、路由)
    数据链路层 当前下一步去哪(相邻节点之间的帧传输)

    TCP/IP 协议与 OS 之间的关系

    ![协议与 OS 关系图]

    协议的不同层其实是在主机的不同层次实现的:

    • 数据链路层:在网卡驱动(硬件/固件)中实现
    • 传输层(TCP) 和 网络层(IP):在操作系统内核中实现
    • 应用层:在用户态进程中实现

    TCP 和 IP 给上层提供系统调用(Socket API)。

    可以说,协议分层既是基于处理不同问题的需要,也是顺应计算机体系结构(分层结构)的结果。

    ![分层实现对应关系]

    不同操作系统(Linux, Windows, macOS)在网络部分都遵循相同的 TCP/IP 协议,因此网络部分的代码逻辑本质一致,从而能够互相通信。

    协议到底是什么

    从计算机角度看,协议的本质是约定好的结构体(报文头部格式)。

    ![协议报文结构]

    各层的主要职责和关键概念:

    • 物理层:负责光/电信号的传递方式。集线器(Hub,信号中继器)工作在物理层。
    • 数据链路层:负责设备之间的数据帧传送和识别。标准有以太网、令牌环网、无线 LAN(都是局域网技术)。交换机(Switch) 工作在这一层。
    • 网络层:负责地址管理和路由选择。例如 IP 协议中通过 IP 地址 标识一台主机(更准确地说是网络接口),并通过路由表规划两台主机之间的数据传输线路(路由)。路由器(Router) 工作在这一层。
    • 传输层:负责两台主机之间端到端的数据传输。如 TCP(传输控制协议),能确保数据可靠地从源主机发送到目标主机;UDP 则提供不可靠但低延迟的传输。
    • 应用层:负责应用程序之间的沟通。网络编程主要针对应用层。

    局域网可以有多种(以太网、令牌环网、WiFi),但整体的广域网只能有一个统一的网络层(IP)。因此网络的构成为:多种局域网通信标准 + 一个广域网通信标准。

    多种局域网连接起来变成广域网,局域网是广域网的基础。


    3. 局域网网络传输

    ![局域网拓扑示意]

    ifconfig(或 ip addr)是一个查看网络接口信息的命令。eth0 是以太网接口的名称,ether 表示以太网,后面的值是网卡的 MAC 地址(全球唯一)。

    在局域网中,数据是公开的(总线型或共享介质)。每一台主机的网卡用 MAC 地址 保证自己在局域网内的唯一性。

    ![MAC 地址帧结构]

    工作原理:

    • 主机 A(MAC_A)给主机 E(MAC_E)发送数据帧。
    • 局域网内的所有主机都会收到这个帧。
    • 各主机检查帧头中的 目标 MAC 地址(dst MAC),如果不是自己的,直接丢弃该帧。
    • 以太网中,任何时刻只允许一台机器向网络中发送数据(半双工模式)。
    • 如果多台主机同时发送,会产生数据干扰,称为数据碰撞。
    • 所有发送数据的主机需要执行碰撞检测和碰撞避免算法(CSMA/CD):发送前监听,碰撞后随机等待一段时间再重试。
    • 在没有交换机(只有集线器)的情况下,一个以太网就是一个碰撞域。

    局域网通信的过程中,主机通过目标 MAC 地址判断收到的报文是否是发给自己的。

    以太网的本质是共享临界资源(共享信道)。而令牌环网则是:只有持有令牌的主机才能发言。

    两个主机之间的通信本质就是两个协议栈在通信

    ![协议栈通信示意]

    • 同层之间都以为自己在与对方直接通信(因为同层双方处理的数据相同——头部格式是一致的)。
    • 每一层报文中的第一个头部叫协议报头,剩下的所有部分叫有效载荷。
    • 自顶向下不断加报头的过程叫封装。
    • 自下向上不断分离报头和有效载荷的过程叫解包(也叫分用)。

    任何协议都必须满足两个基本能力:

  • 报头必须要能做到与有效载荷分离(通过固定长度或长度字段)。
  • 报头要能标识自己将有效载荷交付给上层的哪个协议(即向上分用,如通过 Ethernet Type、IP Protocol 字段)。
  • 底层收到数据但目标不是自己的,直接在数据链路层丢弃。

    封装过程可以看作协议报头的不断入栈,解包就是不断出栈。因此一台主机的通信过程叫 协议栈。

    不同层报文的叫法:

    层级报文名称
    应用层 请求 / 应答(消息)
    传输层 数据段(Segment)
    网络层 数据报(Datagram / Packet)
    数据链路层 数据帧(Frame)

    网卡有一种模式叫混杂模式(Promiscuous Mode),在这种模式下网卡会接收所有经过的报文,无脑向上层传递(Wireshark 抓包就是基于此)。

    报头中记载了传输给上层的协议是哪一个(如 Ethernet Type 字段标识上层是 IP 还是 ARP)。


    4. 跨网络传输

    IP 地址

    IP 地址:默认使用 IPv4(4 字节,32 位),用于标识全球范围内网络接口的唯一性(公网 IP)。私网 IP(如 192.168.x.x, 10.x.x.x)可在不同局域网内重复使用,通过 NAT(网络地址转换)映射为公网 IP 访问互联网。

    IP 与 MAC 之间的关系

    一个形象的比喻:

    • srcIP 和 dstIP 可以看作公交车的始发站和终点站(全程不变)。
    • srcMAC 与 dstMAC 可以看作公交车的当前站与下一站(逐跳变换)。
    • dstIP 是路由器转发决策的参照依据。

    ![IP vs MAC 示意]

    路由器本身就是一台主机(有网络层),因此具备路由功能。

    关键判断逻辑:

    • 如果 dstIP 与 srcIP 在同一个子网内(通过子网掩码判断),src 主机直接将报文发送到目标主机。
    • 如果 dstIP 不在同一子网,src 主机会将报文的 dstMAC 设为该局域网中默认网关(路由器) 的 MAC 地址,因为 src 主机不知道该 dstIP 在哪里。
    • dstIP 用于判断该报文下一步是直接发给目标主机,还是发给路由器。

    MAC 地址是在数据链路层封装的(网络层封装后交给数据链路层,数据链路层加上 MAC 头部)。

    报文的传输过程

  • 源主机根据 dstIP(结合子网掩码)判断目标是否在同一局域网。
  • 如果在同一局域网,直接通过 ARP 协议获取 dstMAC 并发送。
  • 如果不在,将 dstMAC 设为默认网关(路由器)的 MAC 地址,发送数据帧。
  • 路由器收到帧后,解包到网络层,查看 dstIP,查找路由表。
  • 路由器重新封装(重写 srcMAC 为自己、dstMAC 为下一跳),转发出去。
  • 重复步骤 4-5,直到到达目标主机所在的局域网。
  • 最后一跳路由器直接将报文发给目标主机。
  • 核心意义:
    路由器重新封装(重写 MAC)的功能解决了不同局域网之间数据链路层协议不兼容的问题。因此从网络层往上看,所有网络都叫作 IP 网络。

    赞(0)
    未经允许不得转载:171主机测评 » linux之网络基础
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址