可靠性传输
TCP协议的头部结构
头部大小:20字节<=头部结构<=60字节
名称 | 含义 |
---|---|
16位源端口号 | 发送程序的端口号 |
16位目的端口号 | 接收程序的端口号 |
32位序号 | TCP报文段的编号,第一个编号由系统随机生成,后续的编号为前一个编号加上本报文段所携带的数据的第一个字节在整个字节流中的偏移量 |
32位确认号 | 回馈数据时使用,为收到的报文段的序号值加上携带数据的长度再加1 |
4位头部长度 | 标识了头部的大小 |
URG | 紧急标记位,为1时与16位紧急指针配合使用发送紧急数据 |
ACK | 确认标记,为1时32确认号才会发挥作用 |
PSH | 提示位,为1时告诉接收方将要发送大量数据,尽快清空接收缓冲区 |
RST | 复位报文段,通信出现问题重新建立连接 |
SYN | 同步报文段,建立连接时设置为1 |
FIN | 断开报文段,断开连接时设置为1 |
16位窗口大小 | 接收通告窗口,由接收方填充,告诉发送方剩余缓冲区大小 |
16位校验和 | 由发送端填充,校验头部部分和数据部分,保证数据的正确性 |
16位紧急指针 | 标记紧急数据的位置 |
保证数据在网络中的可靠性传输
- 保证数据能够到达对端:应答确认机制、超时重传机制、滑动窗口机制、拥塞控制机制
- 保证数据不重复,不乱序:32位序号
- 保证数据不失真:16位校验和
应答确认机制&超时重传机制
- 应答确认机制
- 超时重传机制
- 关于上述两种机制的一些问题
- 当发送端一直收不到确认,那么重传几次后就会终止传送并报错
- 当接收端每收到一个报文段就发送一个确认报文段,会大大的降低网络传输效率
连续确认机制:当收到连续的报文段后,对最后一个报文段进行确认,就间接的对前面的报文段进行了确认
滑动窗口机制
作用:保证发送方发送数据的速率与接受方接收数据的速率相匹配
窗口
- TCP头部结构中16位的窗口大小(接收通告窗口):由接收方填充,来通告发送方当前接收方的数据缓冲区中还能够容纳的数据的大小,决定了发送方能够发送的数据的窗口大小
- 接收通告窗口会随着接收方的应用程序的数据处理动态变化
滑动
- 发送方首先根据接收通告窗口决定本端能够发送的数据窗口,这个窗口的位置会随着收到接收方的确认报文段不断的向后移动,并且窗口大小也会随着接受通告窗口的值,大小不断发生变化
拥塞控制机制
作用:控制发送方发送数据的速率与当前网络环境相匹配
- 滑动窗口和拥塞控制都是为了减少数据在网络传输过程的丢包率,发送方的发送窗口为min(滑动窗口,拥塞控制)
四种算法
- 慢启动:刚开始向网络中发送数据,从1开始以指数方式增长( x_^2),达到慢启动门限初始值(16)时停止
- 拥塞避免:达到慢启动门限后以线性方式(+1)增长
- 快速重传:收到3个重复确认后(网络拥堵)启动快速重传
- 快速恢复:网络拥堵后,将慢启动门限的数据量设为当前数据量的一半,在进入拥塞避免阶段