网络速通之网络通信

发展史

在互联网尚未普及的年代,每台计算机都是彼此独立的孤岛,各自拥有独立的终端,数据与资源难以共享。这一看似遥远的场景,恰恰是理解本技术价值的最佳起点------它正是为解决这类"连接与协作"难题而生,如今已渗透到生产、生活与科研的方方面面,成为驱动效率提升和业务创新的关键基础设施。例如,在大型电商平台的秒杀活动中,正是依靠该技术对海量并发请求进行高效调度与协同处理,才保证了系统在流量洪峰下依然稳定运行,让数亿用户能够顺畅完成下单。

因此,程序员在完成业务开发时也只能采用串行方式,效率十分低下。

然而,随着网络的出现,计算机之间的联系日益频繁,彼此之间可以互相通信、共享软件和数据,实现了网络互连

借助网络进行数据传输与资源共享,便构成了网络通信

根据网络的大小不同分为了 局域⽹LAN 和 ⼴域⽹WAN

两者的主要区别如下表所示:

对比维度 局域网(LAN) 广域网(WAN)
覆盖范围 较小,通常覆盖一栋楼、一个园区或一个办公室 较大,可覆盖一个城市、一个国家甚至全球
传输速率 较高,通常可达千兆甚至万兆 相对较低,受距离和运营商线路限制
传输延迟 较低,响应速度快 较高,跨地域传输存在明显时延
所有权 通常由个人或组织自行搭建和维护 一般由电信运营商或大型机构建设运营
连接方式 通过交换机、路由器等设备在本地组网 借助光纤、专线、卫星等远程互联
典型应用 企业内部办公、家庭网络、校园网 跨地区业务互联、互联网骨干、远程接入

局域⽹LAN 的主要连接方式 : 1)基于⽹线直连

2)基于集线器组建

3)基于交换机组建

4)基于交换机和路由器组建

⼴域⽹WAN 则是通过 路由器连接到多个局域⽹

网络通信

前面所提及的计算机之间 是通过 网络 建立连接传输数据 那在⽹络中 是如何识别计算机 该如何把正确的数据传输到正确的计算机中呢

IP地址

简单说,IP地址⽤于定位主 机的⽹络地址。

IP地址 址主要⽤于标识⽹络主机、其他⽹络设备(如路由器)的⽹络地址

就像身份证一样的存在

格式

IP地址由32位二进制数组成,通常采用点分十进制表示,即把32位二进制数分成4组,每组8位,再转换为十进制数,用英文句点分隔。例如:

text 复制代码
192.168.1.1

其中,每组数值的取值范围为0到255。这种表示方式便于记忆和书写,也是IPv4地址的标准格式。

端口号

IP地址用于定位主机,但一台主机上往往运行着多个应用程序。为了把数据准确交付给对应的程序,还需要借助端口号 来区分。端口号是16位整数,取值范围为0到65535,其中0到1023为知名端口(如HTTP用80、HTTPS用443)。可以这样理解:IP地址相当于门牌号 ,端口号相当于房间号,两者配合才能把数据准确送达目标程序。

格式

端口号是一个16位的二进制整数,取值范围为0到65535,通常用十进制表示。例如,HTTP服务使用80端口,HTTPS服务使用443端口,FTP服务使用21端口。书写时端口号一般跟在IP地址之后,用英文冒号分隔,例如:

text 复制代码
192.168.1.1:8080

其中,192.168.1.1为主机IP地址,8080为端口号,两者配合即可精确定位到目标主机上的具体应用程序。

协议

知道了如何传输的方式 但是世界之大 人人都有自己的表达 所以传输格式需要一定的规范

协议的目的就是 为在⽹络上传输的数据包的格式。

五元组

五元组是网络通信中用于唯一标识一条连接的五项信息,通常包括:源IP地址、源端口号、目的IP地址、目的端口号以及传输层协议(如TCP或UDP)。

例如,一次HTTP请求的五元组可以表示为:

text 复制代码
源IP: 192.168.1.10  源端口: 5000
目的IP: 93.184.216.34  目的端口: 80
协议: TCP

通过这五项信息,网络设备就能在成千上万的连接中准确区分并定位到某一条具体的数据流,这也是防火墙、负载均衡等设备进行流量识别和管控的基础。

