[IT认证]第5章 传输层协议与传输层软件编程方法.ppt

上传人:音乐台 文档编号:1995476 上传时间:2019-01-29 格式:PPT 页数:92 大小:1.78MB
返回 下载 相关 举报
[IT认证]第5章 传输层协议与传输层软件编程方法.ppt_第1页
第1页 / 共92页
[IT认证]第5章 传输层协议与传输层软件编程方法.ppt_第2页
第2页 / 共92页
[IT认证]第5章 传输层协议与传输层软件编程方法.ppt_第3页
第3页 / 共92页
亲,该文档总共92页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《[IT认证]第5章 传输层协议与传输层软件编程方法.ppt》由会员分享,可在线阅读,更多相关《[IT认证]第5章 传输层协议与传输层软件编程方法.ppt(92页珍藏版)》请在三一文库上搜索。

1、,计算机网络技术教程 自顶向下的分析与设计方法 吴功宜 吴英 编著,1,第5章 传输层协议与传输层 软件编程基本方法,2,主要内容,3,5.1 传输层的基本概念,5.1.1 传输层的基本功能 计算机网络本质的活动是实现分布在不同地理位置的联网主机之间的进程通信,以实现各种网络服务功能; 传输层的主要作用就是要实现分布式进程通信。,4,传输层的作用,5,“端-端”进程通信服务的基本概念,传输层协议可以屏蔽网络层及以下各层实现技术的差异性,弥补网络层所能提供的服务的不足,使得应用层在完成各种网络应用系统时只需要使用传输层提供的“端-端”进程通信服务,而不需要考虑互联网络数据传输的细节问题; 从“点

