一,什么是网络?

网络是由若干结点和连接这些结点的链路组成,网络中的结点可以是计算机,交换机、路由器等设备。用通俗大白话讲,网络 = 把好多设备连起来,能互相发数据、传信息的一套系统。

网络设备(结点)有:交换机、路由器、集线器等。

传输介质(链路)有:双绞线、同轴电缆、光纤。

交换机(Switch):用于连接多个结点,从而组建计算机网络。家庭、公司、学校等场景,通常会使用交换机来搭建内部网络(如局域网)。

路由器(Router):能够将两个或多个独立的计算机网络相互连接,从而组成规模更大的计算机网络,这种由多个网络互联而成的系统也被称为互连网(Internetwork)。

下图是一个简单的网络示意图:

1.1互联网

把多个网络连接起来就构成了互联网。 目前最大的互联网就是我们常说的因特网。

互联网(Internet,因特网):是由多个计算机网络通过路由器等设备,按照统一的TCP/IP 协议相互连接而成的、覆盖全球的最大互连网,实现了全球范围内计算机之间的数据通信与资源共享。

图示:

1.2IP地址

IP 地址(Internet Protocol Address):是给连接到互联网上的每一台计算机(或设备)分配的一个唯一的逻辑地址,用来在网络中标识设备的位置,实现数据在不同设备之间的准确传输。

你可以把 IP 地址想象成设备在互联网上的 **“门牌号”**:每台联网设备(电脑、手机、路由器、摄像头等)都有一个专属的 IP 地址。就像快递员要靠地址找到你家,网络数据也要靠 IP 地址找到目标设备。它是逻辑地址,可以变更(比如你换个 WiFi,IP 就变了),和设备的物理 MAC 地址不同。

IP地址的目的:在网络中唯一标识一台主机;路由器根据 IP 地址,为数据包选择从源设备到目标设备的最优传输路径;让数据能准确送达目标设备,实现跨网络的通信。

IP 地址主要分为 IPv4 和 IPv6 两种格式:

IPv4 地址:是 32 位二进制地址,采用点分十进制格式(A.B.C.D),用 . 分隔为 4 个段,每段对应 8 位二进制数,取值范围为 0~255。示例:192.168.31.1

IPv6 地址:是 128 位二进制地址,采用冒分十六进制格式(XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX),用 : 分隔为 8 个段,每段对应 16 位二进制数,用 4 位十六进制数表示。示例:2001:0db8:3c4d:0015:0000:0000:1a2f:1a2b

IP 地址组成:IP 地址由网络号和主机号组成;网络号定网段,主机号定设备。

网络号(前面一段):

作用:标记你属于哪一个局域网 / 网段。

同一个教室、宿舍、公司内网,所有人网络号都一样。

主机号(后面一段):

作用:标记这个网段里具体哪一台设备。

同一内网里,每台设备的主机号独一无二。

子网掩码用来划分哪部分是网络号、哪部分是主机号:掩码里全 1 的位置 → 对应 IP 是网络号

掩码里全 0 的位置 → 对应 IP 是主机号。

例:IP:192.168.1.10 掩码:255.255.255.0

→ 网络号:192.168.1
→ 主机号:10

IP 地址分类:

由于每类地址的开头是固定的,因此每类地址都有自己的范围:

  • A 类: IP 地址范围为 0.0.0.0~127.255.255.255。
  • B 类: IP 地址范围为 128.0.0.0~191.255.255.255。
  • C 类: IP 地址范围为 192.0.0.0~223.255.255.255。
  • D 类和 E 类一般不使用 。

使用命令“ifconfig”可以在 linux 查看自己的 ip 地址。

1.3MAC地址

MAC 地址(物理地址 / 网卡地址):是网卡出厂时固化在硬件里的48 位唯一物理编号,用来在局域网内部标识设备、转发数据。

组成成分:总长:48 位二进制 → 写成12 个十六进制字符;

格式示例:00:50:C2:1F:3A:7B  ,前 6 位:厂商编号(识别网卡厂家),后 6 位:设备唯一序列号(全球独一份)。