在本地的终端也可以查看

常见的网络协议包括:

  • HTTP/HTTPS:用于网页浏览,HTTPS 在 HTTP 基础上增加了加密传输,保障数据安全。
  • FTP:用于文件的上传与下载。
  • TCP/UDP:负责数据的可靠或快速传输,TCP 保证数据不丢失、不重复,UDP 则更注重传输速度。
  • IP:负责在网络中为数据包寻址和路由,把数据准确送达目标主机。

可以这样理解:IP 地址负责找到目标主机,端口号负责找到主机上的具体程序,而协议则规定了双方如何"对话",三者配合才能完成一次完整的网络通信。

简单来说,网络协议就是通信双方共同遵守的规则和约定,它规定了数据在网络上传输时的格式、顺序以及收发双方如何进行交互。只有遵循同一套协议,不同厂商、不同系统的设备之间才能正确识别并交换数据。

协议分层

网络通信非常复杂,如果让所有功能都挤在一起实现,会变得难以设计、调试和维护。因此,网络协议采用分层的方式组织:每一层只负责一类相对独立的功能,层与层之间通过清晰的接口协作,上层调用下层、下层为上层服务。这样既降低了复杂度,也便于各层独立升级和替换。

目前最常用的分层模型有两种:

  • OSI 七层模型 :应用层、表示层、会话层、传输层、网络层、数据链路层、物理层,是理论上的标准参考模型。
  • TCP/IP 四层模型 :应用层、传输层、网络层、网络接口层(数据链路层 + 物理层),是互联网实际使用的模型

以 TCP/IP 模型为例,各层的主要作用如下:

层次 主要作用 典型协议
应用层 面向用户,提供具体的网络应用服务 HTTP、FTP、DNS
传输层 负责端到端的可靠或快速传输,用端口号区分应用 TCP、UDP
网络层 负责寻址和路由,用 IP 地址定位主机 IP、ICMP
网络接口层 负责在物理链路上传输数据帧 以太网、Wi-Fi

可以这样理解:应用层 负责"说什么",传输层 负责"怎么可靠地送到",网络层 负责"送到哪台主机",网络接口层负责"在线上真正传出去"。每一层各司其职,层层配合,才构成了完整的网络通信。

在传输层中,最核心 的两个协议就是 TCPUDP,它们负责把数据从源主机可靠或快速地送到目的主机上的具体程序。

TCP(传输控制协议) 是面向连接的、可靠的传输协议。它在通信前需要先通过**"三次握手**"建立连接,传输过程中会对数据进行确认、重传和排序,保证数据不丢失、不重复、按序到达,因此适合对数据完整性要求高的场景,如网页浏览、文件传输、邮件收发等。

三次握手

TCP 建立连接的过程被称为三次握手,它通过交换三个报文段来确认通信双方的收发能力都正常,从而建立一条可靠的连接。整个过程如下:

第一步(SYN):客户端主动向服务器发送一个 SYN(同步序列号)报文,其中携带一个初始序列号(如 seq=x),表示"我想和你建立连接"。此时客户端进入 SYN_SENT 状态。

第二步(SYN-ACK):服务器收到 SYN 报文后,如果同意建立连接,会回复一个 SYN-ACK 报文,其中既包含对客户端 SYN 的确认(ack=x+1),也携带服务器自己的初始序列号(seq=y),表示"我收到了你的请求,也同意建立连接"。此时服务器进入 SYN_RCVD 状态。

第三步(ACK):客户端收到 SYN-ACK 报文后,再回复一个 ACK 确认报文(ack=y+1),表示"我收到了你的确认"。此时双方都进入 ESTABLISHED 状态,连接正式建立,可以开始传输数据。

三次握手的时序可以用下面的图来表示:

sequenceDiagram participant C as 客户端 participant S as 服务器 C->>S: SYN (seq=x) S-->>C: SYN-ACK (seq=y, ack=x+1) C->>S: ACK (ack=y+1) Note over C,S: 连接建立,开始传输数据

可以这样理解:三次握手就像两个人打电话前的确认------先问"你在吗",对方答"我在,你听得见吗",再回一句"听得见",双方确认无误后才开始正式通话。之所以需要三次而不是两次,是为了确保双方的发送和接收能力都正常,避免因网络延迟导致的历史报文被误认为是新连接。