2、-点”通信到“端-端”通信是一次质的飞跃,为此传输层需要引入很多新的概念和机制。,6,5.1.2 传输层与应用层、网络层之间的关系,7,TPDU结构与IP分组、帧结构的关系,传输层之间传输的报文称为传输协议数据单元(TPDU); TPDU有效载荷是应用层的数据; 传输层在有效载荷TPDU之前加上TPDU头,就形成了TPDU传输协议数据单元。,8,5.1.3 应用进程、传输层接口与套接字,9,进程标识的问题,在一台计算机中,不同进程可以用进程号或进程标识(process ID 唯一地标识。 进程号又称端口号(Port number)。 在网络环境中,标识一个进程必须同时使用IP地址与端口号。 套

3、接字(socket)或套接字地址(socket address)表示一个IP地址与对应的一个进程标识。,10,应用程序编程接口(API)的概念,服务器套接字地址唯一地定义服务器应用程序; 客户机套接字地址唯一地定义客户机应用程序; 由于套接字是建立网络应用程序的可编程接口,因此套接字又称为应用程序编程接口(API)。,11,5.1.4 网络环境中应用进程标识,基于C/S的应用程序进程标识方法,12,端口号(065535)的分配方法,端口号的类型: 熟知端口号(01023)或全局端口号或公认端口号,统一分配和控制的 注册端口号(102449151),用户根据需要在IANA注册 临时端口号(491

4、5265535),客户机程序使用,由客户机的TCP/UDP随机选取的,13,IANA对端口号数值划分的规定,在TCP/IP协议族中,端口号的数值是取 065535之间的整数; IANA对于端口号数值范围的划分:,14,熟知端口号的分配方法,UDP的熟知端口号的分配,15,TCP的熟知端口号的分配,16,多重协议的识别,UNIX操作系统的TCP/IP的传输层就有TCP协议和UDP协议; 网络环境中一个进程的全网惟一的标识需要一个三元组来表示:协议,本地地址,本地端口号。,网络环境中一个完整的进程通信标识需要一个五元组来表示: 协议 本地地址 本地端口号 远地地址 远地端口号 在UNIX操作系统中

5、: 三元组又叫做半相关half-association 五元组叫做一个相关association 例如:客户端的套接字是“202.1.2.5:3022”,服务器的是“41.8.22.51:80”,则标识客户端与服务器的TCP连接的五元组应该是“TCP, 202.1.2.5:3022, 41.8.22.51:80”,5.1.5 传输层的多路复用与多路分解,19,5.2 传输层协议的特点与比较 5.2.1 TCP与UDP协议的比较,20,5.2.2 TCP、UDP协议与应用层协议的关系,21,5.3 UDP协议,5.3.1 UDP协议的主要特点: UDP是一种无连接的、不可靠的传输层协议; UDP

6、是一种面向报文的传输层协议。,22,5.3.2 UDP报文格式,UDP报文有固定8字节的报头。,23,UDP报头主要字段:,端口号 端口号字段包括源端口号和目的端口号; 端口号字段长度为16位(2个字节); 源端口号表示发送端进程端口号,目的端口号表示接收端进程端口号; 如果源进程是客户端,则源端口号是由UDP软件分配的临时端口号; 服务器使用的是熟知端口号。,24,长度 长度字段长度也是16位(2字节),它定义了包括报头在内的用户数据报的总长度; 用户数据报的长度最大为65535字节,最小是8字节; 如果长度字段是8字节,那么说明该用户数据报只有报头,而没有数据。,25,校验和 UDP校验和

7、字段是可选项; UDP校验和用来检验整个用户数据报(包括报头)在传输中是否出现差错; UDP校验和包括三个部分:伪报头(pseudo header)、UDP报头与应用层数据。,26,5.3.3 UDP校验和的基本概念与计算示例 发送端计算UDP校验和的例子,27,5.3.4 UDP协议适用的范围,确定应用程序在传输层是否采用UDP协议的原则: 系统对性能的要求高于对数据完整性的要求; 需要“简短快捷”的数据交换; 需要多播和广播的应用; UDP协议是一种适用于实时语音与视频传输的传输层协议。,28,5.4 TCP协议,5.4.1 TCP协议的主要特点 支持面向连接的传输服务 应用程序在使用TC

8、P传送数据之前,必须在源进程端口与目的进程端口之间建立一条传输连接; 每个TCP连接唯一地用双方端口号来标识; 每个TCP连接为通信双方的一次进程通信提供服务。,29,支持字节流的传输,流(stream)相当于一个管道,从一端放入什么内容,从另一端可以照原样取出什么内容,它描述了一个不出现丢失、重复和乱序的数据传输过程; TCP在传输过程中将应用程序提交的数据看成是一连串的、无结构的字节流; 因此接收端应用程序数据字节的起始与终结位置必须由应用程序自己确定。,30,TCP协议 支持字节 流传输 示意图,31,支持全双工服务,TCP允许通信双方的应用程序在任何时候都可以发送数据; 由于通信的双方

9、都设置有发送和接收缓冲区,应用程序将要发送的数据字节提交给发送缓冲区,数据字节的实际发送过程由TCP协议来控制; 接收端在接收到数据字节之后也将它存放到接收缓冲区,高层应用程序在它合适的时间到缓冲区中读取数据。,32,支持同时建立多个并发的TCP连接,根据应用程序的需要,TCP协议支持一个服务器与多个客户端同时建立多个TCP连接; 也支持一个客户端与多个服务器同时建立多个TCP连接; TCP软件将分别管理多个TCP连接。,33,支持可靠传输服务,TCP是一种可靠的传输服务协议,它使用确认机制检查数据是否安全和完整地到达,并且提供拥塞控制功能; TCP支持可靠数据通信的关键是对发送和接收的数据进

10、行跟踪、确认与重传; 传输层传输的可靠性是建立在网络层基础上,同时也就会受到它们的限制。,34,总结,TCP协议的特点是: 面向连接 面向字节流 支持全双工 支持并发连接 提供确认重传与拥塞控制,35,5.4.2 TCP报文格式,TCP报头长度为2060字节,其中固定部分长度为20字 节;选项部分长度可变,最多为40字节。,36,TCP报头包括的主要字段:,端口号 端口号字段包括源端口号与目的端口号; 每个端口号字段长度为16 位(2字节),分别表示发送该报文段的应用进程的源端口号与接收进程的目的端口号。 序号 序号字段长度为32位(4个字节),序号范围在0(232-1),即042849672

11、95; TCP是面向字节流的,它要为发送字节流中的每个字节都按顺序编号。,37,确认号 确认号字段长度为32 位(4字节); 确认号表示一个进程已经正确接收序号为N的字节,要求发送方下一个应该发送序号为N+1的字节的报文段。 报头长度 报头长度字段的长度为4位; TCP报头长度是以4字节为一个单元来计算的,实际报头长度是在2060字节,因此这个字段的值是在5至15之间。,38,控制字段 控制字段定义了6种不同的控制位或标志位; 控制字段将在TCP的连接建立和终止、流量控制,以及数据传送中发挥作用。,39,窗口 窗口字段长度为16位; 窗口的长度值是在065 535之间; 窗口字段值指示对方在下

12、一个报文中最多发送的字节数,作为发送方确定发送窗口的依据; 窗口字段值是动态变化的。 紧急指针 紧急指针字段的长度为16位,只有当紧急标志URG=1时,这个位字段才有效,这时的报文段中包括紧急数据; TCP软件要在优先处理完紧急数据之后才能够恢复正常操作。,40,选项 TCP报头可以有多达40字节的选项字段; 选项包括:单字节选项和多字节选项; 单字节选项:选项结束和无操作; 多字节选项:最大报文段长度、窗口扩大因子以 及时间戳。 校验和 计算校验和与UDP校验和的方法相同; UDP校验和是可选的,TCP协议是必须有的; TCP校验和同样需要伪报头,唯一不同的是协议字段的值是6。,41,TCP

13、最大段长度(MSS),理解MSS时需要注意以下几个问题: TCP报文段的最大长度与窗口长度的概念不同。 设置窗口长度的目的是为了保证TCP字节流传输的可靠性,用来通知发送方下一次可以连续传输的字节数; 最大段长度MSS是在构成一个TCP 报文段时最多可以在报文的数据字段中放置的数据字节数量; MSS值的确定与每次传输的窗口大小无关; MSS是TCP报文中数据部分的最大字节数限定值,不包括报头长度。,42,MSS值的选择应该考虑的因素:,协议开销 TCP报文的长度等于报头部分加上数据部分,选择MSS值太小会增大协议开销所占的比例。 IP分片 如果MSS值选择得比较大,受到IP分组长度的限制,较长

14、的报文段在IP层将会被分片传输; 分片的结果同样会增加网络层的开销和传输出错的概率。,43,发送和接收缓冲区的限制 为了保证TCP面向字节流传输,建立TCP连接的发送端与接收端都必须设置发送和接收缓冲区; MSS值的大小直接影响到发送和接收缓冲区设置的大小与使用效率。,44,MSS的默认值,默认的MSS值为536字节; 编程人员希望选择其他的MSS值; 可以在建立TCP连接的时候使用SYN报文中最大段长度选项来协商; TCP允许连接的双方可以选择使用不同的MSS值。,45,5.4.3 TCP连接 建立与释放,46,TCP连接建立、报文传输与连接释放的过程: TCP连接建立 TCP连接建立需要经

15、过“三次握手”的过程; 报文传输 当客户进程与服务器进程之间的TCP传输连接建立之后,客户端的应用进程与服务器端的应用进程就可以使用这个连接,进行全双工的字节流传输; TCP连接释放 TCP传输连接的释放过程很复杂,客户端与服务器端都可以主动提出释放连接请求; 客户端主动提出请求的连接释放需要有“四次握手”的过程。,47,保持计时器与时间等待计时器,TCP协议设置了4种计时器: 重传计时器 坚持计时器 保持计时器 时间等待计时器 保持计时器与时间等待计时器与TCP连接的运行状态,以及连接释放中可能存在的问题有关。,48,重传计时器 为了控制丢失的或丢弃的报文段,TCP使用了处理报文段的确认的等

16、待重传时间的重传计时器。 坚持计时器 TCP为每一个连接使用一个坚持计时器; 当发送方的TCP收到一个窗口大小为零的确认时,就需要启动坚持计时器; 当坚持计时器期限到时,发送方的TCP就发送一个特殊的探测报文段。,49,保持计时器 保持计时器用来防止TCP连接处以长时期空闲状态; 时间等待计时器 时间等待计时器是在连接终止期间使用的; 时间等待计时器的值通常设置为一个报文寿命的两倍。,50,5.4.4 TCP滑动窗口与确认、重传机制,TCP差错控制的实现方法: 校验和 确认 超时重传,51,滑动窗口协议的基本内容,字节流传输的状态分类,52,发送窗口与可用窗口,53,窗口发送与字节类型的变化,

17、54,窗口滑动与字节类型的变化,55,TCP滑动窗口协议的特点,TCP使用发送与接收缓冲区,以及滑动窗口机制控制TCP连接上的数据传输; TCP滑动窗口是面向字节的,它可以起到差错控制与流量控制的作用; 接收端可以在任何时候发送确认,窗口大小可以由接收端根据需要增大或减小; 发送方根据自身的状况,根据接收到的窗口信息发送字节流,不一定要发送整个窗口大小的数据。,56,选择重发策略,接收字节流序号不连续的例子,57,接收字节流序号不连续的处理方法,拉回方式 如果采取拉回方式处理接收的字节流序号不连续,需要在丢失第2个报文段时,不管之后的报文段是否已经正确接收,从第2个报文段第一个字节序号为151

18、开始,重发所有的4个报文段; 拉回方式效率很低。,58,选择重发方式 选择重发(SACK)方式允许接收端在收到与前面接收的字节流序号不连续时,如果这些字节的序号都在接收窗口之内,则首先接收这些字节,然后将丢失的字节流序号通知发送方,发送方只需要重发丢失的报文段,而不需要重发已经接收的报文段; RFC2018给出了选择重发方式接收端向发送方报告丢失字节信息的报文格式。,59,重传计时器,重传计时器用来处理报文确认与等待重传时间; 重传计时器的工作过程:,60,设定重传计时器的时间值需要注意的几个问题,设定重传计时器适当的时间值对于协议至关重要。 一个主机同时与其他两个主机建立两条TCP连接,那么

19、它就需要分别为每个TCP连接启动一个重传计时器,不可能对不同的TCP连接使用一个重传计时器; 由于互联网在不同时间段的用户数量、流量与传输延迟变化也很大,因此即使是相同的两个主机在不同时间建立的TCP连接,并且完成同样的Web访问操作,客户端与服务器端之间的报文传输延迟也不会相同。 在互联网环境中为TCP连接确定合适的重传定时器数值是很困难的,必然要选择使用一种动态的自适应重传方法。RFC2988“计算TCP重传定时器”文档详细讨论了这个问题。,61,计算重传时间的方法,对于每个TCP连接都要维持一个RTT变量,它是当前到达目的结点在最佳估计往返延时值。自适应重传定时基于往返时间(RTT),计

20、算重传时间的公式为: Timeout=RTT 其中,为一个大于1的常数加权因子; RTT为估算的往返时间; RTT是一个加权平均值,其计算公式为: RTT=旧RTT+(1-)最新RTT测量值 其中,旧RTT是上一个往返时间估算值; 最新RTT测量值是实际测出的前一个报文的往返时间(样本); 也是一个常数加权因子(01)。,62,讨论:,决定RTT对延迟变化的反应速度; 当接近1时,短暂的延迟变化对RTT不起作用; 当接近0时,RTT将紧紧跟随延迟变化。 因子很难确定; 当接近1时,TCP能迅速检测报文丢失,及时重传,减少等待时间,但是可能引起很多重传报文; 当太大时,重传报文减少,但是等待确认

21、的时间太长; 作为折衷,TCP推荐=2; 以往返时间(RTT)为基础的重传超时可以是动态的。因此,使用最多的是设重传时间为RTT的两倍。,63,已知:收到了3个连接的确认报文段,它们比相应的数据 报文段发送时间分别滞后26ms、32ms与24ms。 假设:=0.9。 求:新的估计往返延时值为多少? 解:从题意中可以找出以下的已知条件: =0.9,旧RTT=30ms,M1=26ms,M2=32ms,M3=24ms。 根据公式可以计算出: RTT1=0.930+(1-0.9)2629.6(ms) RTT2=0.929.6+(1-0.9)3229.8(ms) RTT3=0.929.8+(1-0.9)

22、2429.3(ms) 答案:新的往返延时估计值分别为29.6(ms)、 29.8(ms)与29.3(ms)。,64,5.4.5 TCP窗口与流量控制,通知窗口的概念 通知窗口(advertised window)是接收端根据接收能力确定的窗口值; 接收端将通知窗口值放在TCP报文头部中发送给发送端; 在数据交互的过程中,接收端可以根据自己的资源情况,随时动态调整对方的发送窗口大小。,65,如果接收端应用程序读取数据的速度与数据到达的速度一样快,接收端将在每个确认中发送一个非零的窗口通告; 如果发送端发送的速度比接收端要快,由于接收端来不及处理到达到的字节,最终将造成缓冲区被全部占用,等待处理。

23、这时,接收端只能发出一个“零窗口”的通告; 当发送端接收到一个“零窗口”通告时,必须停止发送,直到接收端重新通告一个非零窗口。,66,TCP利用窗口进行流量控制的过程,67,坚持计时器,假定接收端的TCP通告窗口大小为零。发送方的TCP就停止传送报文,直到接收端的TCP发送确认并通告一个非零的窗口大小,这个确认可能会丢失。对方的TCP都在永远地等待着对方,这就可能出现了死锁; 为了防止死锁,TCP为每个连接使用一个坚持计时器; 当发送方的TCP收到一个窗口大小为零的确认时,就需要启动坚持计时器; 当坚持计时器期限到时,发送方的TCP就发送一个特殊的报文,称为探测报文; 探测报文提醒接收端的TC

24、P:确认已丢失,必须重传; 坚持计时器的值设置为重传时间值,这个值增大到门限值通常设定为60秒。,68,TCP窗口与拥塞控制,拥塞控制用于防止由于过多的报文进入网络而造成路由器与链路过载情况的发生; 流量控制的重点是放在点-点链路的通信量的局部控制上,而拥塞控制重点是放在进入网络报文量的全局控制上。,69,拥塞控制的基本概念,网络出现拥塞的条件写为: 对网络资源的需求网络资源 拥塞控制 的作用,70,TCP 拥塞 控制 例子,71,快重传与快恢复,72,连续收到3个重复确认的拥塞控制过程,73,发送窗口的概念,在讨论拥塞窗口的概念时曾假设:接收方有足够的缓存空间,发送窗口的大小只由网络拥塞程度

25、确定,但是实际上接收缓存空间一定是有限的; 接收端需要根据自己的接收能力给出一个合适的接收窗口(rwnd),并将它写入到TCP的报头中,通知发送端。接收窗口又称为通知窗口(advertised windows); 从流量控制的角度,发送窗口一定不能超过接收窗口,实际的发送窗口的上限值应该等于接收窗口(rwnd)与拥塞窗口(cwnd)中最小的一个:Min(rwnd,cwnd); rwnd与cwnd中较小的一个限制发送端的报文发送速率。,74,5.4.6 UNIX进程通信实现方法,socket的基本概念,75,socket的类型,流套接字(stream socket) 数据报套接字(datagra

26、m Socket) 原始套接字(raw socket),76,流套接字: 主要用于TCP协议; 提供了双向的、有序的、无重复的、无记录边界的数据传输服务。 数据报套接字: 主要用于UDP协议; 它提供了双向的、无序的、有重复的、有记录边界的数据传输服务。 原始套接字: 主要用于访问底层协议,如IP、ICMP与IGMP等协议; 原始套接字可以保存IP包中的完整IP头部。,77,UNIX socket调用,创建socketsocket() 系统在调用创建应用程序是使用socket(); socket()调用的格式是: socketid = socket(af,type,protocol) sock

27、et()参数: 地址族(af)、类型(type)与协议(protocol) af socket使用的地址类型 type socket使用的服务类型 protocol socket使用的协议 返回值socketid是一个整数(即socket号);,78,指定本地地址bind(),socket()是实现创建socket通信的第一步,它只指定相关五元组中的协议类型,而bind()给出本地地址与本地端口; bind()调用的格式是: bind(socketid,localaddr,addrelen) socketid 本地socket号 localaddr 本地地址 addrelen IP地址的长度,

28、79,建立socket连接connect()与accept(),connect()与accept()调用完成两个相关连接; 意义: 一是指在两个socket之间沟通,二是在传输层建立连接(例如TCP连接); connect()主要用于面向连接的传输服务,而accept()完全用于面向连接的传输服务; 无连接socket进程也可以调用连接connect(),它通知操作系统将来自指定socket的数据送到本socket。,80,accept()调用的格式: newsock = accept(socketid,clientaddr,paddrlen) socketid 本地socket号 Clien

29、taddr client的地址 Paddrlen client socket的长度 返回值newsock是accept()调用后,返回的新的socket号,它是指从server的socket号。 connect()调用的格式: connect(socketid,name,namelen) Socketid 本地socket号 Name server的地址 Namelen server socket长度,81,通过socket()、bind()、connect() 与accept()调用,可以建立一个完整的 五元组: socket()指定协议; bind()指定本地的地址与socket号; co

30、nnect()指定远程主机地址与远程socket号; accept()是确认远程主机地址与远程socket号。,82,同意建立socket连接listen() listen()完全用于面向连接的传输服务,它表示同意接受socket连接; listen()调用的格式是: listen(socketid,quelen) Socketid本地socket号,表示server在此socket号上接受服务请求; Quelen请求的队列长度。,83,发送数据write()、writev()、send()与sendto() 发送数据的socket调用中: write()、writev()、send()面向连

31、接传输 sendto()用于无连接传输 write()、writev()与send()调用的格式: 缓冲发送:write(socketid,buff,bufflen) 集中发送:writev(socketid,vector,vectorlen) 可控缓冲发送:send(socketid,buff,bufflen,flags),84,Socketid本地socket号; buff与bufflen发送缓冲区的指针与大小; vector与vectorlenI/O向量表的指针与大小;flags用于区分write()与send()。 sendto()调用的格式是: sendto(socketid,buf

32、f,bufflen,flags, tobuff,tobufflen) tobuff与tobufflen接收缓冲区的指针与大小。,85,接收数据read()、readv()与recv()与recvfrom(),接收数据的socket调用中: read()、readv()与recv()面向连 接传输; recvfrom()无连接传输; 发送数据调用的buff是指针,接收数据调用的buff是实际读出的值。,86,获得服务器信息getservbyname()与gethostbyname(),getservbyname()调用的格式是: port = getservbyname(servtype,pro

33、to) Servtype提供的某种服务; Proto该服务对应的协议; 返回值portServer的熟知端口号; 由于不同协议可以提供同类服务,因此getservbyname()必须指定协议类型。,87,gethostbyname()调用的格式是: hp = gethostbyname(host) host指出Server的主机域名; 返回值hp是主机的IP地址。,88,软件编程模式,面向连接 C/S模式 工作流程,89,无连接C/S模式的工作流程,90,本章总结(1),计算机网络的本质活动是实现分布在不同地理位置的联网主机之间的进程通信,传输层的主要作用就是要实现分布式进程通信; 传输层协议

34、屏蔽网络层及以下各层实现技术的差异性,弥补网络层所能提供服务的不足,应用层在完成各种网络应用时只需使用传输层提供的“端-端”进程通信服务; 应用程序的开发者只能根据需要,在传输层选择TCP或UDP协议,设定相应的参数后,传输层协议在本地主机的操作系统控制之下,为应用程序提供确定的服务;,91,本章总结(2),TCP/IP协议的传输层寻址通过TCP与UDP的端口来实现; TCP协议是一种面向连接、面向字节流传输、可靠的传输层协议,它提供有确认、业务流管理、拥塞控制与丢失重传等功能; UDP协议是一种无连接的、不可靠的传输层协议,它适用于系统对性能的要求高于对数据完整性的要求、需要“简短快捷”的数据交换、需要多播和广播的应用环境。,92,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1