从现在开始,我们开始传输层的学习,自顶向下第六版中改成了运输层,感觉怪怪的
书中打了邮政服务和代收发信件的兄弟姐妹之间的比方,非常贴切,这是传输层和网络层的作用区别,也就是说,传输层管的是主机内部的文件传输
多路复用与多路分解
1 定义
- 多路复用:在源主机不同套接字收集数据块,每个都装上首部信息,生成报文段,然后将报文段传递到网络
- 多路分解:将传输层报文段中的数据交付到正确(通过首部信息)的套接字
名词 | 意义 |
---|---|
数据块 | 拆解下来的数据 |
报文段 | 运输层给数据块封装上首部信息,包含源端口号和目的端口号 |
数据报 | 网络层给报文段封装上首部信息,包含源IP地址和目的IP地址 |
套接字 | 连通应用层和传输层的管道 |
2 存在于传输层
运输层的任务是为两台主机进程之间的通信提供通用的数据传输服务
,所谓通用的,是指并不针对某个特定应用,而是多种应用可以使用同一个传输层。由于一台主机可以同时运行多个进程,因此传输层有多路复用和多路分解的功能。复用就是多个应用层进程可同时使用下面传输层的服务,多路分解和多路复用相反,是传输层把收到的信息分别交付给上面应用层的相关进程。
3 多路复用:
将一份带宽资源按某种方法分成多个进程(多个用户)可以同时使用的技术:
- 频分多路复用:频分多路复用是将各路信号分别调制到不同的频段进行传输,多用于模拟通信。
- 时分多路复用:时分多路复用将用于传输的时间划分为若干个时间间隔(时隙),每个进程(用户)分得一个时间间隔。通俗的说,时分多路复用通信是各路信号在同一信道上占有不同时间片进行通信。
类型 | 频分多路复用 | 时分多路复用 |
---|---|---|
特点 | 链路频谱由所有连接共享,每条连接专用一个频段 | 将时间划分为特定的帧,帧又划分为固定数量的时隙 |
应用 | 电视机频道 | 因特网电话 |
时分多路复用 |
---|
4 举例
这是报文段的内部结构:
在下图中,报文段用4个端口号简要代替:
SP:source port
DP:destination port
S-IP:source IP
D-IP:destination IP
复用要求:
为什么有这个要求?是因为最终是要分解出来的,因此,这个要求是匹配分解服务的规则的。
分解服务:
- 套接字分配端口号
- 运输层检查报文段中的端口号,并定向到套接字
- 报文段中的数据通过套接字传到所连接的进程
以上,也是UDP的传输过程,但是TCP要复杂得多
。
UDP协议
下面是UDP协议的报文段,首部只有4个字段,每个字段由两个字节组成,也就是他的头部只有8字节(TCP头部比他多很多)
可以看到有一个checksum,这叫校验和,这是什么呢?下面你就知道了
1、校验和
- 目的:检测UDP段在传输中是否发生错误(如位翻转)
- 说明:
一、发送方
(1)假设数据中有2个16比特的数
(2)求出前两个的和,如果溢出就回卷,即去掉最高位,然后末尾+1
(4)现在已经加完了所有16比特的数,取反码就变成了校验和,然后发送
二、接收方
(5)将3个16比特的数(包含校验和)加起来,一定等于1111 1111 1111 1111(相当于两个反码相加),这也是取反码做校验和的原因
(6)如果不等,校验和错误,传输出现问题
相信你能想到,这个还是太脆弱了,仅仅只能解决数据缺失问题,而且也只能知道发生了错误,但不知道哪里发生了错误,此外,对于互相交换位置这类错误根本无法检测。
2、既然UDP不可靠,为什么还要加上错误校验?
这个错误校验比起TCP的要简单得多,多加这个在某种程度上可以减少错误率而不至于影响到UDP的速度。
3、UDP也能增加可靠传输吗?
- 是的,事实上,TCP协议就是在UDP协议基础上构建的,只不过是封装好直接用
- 我们用UDP通过在应用层添加可靠机制可以完成TCP的功能