四次挥手

与建立连接时的三次握手相对应,TCP 在断开连接时需要通过四次挥手来释放连接。由于 TCP 连接是全双工的,双方都可以独立地发送和接收数据,因此每一方都需要单独关闭自己的发送通道,整个过程共交换四个报文段。具体过程如下:

第一步(FIN):主动关闭方(假设为客户端)发送一个 FIN(结束)报文,表示"我的数据已经发送完毕,我想关闭连接"。此时客户端进入 FIN_WAIT_1 状态。

第二步(ACK):被动关闭方(服务器)收到 FIN 报文后,回复一个 ACK 确认报文,表示"我收到了你的关闭请求"。此时服务器进入 CLOSE_WAIT 状态,客户端收到确认后进入 FIN_WAIT_2 状态。需要注意的是,此时服务器可能还有数据要发送,因此连接并未完全关闭。

第三步(FIN):当服务器也完成数据发送后,会向客户端发送一个 FIN 报文,表示"我的数据也发送完毕,可以关闭连接了"。此时服务器进入 LAST_ACK 状态。

第四步(ACK):客户端收到服务器的 FIN 报文后,回复一个 ACK 确认报文,表示"我收到了你的关闭请求"。随后客户端进入 TIME_WAIT 状态,等待一段时间后关闭;服务器收到确认后进入 CLOSED 状态,连接正式释放。

四次挥手的时序可以用下面的图来表示:

sequenceDiagram participant C as 客户端 participant S as 服务器 C->>S: FIN (seq=u) S-->>C: ACK (ack=u+1) S-->>C: FIN (seq=v) C->>S: ACK (ack=v+1) Note over C,S: 连接关闭,资源释放

可以这样理解:四次挥手就像两个人结束通话前的告别------先由一方说"我说完了",对方回应"收到",等对方也说完"我也说完了",再回一句"收到",双方确认无误后才挂断电话。之所以需要四次而不是三次,是因为 TCP 连接是全双工的,双方需要各自独立地关闭自己的发送方向,确保双方的数据都完整传输完毕后才真正释放连接。

**UDP(用户数据报协议)**则是无连接的、不可靠的传输协议。它不建立连接,也不做确认和重传,直接把数据报发出去,因此开销小、延迟低、传输速度快,适合对实时性要求高、可以容忍少量丢失的场景,如视频直播、语音通话、在线游戏等。

两者的主要区别如下表所示:

对比维度 TCP UDP
连接方式 面向连接,需先建立连接 无连接,直接发送数据
可靠性 可靠,保证不丢失、不重复、按序到达 不可靠,不保证送达和顺序
传输速度 较慢,有确认和重传开销 较快,开销小、延迟低
数据边界 字节流,无边界 数据报,有边界
典型应用 HTTP、FTP、邮件 视频直播、语音通话、DNS

可以这样理解:TCP 像"挂号信",虽然慢一些,但能确保对方收到且内容完整;UDP 像"平信",寄出即走、速度快,但不保证一定送达。实际使用中,需要根据业务对可靠性和实时性的要求来选择。

相关推荐
ao-weilai1 小时前
Linux网络编程:网络知识基础
linux·网络·php
浅念-1 小时前
C++ Protobuf 入门实战:基于通讯录项目吃透proto3语法与序列化
linux·服务器·网络·c++·protobuf·proto·proto3
2401_868534782 小时前
网络环境规划核心考点全梳理
网络·设计模式
M158227690552 小时前
ModbusTCP 转 Profinet 网关:上位机控制 PN 伺服方案
服务器·网络·tcp/ip
宵时待雨2 小时前
linux笔记归纳18:传输层协议TCP
linux·网络·笔记·网络协议·tcp/ip
captain3763 小时前
▲网络原理(1)-UDP
网络·网络协议·tcp/ip
zbtlink3 小时前
家用全屋WiFi技术选型思考:吸顶AP、面板AP与路由器的参数对比
网络·智能路由器
开开心心就好4 小时前
清理此电脑网盘图标工具,开源免费好用
网络·网络协议·tcp/ip·智能手机·电脑·scala·erlang