计算机网络学习笔记 | 传输层核心知识点总结(DAY03,匠心制作)

计算机网络学习笔记 | 传输层核心知识点总结(DAY03)

大家好!今天是计算机网络学习的第三天,重点攻克了传输层的内容。作为OSI模型和TCP/IP模型中的第四层,传输层是连接应用层与网络层的关键纽带,直接影响数据传输的效率与可靠性。这篇博客会从我的学习视角出发,梳理传输层的核心知识点,尤其聚焦TCP与UDP两大协议的差异及TCP的连接管理机制,适合和我一样刚入门计算机网络的同学参考~

一、传输层:定位与核心目标

在开始具体协议学习前,我先理清了传输层的"角色定位"------它不像网络层那样关注"主机到主机"的通信,而是聚焦"应用进程到应用进程"的数据传输,简单说就是给应用层的进程们提供"专属通信通道"。

1. 核心目标

传输层的核心任务是向应用层进程提供高效、可靠、性价比合理的数据传输服务。这里的"可靠"并非强制(比如UDP就不保证可靠),而是根据应用场景灵活选择。

2. 传输层在不同参考模型中的位置

为了理解传输层的层级关系,我对比了三种常见参考模型,表格整理如下(一目了然):

参考模型 各层结构(从上到下)
OSI参考模型 应用层 → 表示层 → 会话层 → 传输层 → 网络层 → 数据链路层 → 物理层
TCP/IP参考模型 应用层 → (表示层、会话层功能融合)→ 传输层 → 网络层 → 链路层 → (物理层功能融合)
五层参考模型 应用层 → 传输层 → 网络层 → 链路层 → 物理层

可以看到,无论哪种模型,传输层都始终处于"应用层下方、网络层上方",承担着"承上启下"的作用。

二、传输层的基础能力:逻辑通信与多路复用/分用

这两个概念是理解传输层工作原理的基础,刚开始有点绕,后来结合示意图终于想通了~

1. 逻辑通信

传输层通过协议(TCP/UDP)为不同主机的应用进程"模拟"了一条直接的通信链路,这就是逻辑通信 。它的核心作用是屏蔽底层网络层的传输细节------比如IP层的路由转发、丢包重传等,让应用进程感觉自己在"直接和对方进程通信",不用关心数据在物理网络中怎么传。

2. 多路复用与多路分用

这是传输层"一对多"和"多对一"通信的关键机制,举个例子就能理解:
数据: 端口80 数据: 端口1234 数据: 端口5678 封装TCP/UDP报文 发送端 浏览器 传输层 QQ 微信 网络链路
目的端口: 80 目的端口: 1234 目的端口: 5678 接收端 网络链路 传输层拆解报文 浏览器 QQ 微信

  • 多路复用(发送端):一台主机上的多个应用进程(比如浏览器、QQ、微信),会将数据通过不同的"端口号"交给传输层,传输层再将这些数据封装成统一格式的报文(TCP段或UDP数据报),通过同一条网络链路发送出去。
  • 多路分用(接收端):接收端传输层收到报文后,会根据报文中的"目的端口号",将数据准确分发给对应的应用进程(比如80端口分给浏览器,443端口分给HTTPS服务)。

而实现这一切的核心标识,就是下面要讲的端口号

三、端口号:应用进程的"身份证"

端口号是传输层给应用进程分配的"唯一标识",没有它,传输层就不知道该把数据交给哪个进程。

1. 端口号基本属性

  • 长度:16位二进制数,因此取值范围是 0~65535(共65536个端口)。
  • 本质:端口号是"软件层面"的标识,不属于硬件(和网卡MAC地址、IP地址不同)。

2. 端口号分类及用途

根据用途,端口号分为三类,我用表格整理了关键信息:

分类 子分类 取值范围 用途说明
服务端端口号 知名端口号 0~1023 固定分配给常见网络服务,比如HTTP用80端口、FTP用21端口、DNS用53端口。
注册端口号 1024~49151 供已注册的应用程序使用(需向IANA申请),避免端口冲突,比如MySQL用3306端口。
客户端端口号 - 49152~65535 由客户端进程临时申请使用,通信结束后立即释放,也叫"临时端口号"。

四、传输层两大核心协议:TCP vs UDP

这是今天学习的重点!TCP和UDP是传输层的"两大支柱",但设计理念完全不同,适用场景也天差地别。

1. TCP与UDP核心差异对比

为了清晰区分,我整理了一张对比表,涵盖连接特性、可靠性、通信方式等关键维度:

特性维度 用户数据报协议(UDP) 传输控制协议(TCP)
连接特性 无连接、不可靠传输 面向连接、可靠传输
连接流程 无需建立/释放连接,直接发送数据 需"三次握手"建立连接,"四次挥手"释放连接
数据交付保障 仅"尽力而为",不保证顺序和完整性 通过序号、确认号、重传等保障可靠交付
通信方式支持 支持一对一、一对多、多对多(广播/多播) 仅支持一对一通信
首部开销 小(固定8字节) 大(最小20字节,含选项可达60字节)

