漫游计算机网络之情景篇
QoS 的一个例子:保证转发
- 所有的业务被划分为4个优先级;
- 通过 Traffic Policer 的令牌桶机制进行流量整形;
- 在经过 Traffic Policer 时,每个优先级下又被分类为3种优先级,或者说丢弃优先级,即丢包的可能性大小;
- 所以最终实际上有12种服务等级;
- 在每个 Packet 的 IP Header 的 ToS 字段(Type of Service 服务类型) 会携带 DSCP(6bits) + ECN(2bits),其中:
- DSCP(Differentiated Services Code Point 服务等级);
- ECN(Explicit Congestion Notification 拥塞控制);
- 路由器接收到被划分后的包,根据以下2种机制进行分组调度:
- WFQ(Weighted Fair Queuing 加权公平队列):按照优先级进行公平调度;
- RED(Random Early Detection 随机早期检测):采用主动丢弃机制,这里被丢弃的概率就是前面划分的丢弃优先级;
PSTN 公用交换电话网
PSTN ,即 Public Switched Telephone Network ,公用交换电话网。
1. 本地环路 Local Loop
- 进行模拟信号传输;
- 使用双绞线,从家到端局;
- 设备包括 CodeC, Modem or ADSL Modem ;
- 早期只包括电话线(300 Hz ~ 3400 Hz),即模拟信号的传输;后期由于加入用户电脑等设备,需要传送数字信号,所以先通过 Modem ,再通过 CodeC ,如下图所示;
比较点 | Modem(拨号) | ADSL Modem |
---|---|---|
功能 | 拨号上网,将数字信号调制成适合带宽传输的模拟信号 | 拨号上网,将数字信号调制成适合带宽传输的模拟信号 |
传输介质 | UTP 3 ,即普通电话线 | UTP 3 ,即普通电话线 |
信道带宽 | 整个电话线频段 3100 Hz(需要引入滤波器,将带宽限制在语音范围) | 1.1 MHz(无需滤波器) |
工作层次 | 物理层 | 物理层 |
通信方式 | 全双工,以字符为单位 | 全双工,以字符为单位,PPP 协议 |
调制速率 | 2400 Baud | 4000 Baud |
调制技术 | QAM | DMT-离散多音调制技术(QAM 的升级版) |
信号 | 模拟信号 | 模拟信号 |
复用技术 | 无复用 | 频分复用 FDM |
2. 中继 Trunk
交换局和交换局之间,使用光纤连接。
中继线上传输的是数字信号,其中用到了时分复用技术,包括:
项目 | T1 | E1 |
---|---|---|
标准组织 | Bell Labs(美国) | ITU-T(国际电信联盟) |
使用地区 | 美国、日本、加拿大 | 欧洲、中国等大部分其他地区 |
传输速率 | 1.544 Mbps | 2.048 Mbps |
时隙数量 | 24 个时隙(channels) | 32 个时隙 |
每个时隙速率 | 64 Kbps(语音标准) | 64 Kbps(语音标准) |
可传语音通道数 | 24 路 | 30/32 路(其中 2 个为控制与同步) |
帧结构 | 每帧 193 bit(8×24 + 1) | 每帧 256 bit(8×32) |
3. 综述
用户家里的电话和电脑都通过电话线,其中,电脑的数字信号先经过 ADSL Modem 转换为模拟信号,然后和语音信号一起经过 Splitter ,将频段分离,经过用户线后,到达端局,和其他 DSL 用户的信号一起经过 DSLAM 集中汇集,再转发到互联网。
数据包分片过程
数据链路层(以太网)、网络层(IP 协议)、传输层(TCP 协议)事实上都涉及分片的操作。
上图很好的展示了层与层之间的封装过程:
- 应用层的数据交给传输层后,这部分数据即 TCP 的有效载荷;
- TCP 是面向字节流的,故有效载荷不能超过 MSS Bytes ;TCP 首先对数据进行了一次分片,分成不同的 TCP 报文;
- TCP 并对其进行封装,加上至少 20 Bytes 的 TCP Header ;
- 交给网络层后,网络层同样对其进行封装,加上 20 Bytes ~ 60 Bytes 的IP Header ;
- 这样,IP Header + TCP Header + Payload 已经完成封装,交给数据链路层,作为 Frame 的 Data 部分;
- 数据链路层为其加上 18 Bytes 的控制字段,封装成帧,最终在物理层中实际传输;
我们知道,对于以太网,MTU = 1500 Bytes ,即最大传输单元(不包含控制字段),所以反推出 MSS 不能超过 1500 - 20 - 20 = 1460 Bytes ;
问题:MSS 似乎并没有必要,只需 MTU 即可?
并非如此,网络层是不可靠的,服务尽力而为,并没有像 TCP 一样高效的重传机制。不考虑 MTU ,让 IP 层直接负责对 TCP 报文的分片,会发生什么呢?
一个 TCP 报文,直接被 IP 层划分为多个 IP 包,传输过程中,如果其中 1 个 IP 包分片丢失,根据 IP 协议,就需要重传所有的 IP 包分片;
看起来好像没什么问题,但是 IP 协议哪里有重传这一说,重传是通过上层,即 TCP 协议来控制的,由于某个分片丢子,IP 包无法进行重组,自然不会交给上层,接收方的传输层根本不知道,所以发送方的传输层需要在超时后才能进行重传。那么效率是可想而知的低的。
引入 MSS 后,事实上确保了一个 TCP 报文不会被 IP 协议分片,即 1 个 IP 包对应 1 个 TCP 报文。往往在 TCP 建立连接的过程中,双方会协商好 MSS 的大小;