网络通信核心知识全解析:模型、协议与 TCP 机制

网络通信核心知识全解析:模型、协议与 TCP 机制

一、网络七层模型(OSI/RM)

网络七层模型(OSI/RM,Open Systems Interconnection Reference Model,开放式系统互联参考模型)是国际标准化组织(ISO)制定的网络通信分层规范,目的是将复杂的网络通信拆解为独立、标准化的七层功能模块,每层负责特定的通信任务,层与层之间通过接口交互,降低整体复杂度,同时保证不同厂商的设备 / 软件能互联互通。

层级 名称 核心功能 关键协议 / 技术 Java 的相关内容
第 7 层 应用层 为应用程序提供网络服务(直接面向用户 / 应用) [HTTP](#层级 名称 核心功能 关键协议 / 技术 Java 的相关内容 第 7 层 应用层 为应用程序提供网络服务(直接面向用户 / 应用) HTTP / HTTPS、FTP、SMTP、DNS、RPC、WebSocket 高频使用(SpringMVC、OkHttp、Dubbo 等均基于此层协议) 第 6 层 表示层 数据格式转换、加密 / 解密、压缩 / 解压缩(统一通信双方的数据格式) SSL/TLS、JPEG、JSON、Protobuf、Hessian 序列化 / 反序列化(Dubbo/gRPC 的核心)、HTTPS 加密 第 5 层 会话层 建立、管理、终止 “会话”(通信双方的连接上下文) RPC、NetBIOS、Socket 会话管理 Socket 连接的会话维护、Session/Cookie(HTTP 会话) 第 4 层 传输层 端到端(进程到进程)的通信,负责可靠性、流量控制 TCP(可靠)、UDP(不可靠)、端口号 Java Socket 编程核心(Socket/ServerSocket、DatagramSocket) 第 3 层 网络层 跨网络的路由选择(主机到主机),IP 地址寻址 IP(IPv4/IPv6)、ICMP、ARP、路由协议 InetAddress 类(IP 解析)、网关 / 子网配置 第 2 层 数据链路层 同一局域网内的帧传输,MAC 地址寻址、差错检测 以太网、MAC、PPP、VLAN Java 极少直接操作(由操作系统 / 网卡处理) 第 1 层 物理层 物理介质上的二进制信号传输(电信号 / 光信号) 网线、光纤、无线射频、波特率 完全透明(Java 无相关 API)) / HTTPS、FTP、SMTP、DNS、RPC、WebSocket 高频使用(SpringMVC、OkHttp、Dubbo 等均基于此层协议)
第 6 层 表示层 数据格式转换、加密 / 解密、压缩 / 解压缩(统一通信双方的数据格式) SSL/TLS、JPEG、JSON、Protobuf、Hessian 序列化 / 反序列化(Dubbo/gRPC 的核心)、HTTPS 加密
第 5 层 会话层 建立、管理、终止 "会话"(通信双方的连接上下文) RPC、NetBIOS、Socket 会话管理 Socket 连接的会话维护、Session/Cookie(HTTP 会话)
第 4 层 传输层 端到端(进程到进程)的通信,负责可靠性、流量控制 TCP(可靠)、UDP(不可靠)、端口号 Java Socket 编程核心(Socket/ServerSocket、DatagramSocket)
第 3 层 网络层 跨网络的路由选择(主机到主机),IP 地址寻址 IP(IPv4/IPv6)、ICMP、ARP、路由协议 InetAddress 类(IP 解析)、网关 / 子网配置
第 2 层 数据链路层 同一局域网内的帧传输,MAC 地址寻址、差错检测 以太网、MAC、PPP、VLAN Java 极少直接操作(由操作系统 / 网卡处理)
第 1 层 物理层 物理介质上的二进制信号传输(电信号 / 光信号) 网线、光纤、无线射频、波特率 完全透明(Java 无相关 API)

简单讲个实例:

"你在浏览器输入网址→看到百度首页" 为例,拆解七层模型的完整工作流程:

  1. 应用层(第 7 层):

    浏览器发起 HTTP 请求,封装请求行(GET / HTTP/1.1)、请求头(Host: www.baidu.com)等数据,目标是 "获取百度首页的 HTML 内容"。

  2. 表示层(第 6 层):

    浏览器对 HTTP 请求数据进行编码(比如 UTF-8),如果是 HTTPS 则会先对数据加密(SSL/TLS)。

  3. 会话层(第 5 层):

    建立浏览器与百度服务器的会话,记录 "连接 ID",确保后续的响应能对应到这次请求;如果请求中断,支持断点续传。

  4. 传输层(第 4 层):

    选择 TCP 协议,分配客户端端口(比如54321),目标端口是80(HTTP)/443

    (HTTPS);通过三次握手建立可靠连接,保证 HTTP 数据按顺序、无丢失传输。

  5. 网络层(第 3 层):

    解析www.baidu.com的域名,得到 IP 地址(比如180.101.50.188);路由器根据 IP 地址选择最优路径,将 TCP 数据包从你的电脑发送到百度服务器的网段。

  6. 数据链路层(第 2 层):

    将 IP 数据包封装成以太网帧,用你的网卡 MAC 地址和路由器的 MAC 地址作为源 / 目标地址,在局域网内传输;同时检测帧是否损坏,损坏则丢弃重传。

  7. 物理层(第 1 层):

    将以太网帧转换成电信号(网线)或射频信号(WiFi),通过物理介质传输到路由器,再逐级转发到百度服务器。

各层解读

1. 物理层(Layer 1)

最底层,只关心 "信号怎么传"(如电压、频率、接口类型),不关心数据含义。

对 Java 开发无感知:比如用网线还是 WiFi 连接服务器,Java 代码无需处理。

2. 数据链路层(Layer 2)

把物理层的二进制信号封装成 "帧",通过 MAC 地址定位局域网内的设备,同时检测帧的传输错误(但不纠正)。

核心:MAC 地址(网卡唯一标识)、以太网协议。

Java 关联:完全由操作系统 / 网卡驱动处理,代码中无法直接操作 MAC 地址(除非通过 JNI 调用底层)。

3. 网络层(Layer 3)

解决 "跨网络通信" 问题:通过 IP 地址找到目标主机(比如从北京的主机访问上海的服务器),通过路由协议选择最优路径。

核心:IP 地址(逻辑地址)、路由、子网掩码。

Java 关联:InetAddress类解析 IP / 域名(如InetAddress.getByName("www.baidu.com")),但不涉及路由逻辑(由操作系统 / 路由器处理)。

4. 传输层(Layer 4)

网络层只到 "主机",传输层精准到 "进程":通过端口号区分主机上的不同应用,同时保证数据传输的可靠性(TCP)或高效性(UDP)。

核心:TCP(三次握手、四次挥手、重传)、UDP(无连接、高速)、端口号(0-65535,知名端口如 80/443/8080)。

Java 关联:Socket 编程的核心层,Socket/ServerSocket(TCP)、DatagramSocket(UDP)均直接操作此层。

5. 会话层(Layer 5)

管理通信双方的 "会话生命周期":建立会话、维护会话(如心跳检测)、终止会话,同时处理会话的同步(比如断点续传的位置标记)。

Java 关联:

  • Socket 连接的 "保活"(SO_KEEPALIVE选项)本质是会话层逻辑;
  • HTTP 的 Session/Cookie、WebSocket 的长连接会话均基于此层思想。
6. 表示层(Layer 6)

解决 "数据格式兼容" 问题:将应用层的数据转换为网络传输的通用格式,同时处理加密 / 解密、压缩 / 解压缩。

核心:序列化(对象→字节流)、反序列化(字节流→对象)、加密(SSL/TLS)。

Java 关联:

  • Dubbo/gRPC 的序列化(Protobuf/Hessian/JSON);
  • HTTPS 的 SSL/TLS 加密(Java 通过KeyStore管理证书);
  • 文件传输的压缩(如 GZIP)。
7. 应用层(Layer 7)

直接面向用户 / 应用程序,提供具体的网络服务(比如浏览网页、发邮件、调用远程接口)。

核心:各类应用协议(HTTP/HTTPS、FTP、SMTP、RPC)。

Java 关联:开发中接触最多的层,SpringMVC(HTTP)、Dubbo(RPC)、OkHttp(HTTP)、WebSocket 均基于此层协议。

为了便于理解与记忆,简单打个比方

我们把 "客户端发送数据到服务端" 的过程,比作 "你(客户端)给朋友(服务端)寄一箱特产" 的快递流程,七层模型的每一层对应快递的一个环节:

OSI 七层(从下到上) 对应快递环节 核心职责 简单说明
1. 物理层 快递的运输载体(货车 / 飞机 / 轮船) 传输二进制电信号 / 光信号(比特流) 货车负责把箱子从你的城市运到朋友的城市,只负责 "运输",不管箱子里是什么、写了什么地址。
2. 数据链路层 快递员的同城配送 + 面单校验 将比特流封装成帧,用 MAC 地址定位局域网设备,检测传输错误 本地快递员从仓库取件,核对包裹的面单完整性(比如有没有破损),然后送到你家小区驿站;就像数据链路层用 MAC 地址找到同一局域网的下一个设备。
3. 网络层 快递公司的全国路由规划 用 IP 地址跨网络寻址,选择最优传输路径 快递公司根据面单上的收件人手机号 + 地址(类比 IP 地址),规划路线:比如从杭州→上海→北京,确定包裹走空运还是陆运;就像网络层通过 IP 地址找到目标主机的网段。
4. 传输层 快递的 "保价 / 普通" 服务选择 端到端进程通信,用端口号区分应用,保证可靠性(TCP)或高效性(UDP) 你选择保价快递(类比 TCP) :要求全程跟踪、丢失必赔、按顺序送达;或者普通快递(类比 UDP) :不保证时效、丢了不赔但速度快;端口号就像朋友家的具体门牌号,确保包裹送到正确的房间。
5. 会话层 快递的 "收件预约" 服务 建立、管理、终止通信会话(比如断点续传标记) 你和朋友预约 "周六下午 3 点收件",快递员在这个时间上门;就像会话层维护连接的上下文,比如下载文件时记录断点位置,下次可以续传。
6. 表示层 商品的包装 / 拆包 + 防伪加密 数据格式转换、加密 / 解密、压缩 / 解压缩 你把特产用真空袋包装(压缩)、贴上防伪码(加密);朋友收到后拆真空袋(解压)、验证防伪码(解密);就像表示层把 Java 对象序列化成字节流,服务端再反序列化成对象。
7. 应用层 你和朋友的 "寄件 / 收件" 需求 直接面向用户应用,提供网络服务(HTTP/FTP/RPC) 你打开快递 APP 下单(对应调用 HTTP 接口),朋友收到后在 APP 上确认收货(对应服务端返回响应);应用层就是满足 "传输数据" 的最终业务需求。

二、网络协议?

Web 通信协议
  • HTTP(超文本传输协议):基于 TCP 的请求 - 响应协议,端口 80;无状态,通过 Cookie/Session 维持会话;是 Web 开发的基础。
  • HTTPS(安全超文本传输协议):HTTP + SSL/TLS,端口 443;数据加密传输,防止窃听和篡改,是现在主流的 Web 协议。
  • WebSocket:基于 TCP 的全双工协议,解决 HTTP 短连接的痛点,用于实时通信(如聊天、弹幕)。
文件传输协议
  • FTP(文件传输协议):基于 TCP 的文件上传 / 下载协议,端口 21;分为主动模式和被动模式。
  • SFTP(安全文件传输协议):SSH + FTP,数据加密传输,比 FTP 更安全。
邮件协议
  • SMTP(简单邮件传输协议):用于发送邮件,端口 25。
  • POP3/IMAP:用于接收邮件,POP3 是下载邮件到本地,IMAP 是同步邮件在服务器的状态。
域名解析协议
  • DNS(域名系统协议) :将域名(如www.baidu.com)转换成 IP 地址,是互联网的 "地址簿";基于 UDP(查询快),端口 53。
RPC 框架协议
  • Dubbo 协议:阿里开源的 RPC 协议,基于 TCP,支持多种序列化方式,用于微服务通信。
  • gRPC 协议:Google 开源的 RPC 协议,基于 HTTP/2 + Protobuf,跨语言能力强。
  • RMI(远程方法调用):Java 原生 RPC 协议,基于 TCP,仅限 Java 语言使用。
UDP**(用户数据报协议)**:

特点:无连接、不可靠、高效;无握手 / 挥手,单包最大 64KB;可能丢包 / 乱序

场景:音视频直播、游戏通信、心跳检测、广播

Java API:DatagramSocket/DatagramPacket
7.

TCP(传输控制协议)

特点:面向连接、可靠、有序、字节流;三次握手建立连接,四次挥手释放连接;支持重传、拥塞控制

场景:HTTP/HTTPS、FTP、数据库连接、微服务 RPC

Java API : Socket/ServerSocket
8.

会话层协议
  • RPC(远程过程调用协议):建立客户端与服务端的会话,让调用远程方法像调用本地方法一样。
  • NetBIOS:早期局域网的会话管理协议,用于主机名解析和会话建立。
  • WebSocket:HTTP 握手后建立长连接会话,支持双向通信,本质是会话层 + 应用层的结合。
表示层协议
  • SSL/TLS:核心功能是数据加密与解密,是 HTTPS 的安全基础,保证数据传输过程中不被窃取或篡改。

    SSL 的全称是 Secure Sockets Layer(安全套接层),是一种用于在网络通信中保障数据传输安全的加密协议。它的核心作用是在客户端和服务器之间建立一个加密的安全通道,防止数据在传输过程中被窃听、篡改或伪造。

    后来 SSL 协议被更安全的 TLS (Transport Layer Security,传输层安全协议)取代,现在我们常说的 "SSL 证书" 其实本质上大多是 TLS 证书,只是 "SSL" 这个名称因为历史原因被广泛沿用。

  • 序列化协议:如 Protobuf、Hessian、JSON,负责将应用层的数据(如 Java 对象)转换成字节流,或反向解析,解决跨平台 / 跨语言的数据兼容问题。

    Protobuf(Protocol Buffers)是谷歌开源的轻量级、跨语言、高效的结构化数据序列化协议,用于在不同系统间高效传输和存储数据。

    Hessian 是一种****轻量级、跨语言的二进制 RPC 协议,用于在分布式系统中高效序列化数据并实现服务间**远程调用。

    JSON 是一种轻量、易读、基于文本的跨语言数据交换格式,常用于前后端通信和配置文件存储。

  • 压缩协议:如 GZIP、Deflate,对传输数据进行压缩,减少网络带宽消耗。

    GZIP 是一种基于 DEFLATE 算法的无损数据压缩格式 / 工具,常用于压缩传输中的文本或文件以减少网络带宽占用。

    DEFLATE 是一种结合 LZ77 无损压缩算法与霍夫曼编码的通用无损数据压缩算法,是 GZIP、ZIP 等格式的核心压缩实现。

复制代码
###### IP 协议(Internet Protocol)

* 分为 **IPv4** (32 位地址,如 192.168.1.1,资源枯竭)和 **IPv6**(128 位地址,如 2001:0db8:85a3:0000:0000:8a2e:0370:7334,解决地址枯竭问题)。
* 核心功能:给数据包分配源 / 目标 IP 地址,定义数据包的分片与重组规则。
* 特点:无连接、不可靠,只负责 "传数据",不保证数据到达或有序。
复制代码
###### ICMP(互联网控制报文协议)

* 依赖 IP 协议工作,用于网络故障诊断和控制。
* 典型应用:`ping`命令(发送 ICMP 请求包,测试主机是否可达)、`traceroute`命令(追踪数据包的路由路径)。
复制代码
###### IGMP(互联网组管理协议)

* 用于组播通信,让主机加入或退出一个组播组,常见于音视频广播、直播场景。
复制代码
###### 路由协议(如 OSPF、BGP)

* 路由器之间的通信协议,用于交换路由信息,计算最优传输路径。比如 OSPF 用于内网路由,BGP 用于互联网的跨运营商路由。
* **OSPF**(开放式最短路径优先)是一种基于链路状态算法的内部网关协议(IGP),用于自治系统(AS)内的路由器交换路由信息并计算最优传输路径。
* **BGP**(边界网关协议)是一种基于路径向量算法的外部网关协议(EGP),用于不同自治系统(AS)之间交换路由信息,控制互联网级别的数据传输路径。
  1. 以太网协议(Ethernet II):最主流的链路层协议,帧格式包含源 MAC 地址、目标 MAC 地址、数据长度、校验位,是局域网通信的基础。

  2. ARP(地址解析协议):核心功能是 IP 地址→MAC 地址的映射。比如你的电脑要给同一网段的服务器发数据,会先发送 ARP 请求 "谁的 IP 是 192.168.1.100?请告诉我 MAC 地址",服务器回复后就能封装帧。

  3. RARP(反向地址解析协议):与 ARP 相反,MAC 地址→IP 地址的映射,早期无盘工作站常用。

  4. VLAN(虚拟局域网协议):将物理局域网划分为多个逻辑子网,隔离广播域,提升网络安全性和效率。

  5. Ethernet(以太网):有线局域网的核心物理层协议,支持双绞线、光纤传输,速率从 10Mbps 到 100Gbps。

  6. Wi-Fi(IEEE 802.11 系列):无线局域网协议,如 802.11n/ac/ax(对应 WiFi 4/5/6),定义无线射频信号的传输规则。

  7. PPP(点对点协议):拨号上网、专线连接的物理层协议,用于两台设备的直接连接。

  8. MAC(介质访问控制地址):是网卡的全球唯一硬件标识,用于局域网内设备的物理寻址。

  9. **HTTP 1.0 → HTTP 2.0:**解决连接利用率问题

    HTTP 1.0 的短连接 + 多连接并发模式存在两大痛点:

    • TCP 三次握手和慢启动的开销巨大;
    • 连接数限制导致并发性能瓶颈。

    HTTP 2.0 的核心方案是 单连接多路复用 + 二进制帧

    • 将请求 / 响应拆分为独立的二进制帧,通过流 ID 标识归属;
    • 支持请求优先级,可优先传输关键资源(如 HTML 优先于图片);
    • 头部压缩(HPACK)减少冗余头信息,降低传输体积。

    局限:HTTP 2.0 仍基于 TCP 协议,TCP 层的队头阻塞问题未解决 ------ 一旦某个数据包丢失,整个 TCP 连接的所有流都会暂停等待重传。(TCP连接所确认的是IP和端口,若手机从4G切换到wifi,端口/IP一变就需要,就需要重新建立连接)

  10. HTTP 2.0 → HTTP 3.0:解决 TCP 层本质缺陷

    HTTP 3.0 放弃 TCP 协议,基于 QUIC 协议 重构,核心解决 TCP 的两大痛点:

    队头阻塞:QUIC 的流是逻辑独立的,单个流丢包仅需重传该流的数据,不影响其他流;

    握手效率 :QUIC 合并了 TCP 三次握手和 TLS 握手流程,最快可实现 0 RTT 建立连接,大幅降低延迟;

    移动网络适配:QUIC 支持连接迁移(只要connection ID不变,还是一个连接,如手机从 WiFi 切换到 4G,无需重新建立连接)。

  11. QUIC(Quick UDP Internet Connections):

    QUIC 是由 Google 提出、基于 UDP 构建的新一代传输层协议,核心以可变长度的 Connection ID 替代 TCP 四元组标识连接,实现 0-1 RTT 快速握手、流级别的无队头阻塞、支持连接迁移,且默认集成 TLS 1.3 加密

三、TCP的连接(三次握手)与释放(四次挥手)

TCP 连接建立:三次握手(Three-Way Handshake)
1. 目的

在客户端和服务端之间建立双向的可靠通信通道,同步双方的序列号(Seq)、确认号(Ack),协商初始通信参数(如 MSS、窗口大小),确保双方都具备收发数据的能力。

2. 完整过程(以 Java Socket 为例)

假设:客户端(Socket)向服务端(ServerSocket)发起连接,服务端监听端口(如 8080)。

阶段 发起方 报文标志位 核心数据 含义
第一次握手 客户端 SYN(同步) Seq = x(随机初始序列号) 客户端向服务端发送「连接请求」,请求同步序列号,告知服务端:"我想和你建立连接"
第二次握手 服务端 SYN + ACK(确认) Seq = y(服务端随机序列号)Ack = x+1 服务端回应:"我收到了你的请求(Ack=x+1),同时也向你发起同步(SYN=y),请确认"
第三次握手 客户端 ACK(确认) Seq = x+1Ack = y+1 客户端回应:"我收到了你的同步请求(Ack=y+1),连接可以建立了"
3. 细节(为什么是三次?)

避免「失效的连接请求」:如果客户端的 SYN 报文因网络延迟到达服务端,服务端若直接建立连接(两次握手),会浪费资源;三次握手确保双方都确认 "对方能收能发"。

同步序列号:TCP 是字节流,序列号用于保证数据有序、不重复,三次握手完成双方初始 Seq 的同步。

Java 场景:new Socket("127.0.0.1", 8080) 触发客户端三次握手;serverSocket.accept() 是服务端完成第二次握手后,阻塞等待第三次握手完成,返回 Socket 对象。

4. 异常

握手超时:客户端发送 SYN 后未收到 ACK,会重传 SYN(默认重传次数由系统控制,Java 可通过SO_TIMEOUT设置连接超时);

半连接队列满:服务端收到 SYN 后会放入半连接队列,若队列满(如高并发攻击),会丢弃 SYN,导致客户端连接失败。

TCP 连接释放:四次挥手(Four-Way Wavehandshake)
1. 目的

TCP 是全双工通信(双方可同时收发数据),释放连接需分别关闭 "客户端→服务端" 和 "服务端→客户端" 两个方向的通道,因此需要四次交互。

2. 完整过程(以 Java Socket.close () 为例)

假设:客户端主动关闭连接,服务端被动关闭。

阶段 发起方 报文标志位 核心数据 含义
第一次挥手 客户端 FIN + ACK(结束 + 确认) Seq = u(当前发送序列号)Ack = v(确认服务端的 Seq) 客户端向服务端发送「关闭请求」:"我没有数据要发给你了(FIN),请确认"
第二次挥手 服务端 ACK(确认) Seq = vAck = u+1 服务端回应:"我收到了你的关闭请求(Ack=u+1),我会处理完剩余数据后关闭"
第三次挥手 服务端 FIN + ACK(结束 + 确认) Seq = w(服务端剩余数据发送完后的 Seq)Ack = u+1 服务端向客户端发送「关闭请求」:"我这边数据也发完了(FIN),请确认关闭"
第四次挥手 客户端 ACK(确认) Seq = u+1Ack = w+1 客户端回应:"我收到了你的关闭请求(Ack=w+1),你可以关闭了"
3. 细节(为什么是四次?)

全双工特性:第一次挥手关闭 "客户端→服务端" 的发送通道,服务端可能还有数据要发给客户端,因此先回 ACK(第二次挥手),等数据发完再发 FIN(第三次挥手),最后客户端确认(第四次挥手)。

时间等待(TIME_WAIT):客户端发送第四次挥手的 ACK 后,会进入 TIME_WAIT 状态(默认 2MSL,MSL 是报文最大生存时间,约 1-2 分钟),目的是:

  1. 确保服务端收到第四次 ACK(若丢失,服务端会重传 FIN,客户端在 TIME_WAIT 内可重发 ACK);
  2. 避免失效的报文被新连接接收。

Java 场景:

  • socket.close() 触发客户端第一次挥手;
  • 服务端读取数据时若收到 FIN,InputStream.read() 会返回 - 1,此时服务端调用socket.close() 触发第三次挥手;
  • 高并发场景下,Java 服务端若频繁关闭连接,会出现大量 TIME_WAIT 连接,可通过SO_REUSEADDR参数复用端口。
4. 异常

半关闭(Half-Close):TCP 支持「关闭发送通道但保留接收通道」,Java 可通过socket.shutdownOutput() 只关闭输出流(触发 FIN),仍可读取输入流的数据;

连接重置(RST):若一方强制关闭连接(如 Java 调用socket.close() 但对方还在发数据),会发送 RST 报文,接收方会抛出Connection reset异常。

5.简单总结全流程:

三次握手流程

‌1)客户端发送SYN报文‌:客户端发送带有SYN标志的报文段,包含初始序列号(seq=x),进入SYN_SENT状态。

