1、作用
计算机网络体系结构中的物理层、数据链路层和网络层,它们共同解决了将主机通过异构⽹络互联起来所⾯临的问题,实现了主机到主机的通信。
如何为运行在不同主机上的应用进程提供直接的逻辑通信服务,就是传输层的主要任务,传输层协议⼜称为端到端协议。

传输层提供了"端⼝"的概念,⽤来区分不同应⽤进程的标识符。
2、TCP/IP运输层中的两个重要协议
2.1、TCP
- 传输控制协议(TCP)为其上层提供的是⾯向连接的可靠的数据传输服务
- 使用TCP通信的双方,在传送数据之前必须首先建立TCP连接(逻辑连接,而⾮物理连接)。数据传输结束后必须要释放TCP连接
- TCP为了实现可靠传输,就必须使⽤很多措施,例如TCP连接管理、确认机制、超时重传、流量控制以及拥塞控制等
- TCP的实现复杂,TCP报文段的首部比较⼤,占用处理机资源比较多
2.2、UDP
- ⽤户数据报协议(UDP)为其上层提供的是⽆连接的不可靠的数据传输服务
- 使⽤UDP通信的双方,在传送数据之前不需要建立连接
- UDP不需要实现可靠传输,因此不需要使⽤实现可靠传输的各种机制
- UDP的实现简单,UDP⽤户数据报的首部比较小
2.3、传输层端口号
运行在计算机上的进程是使用**进程标识符(PID)**来标识的。
TCP/IP体系结构的运输层使用端口号来标识和区分应用层的不同应用进程,端口号的长度为16比特。
端口号的分类:分为两种
- 服务器端使用的端口号:熟知端口号和登记端口号
- 客户端使用的端口号:短暂端口号---仅在客户端使用,由客户进程在运行时动态选择,通信结束后回被系统收回,以便于给其他客户进程使用

TCP和UDP的端口号之间是没有关系的,他们是独立的。
2.4、TCP和UDP的对比
| TCP | UDP | |
|---|---|---|
| 连接性 | 单面向连接 | 无连接 |
| 传输速率 | 快 | 慢 |
| 资源消耗 | 大 | 小 |
| 应用场景 | 浏览器,文件传输,邮件发送 | 音视频通话、直播 |
| 应用层协议 | HTTP、HTTPS 、FTP、SMTP、DNS | DNS |
3、TCP可靠传输
3.1、停止等待ARQ协议
ARQ--->自动重传请求


3.2、连续ARQ协议+滑动窗口协议
滑动窗口是流量控制机制,连续 ARQ 是差错恢复机制,二者绑定使用,用来解决发太快收不下 和传错 / 丢包 问题。

3.3、选择性确认(SACK)
SACK 就是 TCP 的选择性确认 ,让接收方告诉发送方:我收到了哪些不连续的块,你只重传缺口就行,别瞎重传后面已经到了的包。
优点:
- 只重传真正丢失的段,减少无效重传,节省带宽
- 高丢包、长距离链路(如 4G/5G、跨境)吞吐明显提升
- 不破坏原有累积 ACK
4、TCP流量控制
流量控制(Flow Control)机制:以解决因发送方发送数据太快而导致接收方来不及接收,造成接收方的接收缓存溢出的问题。
流量控制的基本方法:接收方根据自己的接收能力(接收缓存的可用空间大小),控制发送方的放松速率。
- 通过确认报文中窗口字段来控制发送方的发送速率
- 发送方的发送窗口大小不能超过接收方给出的窗口大小
- 当发送方收到接收方窗口为0时,停止发送数据
5、TCP拥塞控制
拥塞 :在某一段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络性能就要变坏。计算机网络中的链路容量(带宽)、交换节点中的缓存和处理机等都是网络的资源。
- 拥塞控制是一个全局性的过程
- 流量控制是点对点通信的控制
5.1、拥塞控制的常用算法
慢开始:指数增,试探网络,到门限转拥塞避免
拥塞避免:传线性增,平稳运行
快速重传:3 个重复 ACK 就重传,不等超时
快速恢复:丢包后门限减半,拥塞窗口等于新门限,直接进拥塞避免
cwnd:拥塞窗口、rwnd:接收窗口、swnd:发送窗口
6、TCP建立连接和释放连接
6.1、三次握手

核心目的 :双方确认自身、对方收发能力都正常,协商初始序列号,同步连接信息,防止失效旧连接报文混入新连接。
流程(分步讲解)
- 第一次握手:客户端 → 服务端
客户端主动发起连接,报文:SYN=1,携带客户端初始序号 seq=x
含义:我想和你建立连接,这是我的初始序号
客户端进入 SYN_SENT 状态。 - 第二次握手:服务端 → 客户端
服务端收到请求,回复报文:SYN=1,ACK=1
确认号 ack = x+1(收到客户端序号 x,确认收到)
携带服务端初始序号 seq=y
含义:我收到你的请求,同意建连;这是我的初始序号
服务端进入 SYN_RCVD 状态。 - 第三次握手:客户端 → 服务端
客户端收到回复,发送报文:ACK=1,ack = y+1,seq=x+1
含义:我收到你的确认,连接正式就绪
客户端收到后 → 进入 ESTABLISHED(已连接)
服务端收到该报文后 → 也进入 ESTABLISHED
至此,双向连接建立完成,开始传输数据。
6.2、四次握手

TCP 全双工,一方关闭发送通道,不代表另一方也要立刻关闭,因此需要四次交互。
场景:客户端主动关闭连接。
流程
- 第一次挥手:客户端 → 服务端
客户端数据发完,请求断连:FIN=1,seq=u
含义:我不再发数据了,请求关闭我方发送通道
客户端进入 FIN_WAIT_1。 - 第二次挥手:服务端 → 客户端
服务端回复确认:ACK=1,ack=u+1,seq=v
含义:收到你的关闭请求
此时状态:客户端发通道关闭,收通道仍可用;服务端可继续向客户端发剩余数据,客户端进入 FIN_WAIT_2;服务端进入 CLOSE_WAIT
重点:这一步只确认关闭请求,服务端不会立刻发 FIN,因为可能还有数据要传。 - 第三次挥手:服务端 → 客户端
服务端所有数据发送完毕,主动请求关闭自己的发送通道:
FIN=1,ACK=1,seq=w,ack=u+1
含义:我数据也发完了,现在请求关闭连接
服务端进入 LAST_ACK。 - 第四次挥手:客户端 → 服务端
客户端回复确认:ACK=1,ack=w+1,seq=u+1
含义:收到,连接可以彻底关闭
客户端发送后,进入 TIME_WAIT(关键状态,等待 2MSL)
服务端收到 ACK → 立即进入 CLOSED,断开连接
客户端等待 2MSL 时长,确保服务端收到最后一个 ACK、网络残留报文全部消散,再进入 CLOSED