网络与分布式计算复习笔记
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第三章运输层
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的使用,而使用冗余ACK
3,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,超时事件。发送方重发所有已发送但还未被确认的分组。