源本科技 | 码上会

网络通信基础

2026/03/04
28
0

网络编程三要素

网络编程的核心在于实现不同设备间程序的数据交互。要成功建立通信,必须明确以下三个基本要素,它们共同构成了网络通信的基石:

  1. IP 地址:网络设备在网络中的唯一标识,相当于“门牌号”,用于定位具体的设备。

  2. 端口号:设备上运行应用程序的唯一标识,相当于“房间号”,用于区分同一设备上的不同服务。

  3. 协议:数据在网络中传输的规则和约定,相当于“语言”,确保双方能正确理解彼此发送的信息。常见的传输层协议包括 TCPUDP


IP 地址

设备的网络身份证

基本概念

IP (Internet Protocol) 即互联网协议地址,是分配给联网设备的逻辑地址。它是互联网通信的基础,确保数据包能准确送达目标主机。目前主流的版本分为 IPv4IPv6

IPv4

  • 定义:互联网协议的第四版,是目前应用最广泛的协议。

  • 结构:使用 32 位 二进制数表示。

  • 格式:通常采用“点分十进制”表示法,将 32 位分为 4 组,每组 8 位,转换为十进制数(0-255),中间用点 . 分隔。

    • 示例192.168.1.1

  • 局限:地址空间有限(约 43 亿个),随着物联网和移动设备的爆发,地址资源已近枯竭。

IPv6

  • 定义:IPv4 的继任者,旨在解决地址耗尽问题并提升网络性能。

  • 核心优势

    • 海量地址空间:采用 128 位 地址,理论地址数量可达21282^{128} 个,号称“可以为地球上的每一粒沙子分配一个 IP”。

    • 简化头部:报文头结构更简单,提高了路由器处理效率。

    • 内置安全:原生支持 IPSec,增强了数据传输的安全性。

    • 无需 NAT:充足的地址使得每台设备都可拥有公网 IP,简化了网络配置。

    • 更好的多播与流控:优化了对多媒体流和物联网的支持。

  • 格式:采用“冒号十六进制”表示法,分为 8 组,每组 4 个十六进制数,中间用冒号 : 分隔。

    • 示例2001:0db8:85a3:0000:0000:8a2e:0370:7334

地址分类与寻址

公网地址 vs 私有地址

  • 公网地址:在全球互联网上唯一,可直接访问。

  • 私有地址 (局域网):仅在内部网络有效,不能直接在互联网上路由,需通过 NAT 转换。

    • 常见范围

      • A 类:10.0.0.0 - 10.255.255.255

      • B 类:172.16.0.0 - 172.31.255.255

      • C 类:192.168.0.0 - 192.168.255.255 (最常用)

传统分类 (A/B/C 类)

类别

首字节范围

默认子网掩码

适用场景

示例网段

A 类

1 - 126

255.0.0.0

大型网络 (主机数多)

10.0.0.0

B 类

128 - 191

255.255.0.0

中型网络

172.16.0.0

C 类

192 - 223

255.255.255.0

小型网络 (局域网)

192.168.1.0

注意127.x.x.x 通常保留为环回地址,其中 127.0.0.1 代表本机。

DNS 与寻路机制

计算机之间通信依赖 IP 地址,但人类更习惯记忆域名(如 www.google.com)。DNS (Domain Name System) 负责将域名解析为 IP 地址。

  • 解析流程

    1. 用户输入域名。

    2. 本地主机向 DNS 服务器发起查询。

    3. DNS 返回对应的 IP 地址。

    4. 主机利用该 IP 地址,结合路由表确定下一跳网关,将数据包发送至互联网。

Java 中的 IP 处理

Java 通过 java.net.InetAddress 类封装 IP 地址和主机名信息,屏蔽了 IPv4 和 IPv6 的底层差异。

常用方法

  • 获取实例

    • InetAddress.getLocalHost():获取本机 IP 对象。

    • InetAddress.getByName(String host):根据域名或 IP 字符串获取对象(可能抛出 UnknownHostException)。

  • 信息获取

    • getHostAddress():返回 IP 字符串(如 "192.168.1.1")。

    • getHostName():返回主机名(若无法解析则返回 IP)。

    • getCanonicalHostName():返回完全限定域名 (FQDN)。

  • 类型判断

    • isLoopbackAddress():是否为回环地址 (127.0.0.1)。

    • isAnyLocalAddress():是否为通配符地址 (0.0.0.0)。

    • isSiteLocalAddress() / isLinkLocalAddress():判断是否为私有 / 链路本地地址(常用于 IPv6)。

    • isMulticastAddress():是否为多播地址。

6. 常用命令行工具

  • ipconfig (Windows) / ifconfig (Linux/Mac):查看本机网络配置及 IP 地址。

  • ping <IP 或域名>:测试网络连通性,基于 ICMP 协议。


端口号

程序的通信窗口

基本概念

