网络编程的核心在于实现不同设备间程序的数据交互。要成功建立通信,必须明确以下三个基本要素,它们共同构成了网络通信的基石:
IP 地址:网络设备在网络中的唯一标识,相当于“门牌号”,用于定位具体的设备。
端口号:设备上运行应用程序的唯一标识,相当于“房间号”,用于区分同一设备上的不同服务。
协议:数据在网络中传输的规则和约定,相当于“语言”,确保双方能正确理解彼此发送的信息。常见的传输层协议包括 TCP 和 UDP。

设备的网络身份证
IP (Internet Protocol) 即互联网协议地址,是分配给联网设备的逻辑地址。它是互联网通信的基础,确保数据包能准确送达目标主机。目前主流的版本分为 IPv4 和 IPv6。
定义:互联网协议的第四版,是目前应用最广泛的协议。
结构:使用 32 位 二进制数表示。
格式:通常采用“点分十进制”表示法,将 32 位分为 4 组,每组 8 位,转换为十进制数(0-255),中间用点 . 分隔。
示例:192.168.1.1
局限:地址空间有限(约 43 亿个),随着物联网和移动设备的爆发,地址资源已近枯竭。

定义:IPv4 的继任者,旨在解决地址耗尽问题并提升网络性能。
核心优势:
海量地址空间:采用 128 位 地址,理论地址数量可达 个,号称“可以为地球上的每一粒沙子分配一个 IP”。
简化头部:报文头结构更简单,提高了路由器处理效率。
内置安全:原生支持 IPSec,增强了数据传输的安全性。
无需 NAT:充足的地址使得每台设备都可拥有公网 IP,简化了网络配置。
更好的多播与流控:优化了对多媒体流和物联网的支持。
格式:采用“冒号十六进制”表示法,分为 8 组,每组 4 个十六进制数,中间用冒号 : 分隔。
示例:2001:0db8:85a3:0000:0000:8a2e:0370:7334

公网地址:在全球互联网上唯一,可直接访问。
私有地址 (局域网):仅在内部网络有效,不能直接在互联网上路由,需通过 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 (最常用)
注意:
127.x.x.x通常保留为环回地址,其中127.0.0.1代表本机。
计算机之间通信依赖 IP 地址,但人类更习惯记忆域名(如 www.google.com)。DNS (Domain Name System) 负责将域名解析为 IP 地址。
解析流程:
用户输入域名。
本地主机向 DNS 服务器发起查询。
DNS 返回对应的 IP 地址。
主机利用该 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():是否为多播地址。
ipconfig (Windows) / ifconfig (Linux/Mac):查看本机网络配置及 IP 地址。
ping <IP 或域名>:测试网络连通性,基于 ICMP 协议。
程序的通信窗口
端口号是一个 16 位 的二进制整数,取值范围为 0 ~ 65535。它用于标识设备上运行的具体进程(应用程序)。
规则:同一台设备上,不同程序的端口号不能冲突;IP+ 端口组合可唯一标识网络中的一个通信端点。
开发建议:自定义服务端程序时,建议选择 1024 - 49151 之间的空闲端口,避免与系统服务冲突。
通信协议是计算机网络中数据交换的规则集合,涵盖了语法(数据格式)、语义(控制信息)和时序(事件顺序)。它确保了异构系统间的互操作性。
虽然 OSI 七层模型 是理论标准,但实际互联网广泛采用的是 TCP/IP 四层模型。
特点:面向连接、可靠、基于字节流。
面向连接:通信前必须建立连接(三次握手),通信后释放连接(四次挥手)。
可靠性:通过序列号、确认应答 (ACK)、超时重传、校验和等机制,保证数据不丢失、不重复、不乱序。
流量控制:利用滑动窗口机制,防止发送方速度过快淹没接收方。
拥塞控制:通过慢启动、拥塞避免等算法,动态调整发送速率以适应网络状况。
全双工:允许数据在两个方向上同时传输。
三次握手 (建立连接):
SYN:客户端发送同步包,请求建立连接。
SYN+ACK:服务端收到请求,回复确认并同步自己的序号。
ACK:客户端确认服务端的同步,连接建立成功 (ESTABLISHED)。
目的:确认双方的收发能力正常,同步初始序列号。

四次挥手 (断开连接):
FIN:主动方(如客户端)发送结束包,请求关闭。
ACK:被动方(服务端)确认收到,但可能还有数据未发送完,进入 CLOSE_WAIT。
FIN:被动方数据处理完毕,发送结束包。
ACK:主动方确认,进入 TIME_WAIT 状态(等待 2MSL 确保最后 ACK 到达),随后彻底关闭。
注意:为什么是四次?因为 TCP 是全双工的,关闭方向需要单独确认。

对数据完整性要求高的场景:网页浏览 (HTTP/HTTPS)、文件传输 (FTP)、邮件发送 (SMTP)、数据库连接 (MySQL)、远程登录 (SSH)。
特点:无连接、不可靠、基于数据报、高效。
无连接:发送数据前不需要建立连接,直接发送,开销小,延迟低。
不可靠:不保证数据到达,不保证顺序,丢失不重传。
面向报文:保留消息边界,一次发送一个完整的数据包。
支持广播 / 多播:可以向多个目标同时发送数据。
大小限制:单个数据包最大通常为 64KB (受限于 IP 包大小)。
对实时性要求高、容忍少量丢包的场景:视频会议、直播流媒体、在线游戏、语音通话 (VoIP)、DNS 查询、物联网传感器数据上报。