2)‌服务器响应SYN+ACK报文‌:服务器同意连接后,发送SYN和ACK标志均置位的报文段,确认号设为客户端序列号加一(ack=x+1),同时设置自己的初始序列号(seq=y),进入SYN_RCVD状态。

‌3)客户端发送ACK报文‌:客户端收到服务器响应后,发送ACK标志置位的报文段(ack=y+1),完成连接建立。 ‌

四次挥手流程

‌1)客户端发送FIN报文‌:客户端发送FIN标志置位的报文段,表示数据传输完成,进入FIN_WAIT_1状态。

‌2)服务器响应ACK报文‌:服务器发送ACK标志置位的报文段(ack=FIN+1),进入CLOSE_WAIT状态。

‌3)服务器发送FIN报文‌:服务器发送FIN标志置位的报文段,进入LAST_ACK状态。

‌4)客户端响应ACK报文‌:客户端发送ACK标志置位的报文段,完成连接释放。

作用:

三次握手:确认双方收发能力,同步序列号,避免无效连接;

四次挥手:适配全双工特性,分别关闭两个方向的通道,TIME_WAIT 保证连接安全

6.补充:

(1)SYN(Synchronize):同步标志位

作用:用于发起连接请求,同步通信双方的初始序列号(ISN)。

标志位特点:SYN 标志位为 1 时,表示当前报文是一个连接请求 / 响应报文,报文会携带发送方的初始序列号(Seq)。

