linux——网络基础

一、互联网是怎么来的?(历史背景)

1. 互联网的诞生:冷战的产物

  • 1957 年苏联发射卫星,美国为了打造「不被核打击摧毁的通信网络」,成立了DARPA(国防部高级研究计划署)
  • 1968 年 DARPA 搭建了ARPANet(阿帕网),这是互联网的最早雏形,核心目标是「让多台电脑互联、资源共享」。
  • 早期 ARPANet 用的是NCP(网络控制协议),但它只能连同类型电脑,没有纠错能力,无法大规模推广。

2. TCP/IP 协议:互联网的「通用语言」

  • 1973 年,Robert Kahn 和 Vinton Cerf(互联网之父)为 ARPANet 开发了新协议:
    • 1974 年发布第一版 TCP 协议,但丢包时无法纠错;
    • 后来把 TCP 拆成两个协议:
      • TCP(传输控制协议):负责数据传输的可靠性(不丢、不错、不乱序)
      • IP(互联网协议):负责不同网络之间的互联
    • 从此TCP/IP 协议族诞生,成为互联网的「通用语言」,让全世界不同电脑、不同系统都能通信。

二、核心逻辑:网络为什么要「分层」?(体系结构)

1. 分层的本质:分而治之

就像寄快递:

  • 你只需要写地址、打包(应用层)
  • 快递员负责揽件、运输(传输层 / 网络层)
  • 快递站负责分拣、配送(数据链路层 / 物理层)
  • 每一层只做自己的事,不用管其他层怎么实现,这就是分层思想

2. 两大经典模型对比

表格

模型 层数 特点 现状
OSI 七层模型 应用层、表示层、会话层、传输层、网络层、数据链路层、物理层 理论化、完整,但实现复杂 仅作为理论参考,实际几乎不用
TCP/IP 四层模型 应用层、传输层、网络层、网络接口 / 物理层 简洁、实用、可落地 互联网的实际工业标准

3. TCP/IP 四层模型

表格

层级 核心作用 代表协议 通俗理解
应用层 直接给用户提供服务 HTTP/HTTPS、FTP、DNS、SMTP 你用的浏览器、微信、邮箱,都在这一层
传输层 给应用层提供「端到端」的传输服务 TCP、UDP 决定数据是「可靠送达」还是「快速送达」
网络层 给数据选路由、找路径 IP、ICMP、IGMP 相当于快递的「地址系统」,负责把数据送到目标网络
网络接口 / 物理层 把数据变成电信号 / 光信号,在物理网络传输 以太网、WiFi、4G/5G 相当于快递的「运输工具」(货车、飞机),负责实际传输

三、逐层拆解:每一层到底在干嘛?(核心概念)

1. 网络接口 / 物理层:数据的「物理载体」

  • 核心作用:把二进制数据转换成电信号 / 光信号,在网线、光纤、无线电中传输,同时负责接收信号还原成数据。
  • 关键概念
    • MAC 地址:48 位全球唯一,是网络设备的「物理身份证」(比如网卡的硬件地址,出厂就固定)。
    • ARP 协议:地址解析协议,通过 IP 地址找到对应的 MAC 地址(相当于「查通讯录,通过名字找手机号」)。
    • RARP 协议:反向地址解析,通过 MAC 地址找 IP 地址(现在很少用)。
    • PPP 协议:拨号协议,用于 GPRS/3G/4G 等移动网络。

2. 网络层:数据的「导航系统」

  • 核心作用:给数据分组(数据包)选择传输路径,实现跨网络通信。
  • 关键概念
    • IP 地址:互联网中主机的「逻辑地址」,IPv4 是 32 位(如 192.168.1.1),IPv6 是 128 位,每个数据包都必须携带源 IP 和目标 IP,路由器靠它选路由。
    • ICMP 协议 :互联网控制管理协议,我们常用的ping命令就属于 ICMP,用来检测网络连通性。
    • IGMP 协议:互联网分组管理协议,用于广播和组播(比如视频会议、直播)。

3. 传输层:数据的「快递服务」

  • 核心作用:给应用层提供「端到端」的传输服务,决定数据的传输质量。

  • 两大核心协议对比(必背)

    表格

    协议 特点 适用场景 通俗理解
    TCP 面向连接、可靠、一对一、有流量控制 对传输质量要求高的场景(如文件传输、网页访问、登录) 「顺丰快递」:必须签收,保证不丢、不错、不乱序
    UDP 无连接、不可靠、不保证顺序、速度快 对实时性要求高的场景(如直播、语音通话、游戏) 「平邮快递」:不保证送达,速度快,适合小数据、实时传输
    • SCTP:TCP 的增强版,支持多主机、多链路通信,用于电信等专业场景。

4. 应用层:用户直接接触的「服务层」

  • 核心作用:直接给用户提供各种网络服务,是用户能感知到的一层。
  • 常见协议
    • HTTP/HTTPS:网页访问协议(HTTPS 是加密版,更安全)
    • POP3/SMTP/IMAP:邮件收发协议(POP3 收、SMTP 发、IMAP 可只收部分邮件)
    • FTP:文件传输协议(上传 / 下载文件)
    • Telnet/SSH:远程登录协议(SSH 是加密版,更安全)
    • NTP:网络时钟协议(同步网络时间)
    • SNMP:简单网络管理协议(管理网络设备)
    • RTP/RTSP:音视频传输协议(用于安防监控、直播)

