title: 计算机网络3 - 可靠传输
mathjax: true
date: 2020-03-19 13:33:04
categories: [计算机网络]
tags: [计算机网络]
keywords: [计算机网络]
UDP
不可靠传输,Voice-over-IP、DNS、RPC、DHCP???
UDP头
16位源端口,16位目标端口,16位UDP长度,16位checksum
UDP问题
长度受限制了,我们要将大文件分割成小文件,哪一层来负责?为什么要分为小块?更可靠,但是可能导致后发送的先到达。
不可靠传输的包的问题
- 丢失
- 损坏
- 乱序到达
- 延时到达
- 重复包
什么叫可靠?
- 正确、及时、高效、公正
正确
不丢失、不损坏、不乱序
丢失
包丢失解决方案1
- 频繁而快速地发送单个包
正确,但效率差,缺乏接收端的反馈,不知道何时停止。
反馈
ACK:收到包了,
NACK: 没有收到包(你确定?别人给你发包了吗?) —> 当损坏的时候使用
包丢失解决方案2
收到ACK以前,一直重复发包,好吗? 优化了时间效率,但浪费了带宽。特别是长延时网络。
包丢失解决方案3
发送包以后设置时钟,在这段时间内收到ACK则结束,否则重发,但是时间设置为多少????
多个包的问题
单包方案在局域网不会出现问题,因为距离近,但是在更大的网络呢?效率非常差,带宽利用率过低。
多包的解决方案
使用流水线+滑动窗口,用窗口大小控制链路上包的数量
窗口的目的 限制带宽、限制接收端的缓冲区数量
为什么要限制带宽? 用来拥塞控制
多包的反馈
累加ACK,ACK的时候回馈未收到的包的最小序号
完全ACK,回馈所有未收到的包序号,这个不常用,可能会与累加ACK一起使用
如何检测丢包
累加ACK多次返回同一个值的时候,那个包就丢包了,
如何响应丢包
检测到5号包丢失的时候,包5肯定要重发,包6呢?
GO-BACK-N算法
当检测到5号包丢失的时候,把窗口滑向5,然后重新发送窗口中所有的包。
GO-BACK-N缺点
- 丢失
- 顺坏
- 重排
- 延时
- 重复
完全应答ACK
基于窗口,在超时或者多次ACK用一个值后重发。
公正
基于窗口的AIMD,发现丢包以后滑动窗口减半,成功收到ACK后窗口增大1