引入

为什么需要运输层

网络层最终解决的问题:
分组从一台主机经过网络到达另一台主机,即主机到主机间的通信。
网络层没有解决的问题: .
主机中谁发送的数据、谁接收数据?
IP分组无序到达目的主机,接收进程如何处理?

运输层的作用

”逻辑通信”的意思是”好像是这样通信,但事实上并非真的这样通信”
从IP层来说,通信的两端是两台主机。但”两台主机之间的通信”这种说法还不够清楚。
严格地讲,两台主机进行通信就是两台主机中的应用进程互相通信。
从运输层的角度看,通信的真正端点并不是主机而是主机中的进程。
也就是说,端到端的通信是应用进程之间的通信。

运输层复用和分用

在一台主机中经常有多个应用进程同时分别和另一台主机中的多个应用进程通信。
根据应用程序的不同需求,运输层需要有两种不同的运输协议:
即面向连接的TCP
无连接的UDP。
表明运输层有一个很重要的功能:
复用(multiplexing)
分用(demultiplexing)。
运输层向高层用户屏蔽了下面网络核心的细节,使应用进程感觉在两个运输层实体之间有一条端到端的逻辑通信信道。

TCP与UDP (逻辑信道的差异性)

运输层的逻辑通信信道的差别:
当运输层采用面向连接的TCP协议时,尽管下面的网络是不可靠的,但这种逻辑通信信道就相当于一条全双工的可靠信道。
当运输层采用无连接的UDP协议时,这种逻辑通信信道是一条不可靠信道。
TCP靠谱,UDP不靠谱。

运输层的两个主要协议

用户数据报协议UDP (User Datagram Protocol)
传输控制协议TCP (Transmission Control Protocol)
两个对等运输实体传送的数据单元称为运输协议数
据单元TPDU (Transport Protocol Data Unit):
TCP传送的数据单位是TCP报文段(segment)。(先编号,再发送)
UDP传送的数据单位是UDP报文或用户数据报。(不分段)、

UDP协议

不需要先建立连接,提供无连接服务。(参考微信和电话的区别)
协议数据单元为UDP报文或用户数据报,
收到UDP报文后,无需任何确认。
UDP不提供可靠交付。
简单、支持单播、多播、广播。
适用于多媒体应用。

TCP协议

提供面向连接的服务。
传送的数据单位协议是TCP报文段(segment)。
TCP不提供广播或多播服务。
收到TCP报文段后,需要确认。
协议复杂、开销大,占用较多的处理机资源。
应用较多:万维网、电子邮件、文件传送等。

注意两点

运输层的UDP用户数据披与网际层的IP数据报有很大区别。
IP数据报要经过互连网中许多路由器的存储转发。
UDP用户数据报是在运输层的端到端抽象的逻辑信道中传送的。
TCP报文段是在运输层抽象的端到端逻辑信道中传送,这种信道是可靠的全双工信道。但这样的信道却不知道究竟经过了哪些路由器,而这些路由器也根本不知道上面的运输层是否建立了TCP连接。

为什么需要”运输层的端口”

运行在计算机中的进程是用进程标识符来标志的。
但应用层的各种应用进程却不应当让计算机操作系统指派它的进程标识符。这是因为在互联网上使用的计算机的操作系统种类很多,而不同的操作系统又使用不同格式的进程标识符。
为了使运行不同操作系统的计算机的应用进程能够互相通信,就必须用统一的方法对TCP/IP体系的应用进程进行标志。

需要解决的问题

由于进程的创建和撤销都是动态的,发送方几乎无法识别其他机器上的进程。
有时我们会改换接收报文的进程,但并不需要通知所有发送方。
我们往往需要利用目的主机提供的功能来识别终点,而不需要知道实现这个功能的进程。
解决这个问题的方法就是在运输层使用协议端口号(protocol port number)
通信的终点是应用进程,但可以把端口想象是通信的终点,只要把要传送的报文交到目的主机的目的端口,剩下的工作(即最后交付目的进程)由TCP来完成。

端口号

端口用一个16位端口号进行标志。
端口号只具有本地意义,即端口号只是为了标志本计算机应用层中的各进程。
两个计算机中的进程要互相通信,不仅必须知道对方的IP地址(为 了找到对方的计算机),而且还要知道对方的端口号(为了找到对方计算机中的应用进程)。

两大类端口

回想一下linux
服务器端使用的端口号
熟知端口,数值一般为0~1023 (全世界都知道的)
登记端口号,数值为1024~49151, 给没有熟知端口号的应用程序使用的。
使用这个范围的端口号必须在IANA登记,以防止重复。
客户端使用的端口号
又称为短暂端口号,数值为49152~65535,留给客户进程暂时使用。
当服务器进程收到客户进程的报文时,就知道了客户进程所使用的动态
端口号。通信结束后,这个端口号可供其他客户进程以后使用。

用户数据报协议UDP

UDP只在IP的数据报服务之上增加了很少一点的功能:
复用和分用的功能
差错检测的功能
虽然UDP用户数据报只能提供不可靠的交付,但UDP在某些方面有其特殊的优点。

UDP的主要特点

不需要建立连接——减少开销和发送数据之前的时延。
尽最大努力交付——即不保证可靠交付。
面向报文的——一次交付一个完整的报文。
没有拥塞控制——网络出现拥塞不会降低源主机的发送速率。
支持多种交互通信——一对一、一对多、多对一和多对多的交互通信。
首部开销小——8个字节,比TCP的20个字节的首部要短。

UDP协议的使用场景

可以重复请求信息的情况下:例如,DNS, DHCP
一次性传小量数据的应用(面向报文的)
时实应用: IP电话、视频会议等
多媒体应用

什么是“面向报文的UDP"

发送方UDP对应用程序交下来的报文,添加首部后就向下交付IP层
应用层交给UDP多长的报文,UDP就照样发送,即一次发送一个报文
既不合并,也不拆分,保留这些报文的边界.
接收方UDP去除UDP报文首部,原封不动地交付上层的应用进程,一次交付一个完整的报文
计算机网络---运输层

伪首部

伪首部不是UDP真实首部,仅仅是为了计算检验和。
可以理解为UDP的两次检查:
一次是对IP地址进行检验,确认该IP分组是发送给本机的;
一次是对端口号和数据进行检验,确认交给哪个进程并且数据是无误的。
发送方:
1.增加伪首部,UDP首部检验和填充0;
2.数据部分填充0至4字节整数倍
3.计算机检验和,伪首部+首部+数据
4.首部填.上检验和
5.删除伪首部,发送UDP数据报
接收方:
1.增加伪首部
2.计算机检验和,伪首部+首部+数据
3.检验和全1无差错,否则丢弃或上交应用进程(附上错误警告)
计算机网络---运输层

相关文章: