传输层
概述
- 不同主机应用进程间的逻辑通信
- 传输层协议运行于:
- 发送端
- 将应用消息分为段传递给网络层
- 接收端
- 重组segments为消息,传递给应用层应用
- 在传输层有两个可用的协议:TCP/IP
传输层和网络层关系
-
网络层:主机之间的逻辑通信
-
传输层:进程间的逻辑通信
Internet传输层协议
- 可靠有序的交付:TCP
- 不可靠、无序的交付:UDP
多路复用和多路分解
将网络层中提供的主机到主机的交互服务扩展到至于机上运行的进程间的交互服务
这篇博客关于运输层多路复用和多路分解以及TCP/UDP解释的很好,以下是对这篇博客的引用:
每个运输层的报文段中设置了几个字段,包括源端口号和目的端口号等。
-
多路分解就是,在接收端,运输层检查这些字段并标识出接收套接字,进而将该报文定向到该套接字。其工作方式就是,主机上的每个套接字有一个端口号,当报文到达主机时,运输层检查报文段中的目的端口号,并将其定向到相应的套接字。( 将运输层报文段中的数据交付到正确的套接字的工作。)
-
多路复用就是从源主机的不同套接字中收集数据块,并为每个数据块封装上首部信息从而生成报文段,然后将报文段传递到网络层中去。
- 多路复用的要求:1、套接字有唯一标识符。2、每个报文段有特殊字段(源端口号字段和目的端口号字段)来指示该报文段所要交付到的套接字。
-
无连接运输:UDP
在使用UDP来传输报文段时,一个UDP套接字是由一个含有目的IP地址和目的端口号的二元组来全面标识的。因此,如果两个UDP报文段有不同的源IP地址和源端口,但具有相同的IP地址和目的端口号,那么这两个报文段将通过相同的目的端口号定向到相同的目的进程。 -
有连接运输:TCP
TCP套接字是由一个四元组(源IP地址、源端口号,目的IP地址,目的端口号)来标识的。这样,当一个TCP报文段从网络到达一台主机时,主机会使用全部4个值来将报文段定向,即多路分解到相应的套接字。与UDP不同的是,由于每一个TCP连接都会产生一个新的套接字,所以具有不同的源IP或源端口号的连接就是一个不同的连接,对应着产生的新的不同的套接字。
无连接传输UDP
UDP(用户数据报协议)报文段格式:
可以看出UDP的首部长度是固定的,共64bit,即8个字节。
校验和:提供了差错检测得功能,即用于确定当UDP报文段从源到达目的时,其中的比特是否发生了改变。
注:虽然UDP提供了差错检验,但它并不能进行差错恢复。
UDP提供的是不可靠的数据传输,那么我们为什么还要选择UDP呢?下面是UDP的几点好处:
·应用层能更好的控制要发送的数据和发送时间:只要应用进程将数据传递给了UDP,UDP就会将此数据打包成UDP报文段并立即将其传递给网络层。
·无需连接建立:UDP不需要进行握手即可进行数据传输,因此UDP不会引入建立连接的时延。
·无连接状态:TCP需要在端系统维持连接状态(包括接收和发送缓存、拥塞控制参数、序号与确认号的参数等)。而UDP则不需要维持连接状态,也不需要维持这些参数。
·分组首部开销小:每个TCP报文至少有20字节的首部开销,而UDP只有8个字节。
UDP应用:
·流式多媒体应用
·DNS
·RIP
·简单网络管理协议
原因:丢包容忍、速率敏感
UDP检验和的具体计算步骤是:发送方对报文段中的所有16bit字的和进行反码运算,求和时遇到的任何一处都被回卷。
回卷及时将超出16位的数字1与后16位数字相加。
比方说一共有3个16bit的字:
0110011001100000
0101010101010101
1000111100001100
那么前两个之和是:
0110011001100000+0101010101010101=1011101110110101
再将其与第三个相加,得出:
1011101110110101+1000111100001100=0100101011000010
由于最后一次相加有溢出,我们就把它回卷,因此最后一个就可以得出以上的结果,那么在接收方我们将以上的4个16bit字(包括检验和)全部加在一起,如果没有出现差错就应该是1111111111111111。
虽然根据UDP的检验和,UDP提供了相应的差错检测,但它对差错恢复无能无力。UDP的某种实现知识丢弃受损的报文段;其他实现是将受损的报文段交给应用程序并给出警告。
可靠数据传输原理
面向连接的传输TCP
话不多说,传送门:我是传送门
拥塞控制原理|TCP拥塞控制
[参考]