计算机网络——网络模型和TCP

目录

网络模型

ISO七层协议、以及协议当中的内容

TCP/IP模型

[TCP 核心](#TCP 核心)

TCP和UDP的区别

[TCP 是如何保证可靠传输的](#TCP 是如何保证可靠传输的)

[TCP 三次握手机制*](#TCP 三次握手机制*)

[TCP 为什么是三次握手*](#TCP 为什么是三次握手*)

[TCP 四次挥手的发起方](#TCP 四次挥手的发起方)

[TCP 四次挥手*](#TCP 四次挥手*)

为什么四次挥手*

为什么会有等待时间TIME_WAIT

[TCP 的流量控制(滑动窗口)](#TCP 的流量控制(滑动窗口))


网络模型

ISO七层协议、以及协议当中的内容

OSI 七层模型是什么

OSI(开放式系统互联通信参考模型)是国际标准化组织制定的网络分层标准,目的是解决不同设备间的网络兼容性问题,实现跨设备通信。

它将网络通信从上到下分为 7 层(物数网传会表应):

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

各层核心职能

  1. 应用层
  • 核心作用:为具体应用程序提供数据传输接口,直接面向用户业务。
  • 典型协议:HTTP、DNS、FTP、SMTP 等。
  1. 表示层
  • 核心作用:负责数据格式转换(如二进制 / ASCII 码)、加密、压缩处理。
  • 关键细节:解决乱码问题,这部分逻辑通常由开发者处理。
  1. 会话层
  • 核心作用:建立、管理和终止客户端与服务端之间的通信会话,管理连接生命周期。(一般是客户端主动发起连接)
  1. 传输层
  • 核心作用:负责端到端的数据传输,提供可靠 / 不可靠传输、流量控制能力。
  • 典型协议:TCP(可靠传输)、UDP(不可靠传输);负责端口寻址,将数据交给对应应用。
  1. 网络层
  • 核心作用:选择最佳路由、规划 IP 地址,负责数据的转发与分片。
  • 典型协议:IP、ICMP、ARP;解决跨网段的路径选择问题。
  1. 数据链路层
  • 核心作用:将数据封装成帧,标记帧的起止,实现透明传输与差错校验,负责 MAC 寻址。
  • 关键细节:主要用于局域网内设备寻址。
  1. 物理层
  • 核心作用:定义网络设备接口、电气等硬件标准,负责在物理链路上传输比特流(0/1)。

TCP/IP模型

TCP/IP 是实际互联网使用的网络分层模型,是对 OSI 七层模型的简化实现,目的是让不同设备能高效互联通信。

它从上到下分为 4 层

应用层 → 传输层 → 网络层(Internet 层)→ 网络接入层(链路层)

各层核心职能

1.应用层

  • 核心作用:为最终用户 / 应用程序提供服务,处理数据编码、会话控制、业务逻辑。
  • 典型协议:HTTP、HTTPS、SMTP、DNS、FTP 等。
  • 对应 OSI:应用层 + 表示层 + 会话层
  1. 传输层
  • 核心作用:负责 端到端(主机到主机) 的数据传输,提供可靠 / 不可靠传输、流量控制。
  • 典型协议:
    • TCP:可靠传输,面向连接,保证数据有序不丢失;
    • UDP:不可靠传输,无连接,速度快,适合实时场景。
  • 对应 OSI:传输层
  1. 网络层(Internet 层)
  • 核心作用:负责数据包的寻址、路由、转发,确定数据在网络中的最佳传输路径。

  • 典型协议:IP(IPv4/IPv6)、ICMP、ARP 等。

  • 对应 OSI:网络层

    4.网络接入层(链路层 / 网络接口层

  • 核心作用:控制硬件设备与物理介质,负责在物理链路中传输比特流(0/1),处理帧封装、MAC 寻址。

  • 典型协议:以太网、Wi-Fi 等底层协议。

  • 对应 OSI:数据链路层 + 物理层

OSI 是理论上的概念分层,设计复杂且未提供具体实现方案;而 TCP/IP 模型将其简化为 4 层(应用层、传输层、网络层、网络接口层),更贴合实际互联网场景,是当前广泛使用的网络模型。

TCP 核心

TCP和UDP的区别

对比维度 TCP UDP
连接性 面向连接,传输前必须建立连接 无连接,无需建立连接即可传输
通信方式 只能一对一通信 支持一对一、一对多、多对一、多对多
传输方式 面向字节流,无边界,保证顺序 面向报文(数据包),有边界,可能乱序 / 丢包
可靠性 可靠传输,数据无差错、不丢失、不重复、按序到达 不可靠传输,尽最大努力交付,不保证到达
流量 / 拥塞控制 流量控制和拥塞控制机制 ,网络拥堵时也不降低发送速率
首部开销 首部最小 20 字节,最大 60 字节 首部固定 8 字节,开销极小

TCP 是如何保证可靠传输的

  1. 连接管理 :通过三次握手 建立可靠连接,四次挥手释放连接,确保连接建立和断开的可靠性。

  2. 校验和:对 TCP 报文段进行校验,检测传输过程中的误码。

  3. 序列号 + 确认应答(ACK)

  • 对每个字节数据编号,保证数据有序、不重复、不丢失
  • 接收方收到数据后回传 ACK,告知发送方接收情况。
  1. 超时重传:若发送方在指定时间内未收到 ACK,判定数据包 / 确认包丢失,自动重发。

  2. 流量控制 :通过滑动窗口机制,匹配接收方处理速度,避免接收缓冲区溢出导致丢包。

  3. 拥塞控制 :通过慢开始、拥塞避免等算法,在网络拥堵时降低发送速率,防止网络崩溃。

  4. 最大消息长度(MSS):连接时约定最大分段大小,以该单位重传,避免网络层分块。

TCP 三次握手机制*

核心目的

建立可靠的全双工连接 ,三次交互,让客户端和服务器确认彼此「能发、能收」。即确认双方收发能力正常,并同步初始序列号(ISN)。


关键术语

术语 含义
SYN 同步位,SYN=1 表示这是一个「连接请求」或「连接确认」报文
ACK 确认位,ACK=1 时确认号字段才生效
seq 本次发送的起始编号是 x(随机生成)
ack 期望收到对方的下一个序列号(= 对方 seq + 1)

核心流程

初始状态

客户端和服务端默认都处于 CLOSED (关闭)状态,没有任何连接。

建立连接前

服务端会先主动调用监听接口 (比如 listen()),将自己从 CLOSED (关闭)切换到 LISTEN(监听)状态,在指定端口等待客户端的连接请求。

客户端行为

客户端保持 CLOSED 状态,直到需要发起连接时,才主动发送报文。也就是第一次握手。

1. 第一次握手(客户端 → 服务端) SYN

  • 客户端发送 SYN=1(连接请求),seq=x(随机初始序列号)
  • 客户端状态变为 SYN_SENT(同步已发送)
  • 含义:我想连接你,同步我的序列号 x

2. 第二次握手(服务端 → 客户端) SYN+ACK

  • 服务端回复 SYN=1(连接确认报文),ACK=1seq=y(自己的随机序列号),ack=x+1(期望收到\的下一个序列号)
  • 服务端状态变为 SYN_RCVD(同步已收到)
  • 含义:我收到你的请求,同意连接;我也同步我的序列号 y

3. 第三次握手(客户端 → 服务端) ACK

  • 客户端回复 ACK=1ack=y+1(期望收到]的下一个序列号)、seq=x+1(自己的随机序列号)
  • 双方状态都变为 ESTABLISHED(连接已建立)
  • 含义:我确认收到你的序列号,连接正式建立,可以传输数据了

TCP 为什么是三次握手*

为什么不能是四次?

三次握手已经足够确认双向收发能力

  1. 第一次:确认客户端能发
  2. 第二次:确认服务器能收、能发
  3. 第三次:确认客户端能收

四次握手只会增加连接建立时间,没有额外收益,完全冗余。

为什么不能是两次?

核心问题:「失效报文」导致服务器资源浪费

  • 本质:两次握手无法确认客户端是否能收,服务器不知道自己的确认包有没有被客户端收到。
  • 网络延迟时,客户端早已过期的连接请求可能在连接释放后才到达服务器。
  • 两次握手下,服务器收到后会直接建立连接并等待数据,但客户端根本发起新连接,不会发数据。
  • 结果:服务器空等,浪费资源(半连接队列占满,易被 SYN Flood 攻击)。

TCP 四次挥手的发起方

TCP 四次挥手没有规定必须由谁发起,谁先不需要连接,谁就先发送 FIN 包。

在 HTTP 短连接场景下,通常是服务器先发起 (响应完就关);在长连接场景下,客户端或服务器都可能先发起

  1. HTTP/1.0 短连接

设计就是 "一次请求 - 响应就断开",所以服务器发完响应报文后,通常会主动发起关闭,这是最符合协议设计的行为。

  1. HTTP/1.1+ 长连接(keep-alive)

连接会保持复用,谁先触发关闭条件,谁先发起

  • 浏览器关闭 / 页面跳转 → 客户端先发起
  • 服务器达到 keep-alive timeout 空闲超时 → 服务器先发起
  • 一方主动要求断开(比如 Connection: close 头) → 谁带这个头谁先发起。

TCP 四次挥手*

核心目的

安全断开 TCP 连接,确保双方数据都发送完毕,并确认彼此都同意关闭,避免数据丢失。

关键术语

术语 含义
FIN 结束位,FIN=1 表示本方数据已发送完,请求断开
ACK 确认位,ACK=1 时确认号字段生效
seq 本机发送的序列号(非随机数,是当前发送数据的字节序号)
ack 期望收到对方的下一个序列号(= 对方 seq + 1)

核心流程

初始状态

双方都处于 ESTABLISHED(已连接)状态。

**1. 第一次挥手(主动方 → 被动方)**FIN 包

  • 主动方发送 FIN=1(请求关闭连接),seq=u(本次发送的序列号,非随机数)
  • 主动方进入 FIN_WAIT_1(终止等待 1)状态
  • 含义:我没数据要发了,准备断开连接。

**2. 第二次挥手(被动方 → 主动方)**ACK 包

  • 被动方回复 ACK=1ack=u+1(期望下次收到的序列号),seq=v(本次发送的序列号)
  • 被动方进入 CLOSE_WAIT(关闭等待)状态;主动方进入 FIN_WAIT_2(终止等待 2)状态
  • 含义:我收到断开请求了,但我可能还有数据没发完,等我发完再告诉你。

**3. 第三次挥手(被动方 → 主动方)**FIN + ACK 包

  • 被动方发完剩余数据后,发送 FIN=1, ACK=1(同意关闭),seq=w(本次发送的序列号),ack=u+1(期望下次收到的序列号)
  • 被动方进入 LAST_ACK(最后确认)状态
  • 含义:我也没数据了,同意断开连接。

**4. 第四次挥手(主动方 → 被动方)**ACK 包

  • 主动方回复 ACK=1ack=w+1(期望下次收到的序列号),seq=u+1(本次发送的序列号)
  • 主动方进入 TIME_WAIT(时间等待)状态,等待 2MSL 后才进入 CLOSED 状态;被动方收到 ACK包 后直接进入 CLOSED 状态
  • 含义:我确认收到,连接可以彻底关闭了。

为什么四次挥手*

TCP 连接是全双工的(即:客户端可以发,服务器也可以同时发)。

为了安全断开 TCP 连接,必须确保双方数据都发送完毕,并确认彼此都同意关闭,避免数据丢失。

流程对应

  • 第一次:主动方发 FIN(已发完,我要断)。
  • 第二次:被动方回 ACK(收到,等我发完)。
  • 第三次:被动方发 FIN+ACK(已发完,我也断)。
  • 第四次:主动方回 ACK(收到,确认关闭)。

为什么会有等待时间TIME_WAIT

核心原因

进入 TIME_WAIT 状态并等待 2MSL(最长报文寿命),主要有两个目的:

  1. 保证可靠关闭(重传机制)。
  2. 防止旧连接干扰新连接(防止乱码)。

详细阐述

  1. 保证 ACK 可靠到达(重传机制)

    主动方最后发送的 ACK 包可能丢失。根据 TCP 超时重传机制,如果被动方在 2MSL 内没收到 ACK,会超时重发 FIN 包

    主动方等待 2MSL,就是为了确认是否需要重传 。如果收到了被动方重发的 FIN,就立刻再次回复 ACK,确保对方最终能收到确认,安全关闭连接

  2. 防止旧报文干扰新连接

    网络中可能存在迟到的旧数据包。等待 2MSL,能确保这些残留报文在网络中彻底消失

    这样当建立新连接时,就不会误把旧连接的数据包当成新数据,避免数据错乱

TCP 的流量控制(滑动窗口)

核心概念

流量控制:让发送方根据接收方的实际接收能力,控制发送数据量,避免接收方缓冲区溢出导致丢包。

实现方式 :通过 滑动窗口 机制实现。

核心流程

  1. 初始化窗口:三次握手时,双方协商初始窗口大小(如 400 字节),表示接收方最多能接收的数据量。
  2. 发送数据:发送方按窗口大小发送数据(如 200 字节),可用窗口随之减少。
  3. 接收方反馈窗口
    • 接收方处理数据后,每次返回 ACK 报文时,都会携带当前剩余的窗口大小(win),实时告知发送方自己还能接收多少数据。
    • ✅ 关键:不是等缓冲区满了才反馈,而是每次 ACK 都要更新窗口大小,保证发送方实时感知接收方状态。
  4. 窗口为 0 时的处理
    • 若接收方窗口 win=0(缓冲区已满),发送方停止发送,并启动定时器。
    • 定时器到期后发送试探报文,询问接收方是否有可用窗口。
    • 若接收方回复 win>0(缓冲区已腾出空间),发送方恢复发送数据。
相关推荐
fqq32 小时前
Http方法详解
网络·网络协议·http
ꪶꪜ4452 小时前
vlan综合实验
linux·运维·网络
Bruce_Liuxiaowei3 小时前
HTTPie 完全指南:比 curl 更人性化的 HTTP 调试工具
网络·网络协议·http
亚空间仓鼠3 小时前
OpenEuler系统常用服务(八)
linux·运维·服务器·网络
Blurpath住宅代理3 小时前
跨境数据采集为何总“看错市场”?IP地理定位偏差的技术解析与应对策略
网络·静态ip·代理ip·住宅ip·静态代理
网络安全许木3 小时前
自学渗透测试的第十天(HTTP进阶与Burp Suite基础)
网络·网络协议·http·网络安全·渗透测试
CS创新实验室3 小时前
《计算机网络》深入学:IP地址 VS. MAC地址
tcp/ip·计算机网络·macos
亚空间仓鼠3 小时前
OpenEuler系统常用服务(九)
linux·运维·服务器·网络
肖爱Kun3 小时前
SRT协议封装MPEG-TS 流的视频和音频TS头结构
网络·音视频