2. 适用场景

  • UDP适用场景 :对实时性要求高可容忍少量丢包的场景,比如:
    • 视频直播/语音通话(卡顿比延迟更影响体验);
    • DNS解析(请求/响应数据量小,追求快);
    • 游戏数据传输(实时操作比个别丢包重要)。
  • TCP适用场景 :对数据可靠性要求高不允许丢包的场景,比如:
    • 网页浏览(HTTP/HTTPS基于TCP,不能漏传代码);
    • 文件传输(FTP,丢包会导致文件损坏);
    • 电子邮件(SMTP,不能少发/错发邮件)。

五、UDP协议详解:简单高效的"轻量级"协议

UDP的设计非常简单,核心是"封装数据+发送",没有复杂的控制机制。我重点学习了它的数据报结构和校验和。

1. UDP数据报结构

UDP数据报由"首部"和"数据"两部分组成,首部固定8字节,结构如下:

字段 长度(bit) 说明
源端口 16 发送方应用进程的端口号
目的端口 16 接收方应用进程的端口号
UDP长度 16 整个UDP报文的长度(首部+数据)
UDP校验和 16 校验数据报的完整性
数据 可变 应用层传递的具体数据

2. 关键字段解析

  • UDP长度 :单位是字节,最小值为8(只有首部,无数据),最大值为65535(受16位字段限制)。如果数据超过65535-8=65527字节,需要应用层自己分片。
  • UDP校验和 :这是UDP唯一的"可靠性保障",计算范围包括三部分:
    1. 伪首部:包含源IP、目的IP、协议号(UDP为17)、UDP长度,用于确认"数据是发给当前主机的正确进程";
    2. UDP首部;
    3. UDP数据。
      计算方法:将这三部分按16位分组累加,对结果取反,得到校验和。接收端会重新计算,如果结果不一致,说明数据传输中损坏,直接丢弃报文。

六、TCP协议详解:可靠传输的"重量级"协议

TCP比UDP复杂得多,核心是通过各种机制实现"可靠传输"。我从报文结构、核心字段、连接管理三个方面展开学习。

1. TCP报文结构

TCP报文(也叫TCP段)由"首部"和"数据"组成,首部最小20字节,含选项字段时最大60字节。关键字段如下(只列重点):

字段 长度(bit) 功能说明
源端口/目的端口 16/16 标识发送方/接收方进程(和UDP一致)
序号(Seq) 32 本报文数据第一个字节的序号,保障数据有序
确认号(Ack) 32 期望收到的下一个字节序号(仅ACK=1时有效),保障可靠确认
头部长度 4 TCP首部长度(以4字节为单位),区分首部和数据
控制位 8 含SYN、ACK、FIN等8个标志位,控制连接建立/关闭、数据传输
窗口大小 16 接收方告知发送方的"可接收数据量",实现流量控制
校验和 16 校验TCP报文完整性(含伪首部)
选项 0~40字节 常见MSS(最大段大小)、窗口扩大因子等

2. TCP核心字段详解

这几个字段是TCP可靠传输的关键,必须吃透:

(1)序号(Seq)
  • 定义:32位字段,标识本报文数据第一个字节的"全局序号"。
  • 生成规则:三次握手时,双方会随机生成一个"初始序号(ISN)";后续每发送1字节数据,序号+1。
  • 示例:如果发送方要传3000字节数据,初始序号为0,会分成3个报文段,序号分别为0(0999字节)、1000(10001999字节)、2000(2000~2999字节)。
(2)确认号(Ack)
  • 有效性:只有当控制位中的ACK=1时,确认号才有效。
  • 定义:表示"接收方期望收到的下一个字节序号",即"已正确收到ack-1之前的所有数据"。
  • 示例:接收方收到序号为1000、长度为500字节的报文,说明已收到1000~1499字节,下次期望收到1500字节,因此确认号填1500。
(3)控制位(8个标志位)

控制位是TCP的"操作指令",每个位对应不同功能,重点记4个核心位:

  • SYN:同步序号,用于建立连接(三次握手时发送);
  • ACK:确认标识,用于确认收到数据(除了第一次握手,其他报文都带ACK=1);
  • FIN:结束标识,用于释放连接(四次挥手时发送);
  • RST:重置连接,用于处理异常(比如连接超时,强制断开)。
(4)选项:MSS(最大段大小)

MSS是TCP连接建立时双方协商的"最大数据段长度",即TCP报文数据部分的最大长度,计算逻辑如下(以以太网为例):

  • 以太网MTU(最大传输单元)为1500字节(IP层最大报文长度);
  • 需扣除IP首部(20字节)和TCP首部(20字节);
  • 因此,MSS = 1500 - 20 - 20 = 1460字节。
    MSS的作用是避免IP分片,减少重组开销,提升传输效率。

3. TCP连接管理:三次握手与四次挥手

这是TCP最核心的机制,也是面试高频考点,我结合状态变化图反复梳理了流程。

(1)三次握手:建立可靠连接