MAC示例:使用ifconfig命令。

1.4端口号

端口号:是操作系统给每个网络程序分配的逻辑编号,用来区分同一台主机上不同的网络服务 / 应用,实现数据精准转发到对应软件。

端口号就是应用程序的代号。一台电脑只有一个 IP,但同时开着微信、浏览器、游戏、网盘这些软件靠端口号区分数据该给谁。

那么也就是说我们通过一个ip地址+端口号就可以指定一个主机上的应用程序:ip+port;

实现A主机上的一个进程和B主机上的一个进程实现通信:通过源主机的应用程序:ip+port 和目的主机的应用程序ip+port就可以通讯了。

核心特点
范围:0~65535;工作在:传输层(TCP/UDP);只在本机生效,不跟着外网走。

常用默认端口:

  • 80 → 网页 HTTP
  • 443 → 加密网页 HTTPS
  • 22 → Linux 远程 SSH
  • 3306 → MySQL 数据库
  • 21 → FTP 文件传输

总结:IP 找电脑,端口找软件;数据进门按端口,分给对应程序。

Linux查看所有端口占用:

netstat -tulnp
# 或者新版常用
ss -tulnp

Linux查某个端口有没有开(比如 3306、80、22):

netstat -tulnp | grep 3306

1.5网络协议

网络协议:是网络中所有设备(电脑、手机、路由器、服务器)必须共同遵守的一套规则、标准和约定,用来统一数据的格式、传输顺序、报错处理,保证不同设备之间能听懂彼此、正常通信。

常见协议如下:

  • HTTP:超文本传输协议,用于网页浏览。
  • FTP:文件传输协议,用于在网络中传输文件。
  • TELNET:互联网远程登录服务的标准协议,用于远程控制主机。
  • TCP:传输控制协议(Transmission Control Protocol),是一种面向连接、可靠、基于字节流的传输层通信协议,保证数据可靠送达。
  • UDP:用户数据报协议,是一种无连接、不可靠但高效的传输层协议,适合对速度要求高的场景(如直播、游戏)。
  • IP:网际协议(Internet Protocol),负责网络层寻址与路由,为数据找到目标设备。
  • ICMP:因特网控制报文协议,用于网络诊断与差错控制(如 ping 命令)。
  • ARP:地址解析协议,根据目标 IP 地址获取对应的 MAC 地址,实现局域网内寻址。
  • RARP:逆地址解析协议,根据 MAC 地址获取对应的 IP 地址(现已较少使用)。
  • MySQL 3306:数据库通信协议。

二,网络分层模型

网络分层是将计算机网络的数据传输功能,按逻辑划分为多个独立层级;每层定义固定功能、接口与规则,通过层与层之间交互完成通信,简化设计、方便维护与排错。

通俗理解:

网络分层:把复杂的网络通信,拆成好几层,每层只干自己一件事,互不干扰、分工合作;上层只管调用服务,下层只管干活,改一层不影响其他层。

打比方:寄快递 —— 打包员、分拣员、运输司机、派送员,各干各的,不用懂别人细节。

2.1OSI模型和TCP/IP模型

两个核心分层模型:

  • OSI 七层模型(理论教学用)

物理层→数据链路层→网络层→传输层→会话层→表示层→应用层

  • TCP/IP 四层模型(实际互联网在用)

网络接口层→网际层→传输层→应用层

OSI:是国际标准化组织制定的开放式系统互联七层参考模型,一套理论标准,用来统一全世界网络设备的通信规则、分层分工。

TCP/IP 模型:是互联网实际在用的四层分层模型,由美国国防部制定,把复杂网络通信简化成 4 层,所有上网设备(手机、电脑、路由器)都遵守这套规则,是真实互联网的通用标准。

图示:

OSI模型每层干啥(从上到下)

  • 7 应用层:给用户用(网页、文件、登录)。
  • 6 表示层:加密、转格式、翻译数据。
  • 5 会话层:建立 / 断开通信连接。
  • 4 传输层:TCP/UDP,端口、稳不稳。
  • 3 网络层:IP 地址、路由选路。
  • 2 数据链路层:MAC 地址、局域网转发。
  • 1 物理层:网线、光信号、传 0 和 1。

