第三章运输层3.1概述:1,运输层协议为不同主机上的应用进程彼此之间提供了逻辑通信.2,运输层协议是在端系统而不是网络中的路由器中实现的。
也只工作在端系统。
中间路由器既不识别也不处理运输层加载应用层报文的任何信息。
3,网络应用程序可以使用多种运输层协议。
因特网有TCP和UDP两种运输层协议。
4,运输层位于网络层之上,为运行在不同主机上的应用程序之间提供了逻辑通信;而网络层则提供了主机之间的逻辑通信。
5,运输层提供的服务受到了底层网络协议的服务模型的限制。
6,因特网的网络层协议IP协议的服务模型是尽力而为的服务,它不做任何确保,不保证报文段的按序交付,更不保证报文段中的数据完整性。
是不可靠服务7,TCP和U DP最基本的任务是,将两个端系统间IP的交付服务扩展为运行在两个端系统上的进程之间的交付服务。
8,运输层的多路复用与多路分解:将主机间交付扩展到进程间交付。
9,进程间数据交付和差错检查是两种最低限度的运输层服务。
也是UDP所能提供的仅有的两种服务。
10,TCP通过流量控制、序号、确认和定时器等技术,能抱着正确而有序地将数据从发送进程交付给接收进程。
TCP还提供拥塞控制功能。
3.2 多路复用与多路分解1,接收主机中的运输层实际上并没有把数据直接交付给进程,而是通过一个中间的套接字来传递;每个套接字都有唯一的标识符,其格式决定了它是UDP还是TCP套接字。
2,多路分解demultiplexing:将运输层报文段中的数据交付到正确的套接字的工作。
运输层通过检查每个运输层报文段的几个字段来标识套接字,然后将报文段定向到该套接字。
多路复用multiplexing:从在源主机的不同套接字中收集数据,并为每个数据块封装上首部信息(在多路分解时使用)从而生产报文段,然后将报文段传递到网络层的工作。
多路复用的要求:1,套接字有唯一的标识符;2,每个报文段有特殊字段来指示该报文段所要交付的套接字。
这些特殊字段是源端口号字段(作为“返回地址”的一部分,在回发报文段时使用)和目的端口号字段。
端口号有16比特;0到1023范围的端口号成为周知端口号是受严格限制,保留给一些周知的应用层协议使用的。
多路分解的实现:主机上的每个套接字被分配一个端口号,当报文段到达主机时,运输层检查报文段中的目的端口号,并将其定向到相应的套接字。
然后报文段中的数据通过套接字进入其所连接的进程。
3,无连接的多路复用与多路分解DatagramSocket mySocket = new DatagramSocket(19157); //端口号也可以不指定,运输层//会自动为其分配一个端口号(1024到65535之间)。
一个UDP套接字是由一个包含目的IP地址和目的端口号的二元组来全面标识的。
如果两个UDP报文段有不同的源IP地址或端口号,但具有相同的目的IP地址和端口号,它们将通过相同的套接字被定向到相同的目的进程。
4,面向连接的多路复用与多路分解TCP套接字与UDP套接字不同在于,它是由一个四元组标识的(源IP地址,源端口号,目的IP地址,目的端口号)。
如果两个TCP报文段具有不同的源IP地址或源端口号,它们将被定向到两个不同的套接字,除非TCP携带了初始创建连接的请求。
在使用多线程时,多个套接字连接到相同的进程。
即进程与套接字不是一一对应的。
3.3 UDP 无连接运输优点:1,应用层能更好地控制要发送的数据和发送时间;2,无需连接建立;3,无连接状态;分组首部开销小(TCP20个,UDP8个字节)。
UDP潜在的一个严重问题是,因为它没有拥塞控制,将可能引发UDP发送方和接收方的高丢包率,并挤垮有拥塞控制的TCP会话。
使用UDP的应用也是可以实现可靠的数据传输的,这需要在应用程序自身中建立可靠性机制来完成。
UDP报文段结构:源端口号,目的端口号,长度,检查和(提供差错检测,但不进行修复),报文。
UDP检查和:对报文段中所有16比特字的和进行1的补运算,求和时遇到的任何溢出都被丢弃。
用于检查和确定当UDP报文段从源到目的地时,其中的鼻涕是否发生了变化。
UDP并不提供差错恢复。
其差错检查遵循了端到端的设计原则。
3.4 可靠数据传输的原理1,rdt 1.0 完全可靠信道上的可靠数据传输。
2,rdt 2.0 具有比特差错信道上的可靠数据传输:使用了差错检查、肯定确认与否认;重传。
是一种停等协议。
发送放不会发送一块新的数据,直到发送方确认接收方已正确接收当前分组为止。
缺陷:ACK 或NAK分组受损的可能性没有考虑到。
解决方案:首先,引入冗余分组,即只要接收到含糊不清的ACK或NAK,就要求重传数据。
然后,在数据分组中添加一个新字段,让发送方对其数据分组进行编号,即将发送数据分组的序号放在该字段。
这样,接收方只需检查序号即可确定收到的分组是否一次重传,或是新的分组。
Rdt2.2:取消了NAK的使用,而使用冗余ACK3,rdt 3.0 在具有比特差错的丢包信道上的可靠数据传输。
使用基于时间的重传机制。
只要到达一定的时间,则不论是分组丢失(可能是发送过去的分组丢失了,也可能是接收方返回的ACK丢失了),还是超时(发送分组、处理分组、返回ACK的时间过长),发送方都进行重传动作。
这时如果产生冗余分组,利用序号的方法即可解决(在rdt2.0中以提出)4,可靠数据传输协议的要点:检查和(差错检查)、序号(解决冗余分组)、定时器(定时重传)、肯定确认和否认。
5,Rdt3.0还存在一个核心问题:它是一个停等协议。
性能不够好。
解决方案:使用流水线技术,允许发送放发送多个分组而无需等待确认。
流水线引入的问题:a,必须增加序号范围,因为每个传输的分组必须有一个唯一的序号。
b,协议的发送和接收方也许必须缓存多个分组。
c,解决流水线的差错恢复有两种基本方法:回退N步和选择重传。
6,回退N步协议go-back-N,允许发送方传输多个分组而不需等待确认,但它也受限于在流水线中未确认的分组数布恩那个超过最大允许数N。
GBN发送方必须响应三种类型的事件:a,上层的调用。
需要先检查发送窗口是否已满。
b,收到ack。
对于序号为N的分组的确认用于累积确认。
c,超时事件。
发送方重发所有已发送但还未被确认的分组。
在GBN中接收方丢弃所有失序分组。
因为接收方必须按序将数据交付给上层。
7,选择重传:通过让发送方仅重传那些它怀疑在接收方出错(丢失或受损)的分组从而避免了不必要的重传。
这种个别的、按需的重传要求接收方逐个地确认正确接受的分组。
SR 接收方将确认一个正确接受的分组而不管其是否有序。
失序的分组将被缓存直到丢失分组(即序号更小的分组)都被收到为止。
8,总结:p1499,通过假定一个分组在网络中“生存”的时间不会超过某个固定最长时间来确保一个序号在“确信”任何先前发送的序号为X的分组都不再在网络中之前不被再重新使用3.5 面向连接的运输:TCP1,面向连接服务:必须握手,建立确保数据传输所需的参数。
2,连接状态只保存在两个端系统。
只在端系统中运行。
3,提供点对点的全双工服务。
4,Socket clientSocket = new Socket(“hostname”,portNumber).5,MSS,最大报文段长度,TCP可从缓存中取出并放入报文段中的最大数据量(不包括TCP首部)。
MTU,最大传输单元。
6,TCP连接包括:一台主机上的缓存、变量和与另一个进程连接的套接字,以及另一台主机上的一套缓存、变量和与一个进程连接的套接字。
在这两台主机之间的网络要素(路由器、交换机和中继器)中没有为该连接分配任何缓存和变量。
7,TCP报文段结构:(首部字段+数据字段(包含一块应用数据))MSS限制了报文段的数据字段的最大长度;当TCP发送个大文件时,通常将文件分割成长度为MSS的若干块。
报文段结构:首部:源和目的端口号,用于多路分解/复用送至或来自上层的数据;检查和字段32比特的序号字段和32比特的确认号字段。
被TCP发送方和接收方用于实现可靠传输服务,是很关键的部分。
一个大文件被分成很多MSS大小的报文段,每个报文段有一个序号,这个序号表示的也就是数据字段首字节的序号。
确认号表示接收方期望从发送方接收到的下个字节的序号。
16比特接受窗口,用于流量控制。
4比特首部长字段,指示了以32比特字为单位的TCP首部长度。
可选与变长的选项字段。
导致首部长度可变。
6比特标志字段URG(紧急)ACK(指示确认字段中的值有效)PSH(接收方应该立即将数据交给上层)RST SYN FIN(这三者用于建立和拆除连接)8,往返时延的估计与超时:1,估计往返时延:SampleRTT,从该报文段被发出(交给IP)到其确认被接收到的时间量。
EstimateRTT=(1-a)*EstimateRTT + a*SampleRTTDevRTT(往返时延偏差)=(1-β)*(DevRTT+β*|SampleRTT-EstimateRTT|)表示往返时延的波动情况。
2,设置和管理重传超时间隔TimeoutInterval=EstimateRTT+4*DevRTT。
9,TCP可靠数据传输1,TCP发送方与传输和重传有关的3个事件:(高度简化版本)A,从上层应用程序接受数据:将数据封装在一个报文段中,并将其交给IP.B,超时事件。
TCP通过重传引起超时事件的报文段来响应。
随后重启计时器。
C,一个来自接收方的确认报文段(ACK)到达。
TCP将ACK的值与变量sendBase(最早未被确认的字节的序号)比较,采用累积确认。
如果还有未被确认的报文段,则需要重启计时器。
2,加倍超时时间间隔在TCP实现中,每当超时事件发生时,TCP重传具有最小序号的还未被确认的报文段,但是每一次TCP重传都会把下一次的超时时间间隔设为先前之的两倍,而不是根据EstimateRTT和DevRTT来计算。
3,快速重传:使用冗余ACK,当接收方接收到一个大于期望序号的报文段时,它检测到了数据流中的一个间隔,即有报文段丢失。
它就对按序接收到的最后一个报文段发送一个冗余ACK,当发送方接收到3个冗余ACK,就进行快速重传,即在该报文段的定时器过期之前就进行重传。
4,TCP是GBN还是SR?TCP协议的一种修改使用了选择确认,它允许接收方有选择地确认失序报文段,而不是累积地确认最后一个正确接收的报文段。
这种机制与选择重传相结合(跳过那些已被接收方选择性确认过的报文段的重传)。
5,流量控制:消除发送方使接收方缓存溢出的可能性。
TCP通过让发送方保留一个被称为接受窗口(received window)的变量来提供流量控制。
在接收方,因为TCP不允许已分配的缓存溢出,LastByteRcvd-LastByteRead<=RcvBuffer RcvWindow=RcvBuffer-[LastByteRead-LastByteRcvd].接收方把RcvWindow的当前值放入它发给发送方的每个报文段接受窗口字段中,以通知发送方它在该链接的缓存中还有多少可用空间。