三次握手的目标是"双方确认彼此的发送和接收能力正常",流程如下:
Client Server SYN=1, seq=X SYN=1, ACK=1, seq=Y, ack=X+1 ACK=1, seq=X+1, ack=Y+1 Client Server

步骤 发起方 报文内容 状态变化 说明
1 客户端 SYN=1,seq=X(随机ISN) ESTABLISHED → SYN-SENT 客户端请求建立连接,发送同步报文,告知自己的初始序号X
2 服务端 SYN=1,ACK=1,seq=Y,ack=X+1 LISTEN → SYN-RECEIVED 服务端确认收到客户端报文(ack=X+1),同时发送自己的同步报文(seq=Y)
3 客户端 ACK=1,seq=X+1,ack=Y+1 SYN-SENT → ESTABLISHED 客户端确认收到服务端报文(ack=Y+1),连接建立完成,双方可传数据

为什么需要三次? 两次握手无法确认客户端的接收能力(比如服务端的ACK报文丢了,服务端以为连接已建立,客户端却不知道),三次握手能确保双方收发能力都正常。

(2)四次挥手:释放连接

四次挥手的目标是"双方确认数据已传输完毕,安全释放连接",流程如下:
Client Server FIN=1, seq=u (FIN-WAIT-1) ACK=1, ack=u+1 (CLOSE-WAIT) FIN=1, ACK=1, seq=v+d, ack=u+1 (LAST-ACK) ACK=1, ack=v+d+1 (TIME-WAIT) Client Server

步骤 发起方 报文内容 状态变化 说明
1 客户端 FIN=1,seq=u ESTABLISHED → FIN-WAIT-1 客户端请求关闭连接,告知自己的最后序号u(数据已发完)
2 服务端 ACK=1,seq=v,ack=u+1 ESTABLISHED → CLOSE-WAIT 服务端确认收到FIN,此时服务端可继续发送未完成的数据
3 服务端 FIN=1,ACK=1,seq=v+d,ack=u+1 CLOSE-WAIT → LAST-ACK 服务端数据发完,请求关闭连接,告知自己的最后序号v+d
4 客户端 ACK=1,seq=u+1,ack=v+d+1 FIN-WAIT-2 → TIME-WAIT 客户端确认收到FIN,进入TIME-WAIT状态(等待2MSL后关闭)

为什么需要四次? 因为TCP是"全双工"通信,双方都需要单独发送FIN报文表示自己的数据流已结束,因此需要四次交互(服务端的ACK和FIN不能合并,因为可能还有数据要传)。

(3)TIME-WAIT状态与MSL

客户端在第四次挥手后会进入TIME-WAIT 状态,持续时间为2MSL(MSL:Maximum Segment Lifetime,最大报文生存时间,一般为30秒或2分钟)。

  • 作用1:确保服务端能收到客户端的最后一个ACK(如果ACK丢了,服务端会重发FIN,客户端在TIME-WAIT内可以再次回复);
  • 作用2:避免旧连接的报文干扰新连接(2MSL内,网络中所有旧报文都会过期丢弃)。

七、学习总结

今天的传输层学习内容很多,从"定位→端口→协议→连接管理"层层递进,最大的收获是理解了TCP和UDP的设计取舍:UDP以"简单高效"换"实时性",TCP以"复杂机制"换"可靠性"。

尤其TCP的三次握手、四次挥手和TIME-WAIT状态,刚开始觉得绕,画了几遍状态图后终于理清了逻辑。后续计划结合实际案例(比如Wireshark抓包)进一步验证这些机制,加深理解~

如果这篇笔记对你有帮助,欢迎点赞收藏!有疑问也可以在评论区交流,一起进步~

相关推荐
晓北斗NorSnow4 小时前
机器学习核心算法与学习资源解析
学习·算法·机器学习
wdfk_prog5 小时前
[Linux]学习笔记系列 -- [kernel][time]tick
linux·笔记·学习
峰顶听歌的鲸鱼6 小时前
9.OpenStack管理(三)
运维·笔记·分布式·openstack·学习方法
我命由我123456 小时前
Photoshop - Photoshop 工具栏(22)单行选框工具
学习·ui·职场和发展·求职招聘·职场发展·学习方法·photoshop
立志成为大牛的小牛7 小时前
数据结构——三十七、关键路径(王道408)
数据结构·笔记·程序人生·考研·算法
User_芊芊君子7 小时前
【成长纪实】我的鸿蒙成长之路:从“小白”到独立开发,带你走进鸿蒙的世界
学习·华为·harmonyos·鸿蒙开发
oe10197 小时前
好文与笔记分享 A Survey of Context Engineering for Large Language Models(下)
人工智能·笔记·语言模型·agent
冷雨夜中漫步8 小时前
高级系统架构师笔记——系统质量属性与架构评估(1)软件系统质量属性
笔记·架构·系统架构
oe10198 小时前
好文与笔记分享 A Survey of Context Engineering for Large Language Models(中)
人工智能·笔记·语言模型·agent开发