TCP/IP 模型每层干啥(从上到下)

  • 应用层:给用户提供服务 → HTTP、HTTPS、DNS、FTP。
  • 传输层:管靠谱传输、分端口 → TCP(稳)、UDP(快)。
  • 网际层:管 IP 地址、跨网指路 → IP、ICMP、ARP。
  • 网络接口层:管 MAC、网线、信号 → 网卡、交换机、以太网。

2.2数据链路层

数据链路层,是 TCP/IP、OSI 模型的第二层;在物理传输基础上,把二进制比特流封装成帧,依靠MAC 地址完成局域网内精准转发,纠错、校验,保证相邻设备可靠通信。

数据链路层的核心功能是:通过各类控制协议,将存在差错的物理信道,转换为可可靠传输数据帧的无差错数据链路。

在计算机网络中,物理链路会因各类干扰而不可靠。因此,该层在物理层提供的比特流基础上,通过差错控制机制,将易出错的物理线路改造为可靠的数据链路,为上层提供稳定的物理介质数据传输方法。

子层划分

数据链路层通常分为两个子层:

  • MAC 子层(介质访问控制子层):主要解决共享型网络中多用户对信道的竞争问题,负责完成网络介质的访问控制。

  • LLC 子层(逻辑链路控制子层):主要负责建立和维护网络连接,执行差错校验、流量控制与链路管理。

TCP/IP 体系中的定位

在 TCP/IP 协议体系中,数据链路层的功能由网卡接口的网络驱动程序实现,用于处理数据在物理媒介上的传输。不同物理网络具有不同的电气特性,网络驱动程序会隐藏这些底层细节,为上层协议提供统一的接口。

该层重点关注三个核心问题:封装成帧、透明传输和差错检测。

2.3网络层

网络层(OSI 第 3 层 / TCP/IP 网际层)
负责跨网段寻址、逻辑路由转发,依靠IP 地址,把数据包从源主机,一路转发到不同网络里的目标主机,实现全网通信。

网络层主要实现数据包的路由选择与转发功能。互联网依托多级路由器,将各地主机与局域网相互连通,因此两台通信主机通常无法直连,需经过多个路由器中转。网络层的核心作用,就是筛选中转节点、规划通信路径;同时向下屏蔽复杂的网络拓扑细节,让上层传输层与应用程序感知不到中间转发流程,仿佛双方可直接通信。

网络层的核心协议为IP 协议(网际协议)。IP 协议依据数据包的目的 IP 地址判定转发方式:若无法直接送达目标主机,便匹配合适的下一跳路由器完成转交;该过程逐节点重复执行,直至数据包抵达目的地,传输失败则直接丢弃。由此可见,IP 协议采用逐跳转发的通信机制。

ICMP 协议(网际控制报文协议)是 IP 协议的重要补充,主要用于网络连通性检测与故障诊断。

IP 协议为上层提供无状态、无连接、不可靠的基础传输服务:

  • 无状态:通信双方无需同步传输记录,所有 IP 数据报独立收发、互不关联,无法处理乱序与重复报文;IP 头部标识仅用于数据包分片重组,不保障接收顺序。优势是架构简单、传输高效,无需占用系统资源维护通信状态。
  • 无连接:双方无需长期留存对方通信信息,上层每次发送数据,都必须明确填写目标 IP 地址。
  • 不可靠:IP 协议仅尽最大努力转发数据包,不保障数据必定完整、准确送达接收端,丢包、错包无纠错与重传机制。

IPv4 数据报的头部结构,是网络层 IP 协议的核心数据格式,用来给数据包 “贴标签”,指导路由器如何转发。

图示:

