43. LINUX网络编程(1)
1. 网络发展历史和分层
1.1 Internet的历史
- Internet-“冷战”的产物
- 1957年10月和11月,前苏联先后有两颗“Sputnik”卫星上天
- 1958年美国总统艾森豪威尔向美国国会提出建立DARPA (Defense Advanced Research Project Agency),即国防部高级研究计划署,简称ARPA
- 1968年6月DARPA提出“资源共享计算机网络” (Resource Sharing Computer Networks),目的在于让DARPA的所有电脑互连起来,这个网络就叫做ARPAnet,即“阿帕网”,是Interne的最早雏形
-
网络互联促成了TCP/IP协议的产生
- 早期的ARPAnet使用网络控制协议(Network Control Protocol,NCP),不能互联不同类型的计算机和不同类型的操作系统,没有纠错功能
- 1973年由 Robert Kahn 和Vinton Cerf两人合作为ARPAnet开发了新的互联协议。
- 1974年12月两人正式发表第一份TCP协议详细说明,但此协议在有数据包丢失时不能有效的纠正
-
TCP协议分成了两个不同的协议:
- 用来检测网络传输中差错的传输控制协议TCP
- 专门负责对不同网络进行互联的互联网协议IP
从此,TCP/IP协议诞生
1983年ARPAnet上停止使用NCP,互联网上的主机全部使用TCP/IP协议。TCP/IP协议成为Internet中的“世界语”
2. 网络的体系结构
网络采用分而治之的方法设计,将网络的功能划分为不同的模块,以分层的形式有机组合在一起。
每层实现不同的功能,其内部实现方法对外部其他层次来说是透明的。每层向上层提供服务,同时使用下层提供的服务
网络体系结构即指网络的层次结构和每层所使用协议的集合
两类非常重要的体系结构:OSI与TCP/IP
OSI开放系统互联模型
- OSI模型相关的协议已经很少使用,但模型本身非常通用
- OSI模型是一个理想化的模型,尚未有完整的实现
- OSI模型共有七层

OSI七层模型(开放式系统互联参考模型),是网络通信的分层架构标准,以下分点介绍:
各层功能与说明
| 层级 | 功能概述 | 典型协议/技术 | 与TCP/IP模型的对应关系 |
|---|---|---|---|
| 应用层 | 为用户提供应用服务(如文件传输、邮件、网页浏览)。 | HTTP、FTP、SMTP、DNS | 对应TCP/IP的应用层 |
| 表示层 | 负责数据的编码、加密、压缩,确保通信双方数据格式一致。 | ASCII、JPEG、SSL/TLS | 部分融入TCP/IP的应用层 |
| 会话层 | 建立、维护和终止通信会话,管理会话同步。 | RPC、NetBIOS | 部分融入TCP/IP的应用层/传输层 |
| 传输层 | 提供端到端的可靠(如TCP)或不可靠(如UDP)数据传输,实现流量控制。 | TCP、UDP | 对应TCP/IP的传输层 |
| 网络层 | 处理IP寻址、路由选择,实现不同网络间的数据包转发。 | IP、ICMP、OSPF | 对应TCP/IP的网络层 |
| 数据链路层 | 负责数据帧的封装、差错检测,实现相邻节点的可靠传输。 | Ethernet、PPP、HDLC | 对应TCP/IP的链路层(含部分物理层功能) |
| 物理层 | 定义物理介质的电气、机械特性,实现比特流的传输。 | 网线、光纤、无线射频规范 | 对应TCP/IP的物理层 |
模型意义
OSI七层模型是网络架构的理论框架,虽实际应用中TCP/IP模型更广泛,但它帮助人们清晰理解网络通信的分层逻辑,便于协议设计、故障排查和技术学习。
TCP/IP协议族的体系结构
-
TCP/IP协议是Internet事实上的工业标准。
-
一共有四层

