从现在开始,我们开始传输层的学习,自顶向下第六版中改成了运输层,感觉怪怪的

书中打了邮政服务和代收发信件的兄弟姐妹之间的比方,非常贴切

这是传输层和网络层的作用区别,也就是说,传输层管的是主机内部的文件传输

多路复用与多路分解

多路复用:在源主机不同套接字收集数据块,每个都装上首部信息,生成报文段,然后将报文段传递到网络
多路分解:将传输层报文段中的数据交付到正确(通过首部信息)的套接字
先介绍几个名词

名词 意义
数据块 拆解下来的数据
报文段 运输层给数据块封装上首部信息,包含源端口号和目的端口号
数据报 网络层给报文段封装上首部信息,包含源IP地址和目的IP地址
套接字 连通应用层和传输层的管道

在面向连接的多路复用中

这是报文段的内部结构

在主机连接中如图,报文段用4个端口号简要代替

复用要求:

为什么有这个要求?是因为最终是要分解出来的,所以要保证能够正确分解,这个要求是匹配分解服务的规则的

分解服务:

  1. 套接字分配端口号
  2. 运输层检查报文段中的端口号,并定向到套接字
  3. 报文段中的数据通过套接字传到所连接的进程

以上,也是UDP的传输过程,但是TCP要复杂得多


UDP协议

UDP协议其实很简单,没有什么好讲的,但是可以为理解TCP打下基础

这是使用UDP协议的报文段,首部只有4个字段,每个字段由两个字节组成,也就是他的头部只有8字节(TCP头部比他多很多)

可以看到有一个checksum,这叫校验和,这是什么呢?下面你就知道了

具体内容


看了上面这个图,你可能会奇怪

1.既然UDP不可靠,他为什么还要加上错误校验

这个错误校验比起TCP的要简单得多,多加这个在某种程度上可以减少错误率而不至于影响到UDP的速度,稍后会介绍

2.UDP也能增加可靠传输吗?

是的,事实上,TCP协议就是在UDP协议基础上构建的,只不过是封装好直接用
我们用UDP通过在应用层添加机制可以完成TCP的功能

校验和

目的:检测UDP段在传输中是否发生错误(如位翻转)

举例说明

一、发送方

  1. 假设数据中有3个16比特的数
  2. 求出前两个的和
  3. 前两个的和加上第三个数,如果溢出就回卷,及和去掉最高位,然后+1
  4. 现在已经加完了所有16比特的数,取反码就变成了校验和,然后发送

二、接收方

  1. 将4个16比特的数(包含校验和)加起来,一定等于1111 1111 1111 1111(相当于两个反码相加),这也是取反码做校验和的原因
  2. 如果不等,校验和错误,传输出现问题

    相信你能想到,这个还是太脆弱了,仅仅只能解决数据缺失问题,而比如其中16比特的数互相交换位置这类错误无法检测
    而且,他也只能知道发生了错误,而不知道哪里发生了错误

重点要学习的是TCP协议,以上仅仅只是学习TCP的前置知识