字段 位数 核心作用
版本号 4 位 标识 IP 版本,IPv4 固定为 4
头部长度 4 位 表示 IP 头部有多少个 32 位字(最小值 5,即 20 字节)
服务类型 (TOS) 8 位 标记优先级、延迟、吞吐量等服务质量要求
总长度 16 位 整个 IP 数据报的总字节数(头部 + 数据)
标识 16 位 同一个分片的数据包共用一个标识,用于重组
标志 3 位 控制分片:是否允许分片、是否还有后续分片
片偏移 13 位 标记分片在原数据包中的位置,用于拼接还原
生存时间 (TTL) 8 位 数据包最多能经过的路由器数,每过一个路由器减 1,到 0 就丢弃(防止环路)
协议 8 位 标识上层使用的协议(如 6 = TCP,17 = UDP)
头部校验和 16 位 校验 IP 头部是否在传输中出错
源端 IP 地址 32 位 发送方的 IP 地址
目的端 IP 地址 32 位 接收方的 IP 地址
选项 最多 40 字节 可选扩展功能(如安全、路由记录),一般很少用

1.版本号(Version)- 4 位
作用:标识 IP 协议的版本。
取值:
0100 → IPv4(当前图中版本)
0110 → IPv6
意义:让网络设备知道后续头部的解析规则。

2.头部长度(IHL)- 4 位
作用:表示 IP 头部的总长度,以 4 字节为单位计数。
计算公式:头部长度(字节) = IHL值 × 4
典型值:
5 → 20 字节(最小头部,无选项)
15 → 60 字节(最大头部,选项占满)
意义:明确告诉接收方 “数据部分从哪里开始”。

3.服务类型(TOS)- 8 位
作用:用于 ** 服务质量(QoS)** 控制,指示数据包的传输优先级。
早期定义:
3 位优先级(0-7,数值越大优先级越高)
4 位服务标记(低延迟 D、高吞吐 T、高可靠 R、低代价 C)
1 位保留位
现代演进:被重定义为 ** 区分服务(DiffServ)** 字段,用于更精细的流量分类(如语音 / 视频数据包优先转发)。
意义:让路由器根据业务需求调度数据包。

4.总长度(Total Length)- 16 位
作用:记录整个 IP 数据报(头部 + 数据)的总字节数。
最大值:2^16 - 1 = 65535 字节。
数据长度计算:数据部分长度 = 总长度 - 头部长度
意义:接收方据此判断需要接收多少字节才算一个完整数据报。

5.标识(Identification)- 16 位
作用:IP 分片与重组的核心标识。
规则:同一个原始数据报的所有分片,都共享同一个标识号。
来源:发送方主机为每个数据报分配唯一的 16 位序号。
意义:目的主机收到分片后,根据标识号将它们重新组装成原始数据报。