TCP/IP四层模型,是互联网通信的核心架构,以下分点说明各层:
| 层级 | 包含协议/技术 | 功能概述 | 补充说明 |
|---|---|---|---|
| 应用层 | Telnet、FTP、HTTP、DNS、SMTP等 | 为用户提供各类网络应用服务,如远程登录(Telnet)、文件传输(FTP)、网页浏览(HTTP)、域名解析(DNS)、邮件发送(SMTP)等。 | 整合了OSI模型中应用层、表示层、会话层的功能 |
| 传输层 | TCP、UDP | 提供端到端的可靠(TCP)或不可靠(UDP)数据传输,实现流量控制、拥塞控制(TCP)等。 | 是进程间通信的核心层级,保障数据传输的可靠性或高效性 |
| 网络层 | IP、ICMP、IGMP | 处理IP寻址、路由选择,ICMP用于网络控制消息(如ping),IGMP用于组播管理。 | 对应OSI模型的网络层,是跨网络通信的关键 |
| 网络接口和物理层 | 以太网、令牌环网、FDDI等 | 负责数据在物理介质上的传输,处理数据帧的封装、物理信号转换等。 | 对应OSI模型的数据链路层和物理层,实现硬件级数据传输 |

TCP/IP协议通信模型架构图,可从以下维度解析:
1. 组件与角色
- Client/Server:通信的两端,运行应用程序(如客户端的浏览器、服务器的Web服务),属于TCP/IP模型的应用层。
- Operating System:提供网络协议栈支持,负责传输层(TCP/UDP)、网络层(IP)的功能处理。
- LAN driver:局域网驱动,属于网络接口层,负责将上层数据封装成以太网帧等,通过LAN(局域网)物理传输。
- Router:工作在网络层,负责跨网段路由转发,实现LAN与LAN、LAN与WAN之间的通信。
- WAN/Internet:广域网/互联网,是跨区域的网络载体,通过多路由器转发实现远距离通信。
2. 通信流程与分层逻辑
数据从客户端到服务器的流程体现了TCP/IP模型的分层协作:
应用层(Client应用)→ 传输层/网络层(操作系统处理)→ 网络接口层(LAN driver封装传输)→ 经Router路由转发 → 通过WAN/Internet到达Server侧 → 反向解封装到Server应用。
这种分层设计让每一层专注自身职责(如Router仅处理网络层路由、LAN driver仅处理链路层帧传输),实现“解耦”,提升系统可维护性。
3. 实际意义
该图直观呈现了TCP/IP协议在实际网络中的通信路径,是理解网络分层协作的典型参考。例如,嵌入式物联网设备(作为Client)向云端服务器上传数据时,就是遵循此流程:设备应用层封装数据,经操作系统协议栈、硬件驱动(如Wi-Fi模块),通过路由器接入互联网,最终到达云端Server。


这是TCP/IP协议下的数据包结构示意图,可从以下几点分析:
1. 结构组成及功能
| 部分 | 长度(字节) | 作用说明 |
|---|---|---|
| Ethernet header | 14 | 链路层头部,包含源/目的MAC地址等,实现以太网帧的链路层识别与传输。 |
| IP header | 20 | 网络层头部,包含源/目的IP地址、协议类型等,用于IP寻址和路由。 |
| TCP header | 20 | 传输层头部,包含源/目的端口号、序列号、确认号等,实现TCP可靠传输(流量控制、拥塞控制等)。 |
| App. header | - | 应用层头部,因应用协议(如HTTP、FTP)而异,用于标识应用层数据类型与信息。 |
| User data | - | 应用层实际传输的用户数据内容。 |
| Ethernet trailer | - | 链路层尾部,含CRC校验码,用于以太网帧的错误检测。 |
2. 长度范围说明
从IP头部到用户数据等部分,长度范围为46 - 1500字节,这是以太网帧有效载荷的范围,遵循了以太网MTU(最大传输单元)的要求,确保数据在链路层能正常传输。