四、数据传输全流程:封包 & 拆包

1. 数据传输的「封装(封包)」过程(发送方)

就像寄快递,每一层都会给数据「加个信封」:

  1. 应用层:用户数据(如 HTTP 请求),加上应用层头部;
  2. 传输层:加上 TCP/UDP 头部(源端口、目标端口);
  3. 网络层:加上 IP 头部(源 IP、目标 IP);
  4. 数据链路层:加上以太网头部(源 MAC、目标 MAC)和尾部校验;
  5. 物理层:把封装好的帧转换成电信号,发送到网络中。

2. 数据传输的「解封装(拆包)」过程(接收方)

就像收快递,从外到内一层一层拆:

  1. 物理层:把电信号还原成二进制数据;
  2. 数据链路层:拆以太网头部,校验数据,交给网络层;
  3. 网络层:拆 IP 头部,根据目标 IP 交给对应主机;
  4. 传输层:拆 TCP/UDP 头部,根据目标端口交给对应应用;
  5. 应用层:拆应用层头部,把数据交给用户程序(如浏览器)。

3. 数据包结构

以太网头部 (14B) IP 头部 (20B) TCP 头部 (20B) 应用层头部 用户数据 以太网尾部
  • 总长度在 46-1500 字节之间,这就是以太网的「最大传输单元(MTU)」。

五、网络编程核心:Socket(套接字)

1. 什么是 Socket?

  • Socket 是网络编程的接口 ,相当于「网络通信的端点」,是一个特殊的文件描述符,支持read/write/close等操作。
  • 它不局限于 TCP/IP,既支持面向连接的 TCP,也支持无连接的 UDP。

2. Socket 的三大类型

表格

类型 对应协议 特点 适用场景
流式套接字 (SOCK_STREAM) TCP 面向连接、可靠、有序、无长度限制 网页访问、文件传输、远程登录
数据包套接字 (SOCK_DGRAM) UDP 无连接、不可靠、无序、独立数据包 直播、语音通话、游戏、DNS 查询
原始套接字 (SOCK_RAW) 自定义协议 直接访问底层协议(如 IP、ICMP) 网络抓包、自定义协议开发

六、IP 地址、端口号、字节序

1. IP 地址

  • 特殊 IP 地址
  • IP 地址转换函数
    • inet_aton()/inet_addr():把点分十进制 IP 转成 32 位二进制(仅 IPv4,不支持 255.255.255.255)
    • inet_ntoa():把二进制 IP 转成点分十进制
    • inet_pton()/inet_ntop():支持 IPv4/IPv6,能正确处理广播地址,是现代推荐用法

2. 端口号

  • 16 位数字,范围 1-65535,用来区分同一台主机上的不同进程(相当于「快递的收件人」)。
  • 端口分类:
    • 预留端口:1-1023(如 FTP:21、SSH:22、HTTP:80、HTTPS:443)
    • 保留端口:1024-5000(不建议手动使用)
    • 可用端口:5000-65535(可自由分配给自定义程序)
  • 网络通信的唯一标识IP地址 + 端口号,缺一不可。

3. 字节序

  • 大小端问题 :不同 CPU 存储多字节数据的顺序不同:
    • 小端模式:X86/ARM 架构(PC、手机常用),低位字节存低地址
    • 大端模式:PowerPC / 部分 ARM(路由器常用),高位字节存低地址
  • 网络字节序:统一采用大端模式,避免不同主机通信时的字节序错误。
  • 字节序转换函数
    • 主机序→网络序:htonl()(32 位)、htons()(16 位)
    • 网络序→主机序:ntohl()(32 位)、ntohs()(16 位)

七、学习逻辑链

  1. 历史层:ARPANet → TCP/IP 诞生 → 互联网通用语言
  2. 分层层:TCP/IP 四层模型 → 每一层的作用、协议
  3. 传输层:TCP/UDP 的区别 → 传输质量的选择
  4. 数据层:封包 / 拆包流程 → 数据从发送到接收的完整路径
  5. 编程层:Socket → 网络编程的接口
  6. 细节层:IP 地址、端口号、字节序 → 通信的基础要素
相关推荐
独小乐2 小时前
013.定时器之系统Tick实现|千篇笔记实现嵌入式全栈/裸机篇
linux·笔记·单片机·嵌入式硬件·arm
笨笨饿2 小时前
# 52_浅谈为什么工程基本进入复数域?
linux·服务器·c语言·数据结构·人工智能·算法·学习方法
姜太小白2 小时前
【Linux】麒麟V10SP3解决网络设备名不匹配问题
linux·运维·服务器
@小博的博客2 小时前
【Linux探索学习】第六弹:操作系统的概念及冯诺依曼体系结构
linux·学习
青桔柠薯片2 小时前
Linux 设备驱动开发环境构建与系统启动机制剖析
linux·arm开发·驱动开发·imx6ull
云栖梦泽2 小时前
Linux内核与驱动:8.ioctl驱动基础
linux·c++
Smile_2542204182 小时前
DCS如何通过KepServerEx向InfluxDB写数据
网络·时序数据库
.select.2 小时前
TCP 5(socket编程)
服务器·网络·tcp/ip
风曦Kisaki2 小时前
Linux服务Day03:自定义YUM仓库、网络YUM仓库(HTTP/FTP)、MariaDB数据库基础操作
linux·网络·数据库