端口号是一个 16 位 的二进制整数,取值范围为 0 ~ 65535。它用于标识设备上运行的具体进程(应用程序)。

  • 规则:同一台设备上,不同程序的端口号不能冲突;IP+ 端口组合可唯一标识网络中的一个通信端点。

端口分类

类型

范围

说明

典型应用

系统端口
(知名端口)

0 - 1023

由 IANA 分配,用于标准系统服务,普通用户程序通常无权占用。

HTTP (80)
HTTPS (443)
FTP (21)
SSH (22)
DNS (53)

注册端口

1024 - 49151

供用户应用程序注册使用,避免冲突。开发推荐区间

MySQL (3306)
Tomcat (8080)
Oracle (1521)
Redis (6379)

动态 / 私有端口

49152 - 65535

操作系统临时分配给客户端程序使用,会话结束后释放。

浏览器访问网站时随机分配的源端口

开发建议:自定义服务端程序时,建议选择 1024 - 49151 之间的空闲端口,避免与系统服务冲突。


网络协议与模型

协议概述

通信协议是计算机网络中数据交换的规则集合,涵盖了语法(数据格式)、语义(控制信息)和时序(事件顺序)。它确保了异构系统间的互操作性。

参考模型

虽然 OSI 七层模型 是理论标准,但实际互联网广泛采用的是 TCP/IP 四层模型

OSI 七层模型

TCP/IP 四层模型

对应协议举例

开发者关注点

应用层

应用层

HTTP, FTP, SMTP, DNS

业务逻辑实现,数据格式处理

表示层

(加密、压缩)

会话层

(会话管理)

传输层

传输层

TCP, UDP

选择可靠 (TCP) 还是高效 (UDP) 传输

网络层

网络层

IP, ICMP, ARP

IP 寻址,路由选择 (通常由 OS 处理)

数据链路层

网络接口层

Ethernet, Wi-Fi

物理帧传输,MAC 地址

物理层

比特流传输

网线、光纤、无线电波


核心传输协议

TCP 协议

特点:面向连接、可靠、基于字节流。

核心特性

  • 面向连接:通信前必须建立连接(三次握手),通信后释放连接(四次挥手)。

  • 可靠性:通过序列号、确认应答 (ACK)、超时重传、校验和等机制,保证数据不丢失、不重复、不乱序。

  • 流量控制:利用滑动窗口机制,防止发送方速度过快淹没接收方。

  • 拥塞控制:通过慢启动、拥塞避免等算法,动态调整发送速率以适应网络状况。

  • 全双工:允许数据在两个方向上同时传输。

连接管理机制

  • 三次握手 (建立连接)

    1. SYN:客户端发送同步包,请求建立连接。

    2. SYN+ACK:服务端收到请求,回复确认并同步自己的序号。

    3. ACK:客户端确认服务端的同步,连接建立成功 (ESTABLISHED)。

      目的:确认双方的收发能力正常,同步初始序列号。

  • 四次挥手 (断开连接)

    1. FIN:主动方(如客户端)发送结束包,请求关闭。

    2. ACK:被动方(服务端)确认收到,但可能还有数据未发送完,进入 CLOSE_WAIT

    3. FIN:被动方数据处理完毕,发送结束包。

    4. ACK:主动方确认,进入 TIME_WAIT 状态(等待 2MSL 确保最后 ACK 到达),随后彻底关闭。

      注意:为什么是四次?因为 TCP 是全双工的,关闭方向需要单独确认。

适用场景

对数据完整性要求高的场景:网页浏览 (HTTP/HTTPS)、文件传输 (FTP)、邮件发送 (SMTP)、数据库连接 (MySQL)、远程登录 (SSH)。

UDP 协议

特点:无连接、不可靠、基于数据报、高效。

核心特性

  • 无连接:发送数据前不需要建立连接,直接发送,开销小,延迟低。

  • 不可靠:不保证数据到达,不保证顺序,丢失不重传。

  • 面向报文:保留消息边界,一次发送一个完整的数据包。

  • 支持广播 / 多播:可以向多个目标同时发送数据。

  • 大小限制:单个数据包最大通常为 64KB (受限于 IP 包大小)。

适用场景

对实时性要求高、容忍少量丢包的场景:视频会议、直播流媒体、在线游戏、语音通话 (VoIP)、DNS 查询、物联网传感器数据上报。


TCP 与 UDP

特性

TCP

UDP

连接性

面向连接 (三次握手)

无连接

可靠性

高 (确认、重传、排序)

低 (尽最大努力交付)

传输单位

字节流 (无边界)

数据报 (有边界)

速度

较慢 (头部大,机制复杂)

快 (头部小,无状态)

流量 / 拥塞控制

应用场景

文件传输、Web、邮件

视频流、游戏、实时通讯

Java 类

Socket, ServerSocket

DatagramSocket, DatagramPacket