网络原理初识
本来想从网络的发展史开始写,之后再写网络的定义啥的,但快写完了才发现,这不课本教材吗,没劲,遂弃之,重撰,删芜就简.写点我认为,对程序员来说真正有用的东西
目录
IP地址
概念
格式
特殊地址
端口号
概念
格式
协议
概念
知名协议的默认端口
五元组
协议分层
OSI七层模型
TCP/IP网络模型
应用层:服务交互接口
传输层:端到端连接管理
网络层:全局寻址与路由
数据链路层:局域网络传输
物理层:信号传输基础
封装与分用
封装过程(发送端)
分用过程(接收端)
技术价值
网络互连的目的是进行网络通信,也即是网络数据传输,更具体一点,是网络主机中的不同进程间,基于网络传输数据。 那么,在组建的网络中,如何判断到底是从哪台主机,将数据传输到那台主机呢?这就需要使用IP地址来标识。
IP地址
概念
IP地址主要用于标识网络主机、其他网络设备(如路由器)的网络地址。简单说,IP地址用于定位主机 的网络地址。就像快递员需要精确的收件地址才能派送包裹,网络世界中的数据传递也需要明确的定位标识。当北京的程序员向上海的服务器请求数据时,IP地址就如同包裹上的"城市+街道+门牌号",指引着数据包跨越数千公里精准抵达目标设备。
格式
IPv4地址 基本结构
- 32位二进制数(4字节),分4段十进制表示
示例:11000000.10101000.00000001.00000001
→192.168.1.1
- 点分十进制记法:每字节转为0-255整数,用点分隔
有效范围:0.0.0.0
~255.255.255.255
IPv6地址基本结构
- 128位二进制数(16字节),分8组十六进制表示
示例:2001:0db8:85a3:0000:0000:8a2e:0370:7334
- 压缩规则:
- 前导零省略:
0db8
→db8
- 连续零块压缩:
2001:0:0:0:0:0:0:1
→2001::1
- 前导零省略:
特殊地址
127.*的IP地址用于本机环回(loop back)测试,通常是127.0.0.1 本机环回主要用于本机到本机的网络通信(系统内部为了性能,不会走网络的方式传输),对于开发网络通信的程序(即网络编程)而言,常见的开发方式都是本机到本机的网络通信。
IP地址解决了网络通信时,定位网络主机的问题,但是还存在一个问题,传输到目的主机后,由哪个进程来接收这个数据呢?这就需要端口号来标识。
端口号
概念
在网络通信中,IP地址用于标识主机网络地址,端口号可以标识主机中发送数据、接收数据的进程。简单说:端口号用于定位主机中的进程。就像酒店的房间号,想象你要给某栋大楼里的朋友送快递:
- IP地址 = 大楼地址(找到正确的建筑)
- 端口号 = 房间号(把包裹送到具体的收件人)
一台电脑就像一栋有很多房间(程序)的大楼,端口号告诉网络数据应该送到哪个"房间"(具体哪个软件收数据)。比如:
- 浏览器访问网站 → 找服务器的 80号房间(HTTP协议)
- 微信视频通话 → 用 随机空闲房间(如5000~60000之间的端口)
格式
- 16位无符号整数(取值范围:0~65535)
- 在TCP/UDP协议头部中占据 2字节存储空间
分类标准
类型 | 范围 | 用途说明 | 典型示例 |
---|---|---|---|
知名端口 | 0~1023 | 系统级服务专用端口 | HTTP=80, HTTPS=443 |
注册端口 | 1024~49151 | 用户级应用注册端口 | MySQL=3306, Redis=6379 |
动态/私有端口 | 49152~65535 | 客户端临时使用端口 | 微信视频通话随机端口 |
有了IP地址和端口号,可以定位到网络中唯一的一个进程,但还存在一个问题,网络通信是基于二进制 0/1数据来传输,如何告诉对方发送的数据是什么样的呢? 网络通信传输的数据类型可能有多种:图片,视频,文本等。同一个类型的数据,格式可能也不同,如 发送一个文本字符串“你好!”:如何标识发送的数据是文本类型,及文本的编码格式呢? 基于网络数据传输,需要使用协议来规定双方的数据格式。
协议
概念
协议,网络协议的简称,网络协议是网络通信(即网络数据传输)经过的所有网络设备都必须共同遵从 的一组约定、规则。如怎么样建立连接、怎么样互相识别等。只有遵守这个约定,计算机之间才能相互 通信交流。通常由三要素组成,就像人类交流的语法规则,想象两个说不同语言的人要合作完成项目:
- 语法 = 单词排列顺序(英文用主谓宾,日文用主宾谓)
- 语义 = 词语真实含义("提交"代表完成动作)
- 时序 = 对话节奏(A说完B才能回应)
网络协议就是计算机界的"多国语言词典",规定数据如何打包、传输和解码。比如:
- HTTP协议:浏览器和服务器约定好"问-答"格式
浏览器问:GET /index.html 服务器答:200 OK + 网页内容
- TCP协议:像打电话要先说"喂?",挂断前说"再见"
知名协议的默认端口
系统端口号范围为 0 ~ 65535,其中:0 ~ 1023 为知名端口号,这些端口预留给服务端程序绑定广泛使 用的应用层协议,如:
端口号 协议名称 典型应用场景 20 FTP (Data Channel) 文件传输协议的数据通道 21 FTP (Control Channel) FTP服务命令控制通道 22 SSH 安全加密的远程服务器管理 23 Telnet 明文远程终端协议(已逐步被SSH取代) 25 SMTP 邮件发送服务(如Postfix/Sendmail) 53 DNS 域名解析服务(UDP/TCP双协议支持) 67 DHCP Server 动态主机配置协议服务端 68 DHCP Client 客户端获取IP地址 80 HTTP 网页服务标准端口(Nginx/Apache) 110 POP3 邮件收取协议(明文传输) 123 NTP 网络时间协议同步 143 IMAP 邮件同步协议(支持多设备) 443 HTTPS 加密版HTTP(需部署SSL/TLS证书) 465 SMTPS 加密邮件提交端口 587 Submission 安全邮件提交端口(强制STARTTLS) 993 IMAPS 加密IMAP协议 995 POP3S 加密POP3协议 以上只是说明 0 ~ 1023 范围的知名端口号用于绑定知名协议,但某个服务器也可以使用其他 1024 ~ 65535 范围内的端口来绑定知名协议。
五元组
在TCP/IP协议中,用五元组来标识一个网络通信.五元组是网络通信的"分子级"标识符,由五个关键参数组合而成,能够唯一确定一条网络连接。其作用相当于快递系统中的完整物流信息,确保数据包精准送达目标应用。
组成要素
参数项 | 数据示例 | 技术作用 |
---|---|---|
源IP地址 | 192.168.1.100 | 标识数据发送设备的位置 |
源端口号 | 54321 | 定位发送主机的具体进程 |
目的IP地址 | 203.0.113.5 | 指定数据接收设备的网络坐标 |
目的端口号 | 443 | 确定接收主机的目标服务 |
传输层协议 | TCP | 定义通信规则(可靠/不可靠传输) |
可以在cmd中,输入 netstat -ano 查看网络数据传输中的五元组信息:
协议分层
协议分层是将复杂网络通信拆解为多个独立功能层,每层专注特定任务(如传输、寻址、数据格式化),通过标准接口向上提供服务、向下调用功能。协议分层如同建造摩天大楼的施工蓝图,将复杂的网络通信分解为多个功能模块。每个层级专注解决特定问题,通过标准接口与相邻层交互,这种设计使得:
- 技术演进独立:更新无线技术(Wi-Fi 6)无需修改上层HTTP协议
- 故障定位精准:网络不通时可逐层排查(先查物理连接再查IP配置)
- 开发效率提升:程序员可专注应用层开发,无需处理比特流转换
OSI七层模型
只是个理论了解了解就行,OSI七层模型(开放式系统互联参考模型)是国际标准化组织(ISO)提出的网络通信理论框架,将通信过程划分为7个层级,每层定义明确功能,下层为上层提供服务,是全球网络协议设计的理论基础。
层级 | 名称 | 核心功能 | 关键协议/设备 | 数据单元 |
---|---|---|---|---|
7 | 应用层 | 用户与网络的接口(文件传输、邮件收发) | HTTP、FTP、SMTP | 报文/消息 |
6 | 表示层 | 数据格式转换(加密、压缩、编码) | SSL/TLS、JPEG、ASCII | 格式化数据 |
5 | 会话层 | 建立/维护/断开会话(设备间对话逻辑) | NetBIOS、RPC、SSH | 会话数据 |
4 | 传输层 | 端到端可靠传输(流量控制、错误校验) | TCP、UDP | 数据段 |
3 | 网络层 | 逻辑寻址与路由(跨网络传输路径选择) | IP、ICMP、路由器 | 数据包 |
2 | 数据链路层 | 物理寻址与帧管理(局域网内设备通信) | 以太网、MAC地址、交换机 | 数据帧 |
1 | 物理层 | 物理介质传输(电信号、光信号、无线电波) | 网线、光纤、集线器 | 比特流 |
TCP/IP网络模型
应用层:服务交互接口
应用层直接对接用户程序,定义应用程序间的通信规则。常见协议包括:
- HTTP协议:支撑网页浏览
- SMTP/POP3协议:实现邮件收发
- DNS协议:完成域名到IP地址的转换
- FTP协议:管理文件传输
数据在此层被封装为特定应用协议格式,例如网页请求会被包装为HTTP报文。程序员通过调用API接口,无需关心底层实现即可完成网络通信。
传输层:端到端连接管理
该层建立主机进程间的逻辑通信通道,核心协议包括:
TCP协议:提供面向连接的可靠传输
- 三次握手建立连接
- 数据分段与序列编号
- 流量控制与重传机制
UDP协议:支持无连接的快速传输
- 适用于实时音视频流
- 不保证数据完整性
端口号(0-65535)在此层标识具体应用进程,如80端口对应HTTP服务。TCP/UDP头部包含源端口、目的端口及校验信息。
网络层:全局寻址与路由
IP协议是本层核心,实现两大核心功能:
地址规划
- IPv4采用32位地址(如192.168.1.1)
- IPv6扩展为128位地址(如2001:0db8::1)
- 子网划分提升地址利用率
路由选择
- 路由器根据路由表转发数据包
- OSPF、BGP等路由协议维护网络拓扑
- NAT技术实现公私地址转换
数据包在此层添加IP头部,包含源/目的IP地址、TTL生存时间等字段。分片机制确保大数据包适配不同网络的最大传输单元(MTU)。
数据链路层:局域网络传输
管理同一物理网络内的设备通信:
- MAC地址(如00:1A:2B:3C:4D:5E)标识网卡设备
- 以太网协议规定帧结构(前导码+MAC头+数据+FCS)
- 交换机通过MAC地址表实现帧转发
- ARP协议解析IP地址到MAC地址的映射
错误检测通过帧校验序列(FCS)实现,使用CRC算法验证数据完整性。VLAN技术可在物理网络中创建逻辑子网。
物理层:信号传输基础
实现比特流的物理传输:
- 定义电气特性(电压标准)
- 规定接口规范(RJ45、光纤接口)
- 调制技术(QAM、OFDM)
- 传输介质(双绞线、同轴电缆、光纤、无线电波)
该层设备包括集线器、中继器等,负责将数字信号转换为电磁波、光信号或无线电波。传输速率、误码率、信噪比是主要技术指标。
封装与分用
在TCP/IP网络模型中,封装(Encapsulation)和分用(Demultiplexing)是实现跨层通信的关键流程,二者共同构成数据收发的基础逻辑。
封装过程(发送端)
数据从应用层向物理层逐层加工:
应用层
原始数据(如HTTP请求)添加应用协议头(HTTP头),包含请求方法、URL路径等信息。
传输层
接收应用数据单元(ADU),添加TCP/UDP头部:
- 源端口 & 目的端口(标识应用程序)
- 序列号 & 确认号(TCP可靠性保障)
- 校验和(数据完整性验证)
形成报文段(Segment)或数据报(Datagram)
网络层
附加IP头部生成数据包(Packet),包含:
- 源IP & 目的IP(全球寻址)
- 协议类型(TCP=6/UDP=17)
- TTL(生存周期计数器)
数据链路层
封装为帧(Frame),添加:
- 源MAC & 目的MAC(局域网寻址)
- VLAN标签(虚拟网络划分)
- FCS校验码(CRC循环冗余校验)
物理层
将二进制比特流转换为物理信号(电脉冲/光信号/电磁波),添加前导码实现时钟同步。
分用过程(接收端)
数据从物理层向应用层逆向解析:
物理层
将模拟信号还原为数字比特流,移除前导码。
数据链路层
- 校验FCS确认帧完整性
- 比对MAC地址决定是否接收
- 剥离帧头得到IP数据包
网络层
- 检查IP头部校验和
- 根据目的IP判断是否本机接收
- 分片数据包重组(若存在)
传输层
- 通过端口号定位目标应用程序
- TCP协议执行顺序重组和丢包重传
- 移除TCP/UDP头部传递应用数据
应用层
特定协议解析(如HTTP响应解析),将有效载荷交付用户程序。
技术价值
- 协议隔离性:各层仅需理解相邻层接口,无需感知其他层实现细节
- 模块化扩展:新协议可在特定层级独立部署(如HTTP/3在应用层升级)
- 错误隔离:物理层误码不会影响传输层连接管理
- 多路复用:单个IP地址可通过不同端口并发处理多种服务