(2)ACK(Acknowledgment):确认标志位

作用:用于确认收到对方的数据,携带确认号(Ack),告知对方 "我已经收到了序列号小于 Ack 的所有数据,请你下次发送序列号从 Ack 开始的内容"。

标志位特点:

ACK 标志位为 1 时,表示报文携带确认号;

TCP 连接建立后,所有报文的 ACK 标志位都必须为 1(只有三次握手的第一个 SYN 报文的 ACK=0)

(3)FIN 是 TCP 报文头部的控制标志位,全称 Final

作用: 主动关闭当前方向的通信连接。

特点:FIN 标志位置为 1 时,表示发送方已无数据要传输,请求关闭当前方向的通信通道。

由于 TCP 是全双工通信,FIN 仅关闭 "发送方→接收方" 的单方向通道,不影响反向的数据传输。例如客户端发 FIN 后,仍可接收服务端的剩余数据。

相关推荐
洛豳枭薰4 分钟前
jvm运行时数据区& Java 内存模型
java·开发语言·jvm
这儿有个昵称9 分钟前
互联网大厂Java面试场景:从Spring Boot到微服务架构
java·spring boot·消息队列·微服务架构·大厂面试·数据库优化
凛_Lin~~12 分钟前
安卓网络框架——OkHttp源码解析(基于3.14.x)
android·网络·okhttp
乾元30 分钟前
智能化侦察:利用 LLM 进行自动化资产暴露面识别与关联
运维·网络·人工智能·网络协议·安全·自动化
普马萨特41 分钟前
手机共享位置的技术原理解析
网络
填满你的记忆44 分钟前
【从零开始——Redis 进化日志|Day5】分布式锁演进史:从 SETNX 到 Redisson 的完美蜕变
java·数据库·redis·分布式·缓存
lendsomething1 小时前
Spring 多数据源事务管理,JPA为例
java·数据库·spring·事务·jpa
nsjqj1 小时前
JavaEE初阶:多线程初阶(2)
java·开发语言
xency1 小时前
前四天整理
网络