6.标志(Flags)- 3 位
作用:控制数据包的分片行为。
各位含义:
第 0 位:保留位,必须为 0。
第 1 位(DF, Don't Fragment):
1 → 禁止分片,若数据包超过 MTU,路由器丢弃并返回 ICMP 错误。
0 → 允许分片。
第 2 位(MF, More Fragments):
1 → 这不是最后一个分片,后面还有更多。
0 → 这是最后一个分片。
意义:解决不同链路 MTU(最大传输单元)不一致的问题。

7.片偏移(Fragment Offset)- 13 位
作用:表示当前分片在原始数据报中的位置,以 8 字节为单位。
计算公式:偏移字节数 = 片偏移值 × 8
规则:
第一个分片偏移为 0。
后续分片偏移 = 前面所有分片数据部分总字节数 / 8。
意义:目的主机按偏移顺序重组分片。

8.生存时间(TTL, Time To Live)- 8 位
作用:防止数据包在网络中无限循环。
规则:
每经过一个路由器,TTL 值减 1。
TTL 减到 0 时,路由器丢弃该包,并向源主机发送 ICMP 超时消息。
初始值:操作系统默认设置(如 Linux=64,Windows=128)。
意义:避免路由环路导致网络拥塞。

9.协议(Protocol)- 8 位
作用:标识 IP 数据报携带的数据属于哪一种上层协议,以便交付给对应模块处理。
常见取值:
1 → ICMP(ping 命令使用)
6 → TCP(可靠传输,如 HTTP/HTTPS)
17 → UDP(高效传输,如 DNS / 直播)
41 → IPv6(隧道封装)
意义:实现网络层与传输层的解耦。

10.头部校验和(Header Checksum)- 16 位
作用:仅校验 IP 头部的完整性,不校验数据部分。
计算逻辑:
发送方:将头部所有 16 位字按二进制反码求和,取反得到校验和。
接收方:将头部所有 16 位字(含校验和)按反码求和,结果应为全 1,否则头部损坏。
特点:TTL 字段每跳都会变化,路由器转发时必须重新计算校验和。
意义:快速检测头部在传输中是否发生比特错误。

11.源端 IP 地址(Source IP Address)- 32 位
作用:记录数据包发送方的 IPv4 地址。
格式:点分十进制,如 192.168.1.100。
意义:让接收方知道数据包来源,也是回复的目标地址。

12.目的端 IP 地址(Destination IP Address)- 32 位
作用:记录数据包接收方的 IPv4 地址。
格式:点分十进制,如 223.5.5.5。
意义:指导路由器将数据包转发到最终目的地。

13.选项(Options)- 可变,最多 40 字节
作用:提供扩展功能,属于可选字段,通常不使用。
常见类型:
安全选项:标记数据包的安全级别。
路由记录:记录数据包经过的路由器 IP 地址。
时间戳:记录数据包经过每个路由器的时间。
源路由:由发送方指定数据包的传输路径。
意义:满足特殊网络需求,但会增加头部长度和处理开销。

IPv4 头部就是 IP 数据包的 “快递单”:写清发件人 / 收件人地址、包裹大小、能走几站、用什么快递(上层协议),路由器靠这张 “单子” 把数据一步步送到目的地。

2.4传输层(重点)

传输层是端到端通信层,负责给两台主机里的具体程序(进程)传数据;屏蔽底层网络差异,给应用层提供可靠 / 高效的数据传输服务。

网络层找电脑(IP),传输层找软件(端口)。

传输层为两台主机上的应用程序提供端到端的通信服务。与网络层的逐跳转发不同,传输层仅关注通信的起点与终点,无需关心数据包在中间节点的转发细节。

传输层的核心协议主要有三个:TCP 协议(传输控制协议)、UDP 协议(用户数据报协议)和SCTP 协议(流控制传输协议)。

TCP 协议(传输控制协议)

TCP 协议为应用层提供可靠、面向连接、基于字节流的传输服务:

  • 可靠性保障:通过超时重传、确认应答等机制,确保数据包完整、准确地送达目的端。
  • 连接特性:通信双方必须先建立 TCP 连接,内核会为该连接维护连接状态、读写缓冲区等必要数据结构;通信结束后,需关闭连接以释放内核资源。
  • 基于流:TCP 传输的数据是无边界的字节流,发送端可以逐字节写入数据,接收端也可逐字节读取,数据像水流一样持续在两端间传输。

TCP 协议的报文头部结构,是传输层 TCP 协议为数据段添加的 “控制头”,用来实现可靠传输、连接管理和流量控制。

图示:

字段 位数 核心功能
源端口号 16 位 标识发送方应用程序的端口
目的端口号 16 位 标识接收方应用程序的端口
序号 (Sequence Number) 32 位 标记本报文段发送数据的起始字节序号,用于排序和去重
确认号 (Acknowledgment Number) 32 位 期望收到的下一个字节序号,用于确认已收到数据
头部长度 4 位 表示 TCP 头部有多少个 32 位字(最小值 5,即 20 字节)
保留 6 位 留作未来扩展,目前为 0
控制位 (6 个标志位) 6 位 - URG:紧急指针有效- ACK:确认号有效- PSH:立即推送数据给应用层- RST:重置连接- SYN:同步序号,用于建立连接- FIN:释放连接
窗口大小 16 位 告知对方本端可接收的字节数,用于流量控制
校验和 16 位 校验 TCP 头部 + 数据在传输中是否出错
紧急指针 16 位 指向紧急数据的末尾,仅当 URG=1 时有效
选项 最多 40 字节 扩展功能,如最大段大小 MSS、窗口扩大、时间戳等

一句话总结:TCP 头部就是可靠传输的 “控制面板”:

  • 用端口号找到对应进程;
  • 用序号 / 确认号保证数据不乱序、不丢失;
  • 用标志位管理连接(三次握手、四次挥手);
  • 用窗口大小控制流量,避免拥塞。

UDP 协议(用户数据报协议)

UDP 协议(用户数据报协议)与 TCP 协议特性完全相反,它为应用层提供不可靠、无连接、基于数据报的传输服务:

  • 不可靠:UDP 无法保证数据完整、准确地送达目的端。若数据在传输途中丢失,或接收端校验发现错误并丢弃,UDP 仅会简单通知应用层发送失败;若需实现可靠传输,必须由应用层自行处理确认应答、超时重传等逻辑。
  • 无连接:通信双方无需维持持久连接,应用程序每次发送数据时,都必须显式指定接收端地址。
  • 基于数据报:与 TCP 的字节流服务不同,每个 UDP 数据报都有固定长度,接收端必须以该长度为最小单位一次性读取全部内容,否则数据会被截断。

SCTP 协议(流控制传输协议)

SCTP(Stream Control Transmission Protocol)是一种面向连接、可靠的传输层协议,设计初衷是为了在 IP 网络上高效传输信令类业务(如电话网的七号信令),同时融合了 TCP 的可靠性与 UDP 的报文边界特性。

SCTP 是 “增强版可靠传输协议”:既保留了 TCP 的可靠性,又吸收了 UDP 的报文边界优势,还加入了多宿主、多流等特性,特别适合对可靠性、可用性和实时性要求高的场景。

特性 TCP UDP SCTP
连接性 面向连接 无连接 面向连接
可靠性 可靠 不可靠 可靠
数据边界 无边界(字节流) 有边界(数据报) 有边界(报文)
多宿主 不支持 不支持 支持
多流 不支持 不支持 支持
抗攻击 弱(易受 SYN Flood) 无连接 强(4 次握手)

2.5应用层

应用层是 TCP/IP 模型的最顶层,直接面向用户与应用软件;把数据交给下层传输,为各类网络应用提供接口、规则与服务,是用户能直接感知、使用的一层。

物理层、链路层、网络层、传输层都是底层干活;应用层是给人看、给软件用的最后一层。

核心作用:

  • 提供各类网络服务:浏览网页、发邮件、传文件、域名解析;
  • 规定应用软件之间的数据格式、交互规则;
  • 把用户操作,转换成能发出去的网络数据。

应用层负责处理应用程序的逻辑。应用层:最上层,面向用户,管业务、管格式、管软件交互,所有上网功能都靠它。

2.6为什么要对网络进行分层?

  • 各层功能独立:每层只负责单一职责,上层无需关心下层实现细节,下层也不依赖上层业务逻辑。
  • 灵活性强:可单独替换或升级某一层的协议 / 技术,不会影响整体架构。
  • 结构可分割:将复杂的网络通信拆解为多个简单模块,便于分工开发与调试。
  • 易于实现与维护:分层后逻辑清晰,降低了系统开发、排查问题和迭代更新的难度。
  • 促进标准化:统一的分层模型为不同厂商、设备和协议提供了通用接口规范,保障了互联互通。

三,网络应用程序通信流程

网络应用程序通信流程

步骤 1:域名解析(DNS 解析)

客户端输入域名(如www.baidu.com),不知道服务器 IP:

  1. 客户端向DNS 服务器发送请求:查域名对应的 IP
  2. DNS 递归查询 / 迭代查询,返回服务器真实公网 IP
  3. 客户端缓存 IP,后续通信直接使用

简化记:域名 → 翻译成 IP 地址

步骤 2:建立 TCP 连接(三次握手,可靠传输)

基于传输层 TCP 协议(APP、网页大多用 TCP):

  1. 客户端→服务端:SYN(请求连接)
  2. 服务端→客户端:SYN+ACK(同意连接,确认收到)
  3. 客户端→服务端:ACK(确认收到同意,连接建立)
    端口打通(如服务端 80/443、后端 8080),数据通道就绪

UDP 通信(直播、游戏)无三次握手,直接发数据,快但不可靠

步骤 3:HTTPS 加密握手(可选,现在主流)

如果是 HTTPS:

  1. 客户端获取服务器SSL/TLS 证书
  2. 验证证书合法性(防伪造)
  3. 双方协商加密算法、生成会话密钥
  4. 后续所有应用数据加密传输,防窃听、篡改

步骤 4:应用层数据请求(客户端发业务数据)

客户端按应用层协议封装请求:

  • HTTP:请求方法 (GET/POST)、URL、请求头、Cookie、参数、Body
  • 自定义 TCP 应用:私有协议报文(头 + 体 + 校验位)
    数据经下层封装(加 TCP 头、IP 头),通过路由转发到服务器

步骤 5:服务端接收 & 处理业务逻辑

  1. 服务器网卡接收数据包,逐层解包:剥 IP 头→剥 TCP 头→拿到应用数据
  2. 后端程序(Java/C++/Python)监听端口,拿到请求
  3. 执行业务逻辑:查数据库 (MySQL)、操作文件、调用接口、计算数据
  4. 组装响应数据(JSON/HTML/ 二进制报文)

步骤 6:服务端返回响应数据

  1. 响应数据再次封装 TCP/IP 报文
  2. 路由转发回客户端
  3. 客户端解包,拿到业务数据

步骤 7:断开 TCP 连接(四次挥手)

数据传输完毕,释放连接(节省资源):

  1. 客户端发 FIN:我不发数据了
  2. 服务端回 ACK:收到,我还有数据发完
  3. 服务端发 FIN:我也发完了
  4. 客户端回 ACK:确认,连接彻底断开

总结:

域名 DNS 转 IP → TCP 三次握手建连接 → HTTPS 加密 → 客户端发请求 → 服务端处理 + 查库 → 返回数据 → 四次挥手断连接

思考:

1.三次握手为什么不能两次?

防止失效的连接请求报文突然传到服务端,导致服务端建立无效连接、浪费资源。两次握手只保证单向可靠,三次才能双向确认。

2.HTTP 和 TCP 区别?

TCP 是传输层,负责建连接、可靠传数据;HTTP 是应用层,定义业务数据格式(请求 / 响应规则),HTTP 基于 TCP。

3.为什么四次挥手?

TCP 是全双工,两边都要单独关闭发送通道;服务端可能还有数据要回发,不能直接一步断连,需要分步确认。

四,tcp服务器客户端编程流程

TCP 是面向连接、可靠传输;服务端:被动等待连接;客户端:主动发起连接。

4.1服务端流程

(1)socket () 创建套接字

申请一个网络通信文件描述符,指定 IPv4 + TCP 流式通信。

(2)bind () 绑定 IP + 端口

把当前程序固定在某个 IP 和端口上,客户端才能精准连进来。

(3)listen () 开启监听

设置等待连接队列,正式变成 “等待别人连我的服务器”。

(4)accept () 阻塞等待客户端接入

没客户端来时卡住;有人连接,就返回新的通信套接字,专门和这个客户端收发数据。
(内核自动完成三次握手)

(5)recv () /send () 收发数据

用新套接字读客户端消息、回发响应。

(6)close () 关闭套接字

通信结束,释放文件描述符、释放端口资源。

服务端口诀:创 socket→绑端口→监听→接连接→收发→关闭

4.2客户端流程

(1)socket () 创建套接字

和服务端一样,先拿到通信入口。

(2)connect () 主动连接服务器

填服务器 IP + 端口,内核自动发起TCP 三次握手,建立通路。

(3)send () /recv () 收发数据

发请求、收服务器回复。

(4)close () 关闭连接

结束通信,断开链路。

客户端口诀:创 socket→连服务→收发→关闭

服务端:socket → bind → listen → accept (阻塞) → 读写 → close

客户端:socket → connect → 读写 → close

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