这是一张TCP/IP模型下数据封装与传递过程的示意图,清晰展示了数据在网络分层中“封装→转发→解封装”的完整流程,可从以下维度解析:
1. 发送端(主机A)的封装过程
| TCP/IP分层 | 数据单元 | 封装操作(添加头部/校验) | 头部作用 |
|---|---|---|---|
| 应用层 | 应用层数据包 | 客户数据 + FTP头 | 定义文件传输的业务逻辑(FTP协议) |
| 传输层 | TCP段 | 添加TCP头 | 实现端到端可靠传输(标记端口、序列号、确认号等,保证数据有序、不丢包) |
| 网络层 | IP数据报 | 添加IP头 | 负责路由寻址(标记源/目的IP地址,让数据跨网段传输) |
| 网络接口层 | 以太网数据帧 | 添加以太网头 + CRC校验 | 实现局域网内传输(以太网头标记MAC地址,CRC用于帧的差错校验) |
2. 路由器的转发过程
路由器接收主机A的以太网数据帧后,解封装到IP层(去掉以太网头和CRC),根据IP头中的目标IP地址,选择转发路径,再封装成令牌环网数据帧(添加令牌环网头和CRC),实现异构网络(以太网→令牌环网)的互通。
3. 接收端(主机B)的解封装过程
| TCP/IP分层 | 数据单元 | 解封装操作(去掉头部/校验) | 最终结果 |
|---|---|---|---|
| 网络接口层 | 令牌环网数据帧 | 去掉令牌环网头 + CRC | IP数据报 |
| 网络层 | IP数据报 | 去掉IP头 | TCP段 |
| 传输层 | TCP段 | 去掉TCP头 | 应用层数据包 |
| 应用层 | 应用层数据包 | 去掉FTP头 | 客户数据 |
4. 核心意义
该图直观体现了网络分层的“封装-解封装”机制:每一层只处理本层头部信息,实现“各司其职、接口标准化”,既保证了不同网络(以太网、令牌环网)的互通,又让数据传输的逻辑清晰可追溯。这也是TCP/IP协议能成为互联网基石的关键设计之一。

这是一张TCP/IP四层模型的结构与组件交互示意图,可从分层功能、Socket类型、模式区分三个维度解析:
1. 分层核心解析
| 分层 | 核心组件/协议 | 功能说明 |
|---|---|---|
| 应用层 | ftp、telnet、mail、ping | 承载具体业务功能(文件传输、远程登录、邮件收发、网络连通性检测) |
| 传输层 | TCP、UDP | 提供端到端数据传输能力(TCP可靠有序,UDP高效低延迟) |
| 网络层 | IP(+ICMP) | 负责路由寻址、跨网段通信(ICMP辅助网络控制,如ping的回显机制) |
| 物理层(Device Drivers) | 设备驱动 | 实现硬件接口驱动(如网卡驱动),将IP数据包封装为物理网络帧(以太网帧等),通过网线等介质传输 |
2. Socket类型与应用场景
Socket是应用层与传输层的交互接口,图中展示了两类关键Socket:
- Stream Socket(流式套接字):适配TCP协议,提供可靠、有序的字节流通信,支撑
ftp(文件传输)、telnet(远程登录)、mail(邮件)等场景。 - Raw Socket(原始套接字):绕过传输层,直接操作网络层/物理层协议,如
ping命令通过它发送ICMP回显请求,实现网络诊断。
3. 模式区分(用户模式 vs 内核模式)
- 用户模式:应用层的
ftp、telnet等程序运行在用户空间,通过Socket接口发起网络请求。 - 内核模式:传输层(TCP/UDP)、网络层(IP)、物理层(设备驱动)运行在内核空间,负责协议栈的底层处理(如数据包封装、路由转发)。
这张图清晰呈现了TCP/IP协议栈的“分层解耦”设计——应用层专注业务、传输层负责端到端可靠/高效传输、网络层处理跨网段路由、物理层完成硬件适配,而Socket则是连接应用与内核协议栈的关键纽带。
TCP协议特点
-
TCP(即传输控制协议):是一种面向连接的传输层协议,它能提供高可靠性通信(即数据无误、数据无丢失、数据无失序、数据无重复到达的通信)
-
适用情况:
- 适合于对传输质量要求较高,以及传输大量数据的通信。
- 在需要可靠数据传输的场合,通常使用TCP协议
- MSN/QQ等即时通讯软件的用户登录账户管理相关的功能通常采用TCP协议
UDP协议的特点
-
UDP(User Datagram Protocol)用户数据报协议,是不可靠的无连接的协议。在数据发送前,因为不需要进行连接,所以可以进行高效率的数据传输。
-
适用情况:
-
发送小尺寸数据(如对DNS服务器进行IP地址查询时)
-
在接收到数据,给出应答较困难的网络中使用UDP。(如:无线网络)
-
适合于广播/组播式通信中。
-
MSN/QQ/Skype等即时通讯软件的点对点文本通讯以及音视频通讯通常采用UDP协议
-
流媒体、VOD、VoIP、IPTV等网络多媒体服务中通常采用UDP方式进行实时数据传输
-
