网络层提供的主机之间的逻辑通信,而运输层为运行在不同主机上的进程之间提供的逻辑通信。 运输层协议能够提供的服务,常常受制于底层网络层协议的服务模型,但是即使底层网络协议是不可靠的,也就是说网络层协议会使分组丢失篡改和冗余,运输层协议,也能为应用程序提供可靠的数据传输服务。 什么是运输层多路复用与多路分解?,是将由网络层提供的主机到主机交付服务,延伸到为运行在主机上的应用程序,提供进程到进程的交互服务,一个进程有一个或多个套接字,这个套接字是应用层与运输层的接口,将运输层报文段中的数据交付到正确的套接字的工作称为**多路分解***,在原主机从不同套接字中收集数据块儿,并为每个数据块封装上首部信息,从而生成报文段,然后将报文传输到网络层,所有这些工作称为多路复用***。 无连接的多路复用与多路分解实现: Udp套接字是由一个二元组来全面标识的,该二元组包含一个目的IP地址和一个目的端口号,如果两个udp报文段有不同的源IP地址和源端口号,但具有相同的目的IP地址和目的端口号,这两个报文段将通过相同的目的套接字,被定向到相同的目的进程。 那么源端口号与源IP地址有什么用呢?他们是会被用作返回地址的一部分,当server端需要向client端发送数据时,会提取报文段中的源IP和源端口号作为发送的目的端。 面向连接的多路复用与多路分解, TCP套接字由一个4元组标示,这个4元组包括源IP地址,源端口号,目的IP地址及目的端口号。两个具有不同源IP地址和源端口号的到达TCP报文段,将被定向到两个不同的套接字。 在Web server 端,连接套镜字与进程之间并不总是存在着一一对应的关系,因为一套系统进程的资源是有限的,所以在当今高性能的web服务器通常只有一个进程,但是会为每一个新的客户连接,创建一个具有新连接套接字的新线程。
一步一步完善传输协议 版本1:假定底层信道完全可靠,即无 bit error,无 package lost,发送端与接收端各只有一个状态机。 版本2:为了处理Bit 受损,设计出版本 2, 增加 ACK NAK 反馈机制,—但是如果 ACK NAK本身出错了怎么办—发送方重传—接收方如何识别是新报还是重传包—对发送数据进行排序。 一旦ack1,或者pkt1 loss,sender端就需要等待超时,这样影响效率,浪费时间。 所以这叫停等协议。 为了提高效率,引入流水线可靠数据传输协议, 流水线协议的特点:
增加了序号范围,因为流水线相当于同时传输多个分组,而每个分组需要一个唯一端序号。sender 和 receiver 需要缓存多个分组。解决流水线差错恢复有两种方式: (go-back-N) (selective repeat). 什么是go-back-N 和 selective repeat,呢,见下篇。