6-13 传输层协议TCP UDP
TCP和UDP简介

TCP(Transmission Control Protocol,传输控制协议):属于可靠面向连接的网络协议
- 可靠:保证数据传输没有被篡改
- 面向连接:数据传输开始之前需要建立连接
- 应用:如文件传输、登录数据传输
UDP(User Datagram Protocol,用户数据报协议):属于不可靠面向无连接的网络协议
- 不可靠:不保证数据完整性等
- 无连接:直接传输,不建立连接
- 应用:对延时要求高的应用如视频传输

TCP报文格式
了解即可,重点是源目端口号

UDP报文格式
了解即可,重点是源目端口号
与TCP相比,UDP报文做了很大精简,省略诸多控制字段

端口号

- 源端口随机分配,目标端口使用知名端口
- 应用客户端使用的源端口一般为系统中未使用的且大于1024
- 目的端口号为服务器端应用服务器的进程,如telnet为23
下面我们给出 TCP/IP 体系的应用层常用协议所使用的运输层熟知端口号

TCP的控制机制
TCP序列号及确认号
确认号用来确认收到上一个数据包,以及表示期望收到下一个编号为ack的数据包
PC1的seq和PC2的ack有关,反之亦然

TCP三次握手建立连接
Send SYN:标志位置为SYN表示请求建立连接
Send SYN、ACK:标志位置为SYN和ACK,ACK表示已经收到上一个SYN请求(ack = seq +1 表示收到上一个数据包),并返回一个SYN,两个数据包合二为一
Established:确认建立连接,标志位置为ACK(ack = seq +1 表示收到上一个数据包)
三次握手过程:注意大写ACK标志位是用来确认收到了对方的SYN标志位请求
| 第n次握手 | 报文详细 | 笔者注 |
|---|---|---|
| A请求向B发起连接 | A向B发送seq = 0、标志位为SYN的数据包 | A确认A的发送功能正常 |
| B收到请求并发送请求确认 | B收到上述报文,向A发送seq = 0、ack = 1、标志位为SYN和ACK二合一的数据包 | B确认A的发送功能正常,B的接收功能正常 |
| A收到并发送 | A收到上述报文,向B发送seq = 1、ack = 1、标志位为ACK的数据包 | A确认A的接收功能正常,B的发送功能正常 |

TCP四次挥手断开连接
| 第n次挥手 | 报文详细 | |
|---|---|---|
| A发送FIN请求 | 标志位置为FIN、ACK | |
| B发送ACK | 标志位置为ACK | |
| B再发送FIN请求 | 标志位置为FIN、ACK | |
| A发送ACK | 标志位置为ACK |

TCP的滑动窗口机制
接收方存在一个缓冲区即窗口,窗口大小决定了在收到确认前可以发送的数据量
缓冲的窗口保证了接收方不会因为处理不过来而导致直接丢弃数据

详细见《计算机网络ComputerNetworkNotes》本节内容