第09章传输层.docx
- 文档编号:4313269
- 上传时间:2022-11-29
- 格式:DOCX
- 页数:14
- 大小:400.76KB
第09章传输层.docx
《第09章传输层.docx》由会员分享,可在线阅读,更多相关《第09章传输层.docx(14页珍藏版)》请在冰豆网上搜索。
第09章传输层
第09章传输层
一传输层概述
1传输层的功能
⏹提供端到端的交付服务
⏹分段和重组
⏹提供端到端的可靠通信保证(检错机制、应答机制、超时重发机制)
⏹按序交付(缓冲机制)
⏹流量控制(窗口机制)
⏹拥塞控制
2什么是端到端的交付
端到端的交付实际是一个多路复用和多路分解的过程,下面的例子有助于我们理解传输层的多路复用和多路分解功能
我们先考察公司之间通过邮政系统互发信件的情景:
公司的收发室为每个部门分配了一个信箱,各个部门都把要发出去的信件放到各自的信箱里,并从信箱里取走发给本部门的信件;收发室的工作人员负责从各部门的信箱里收集要发出去的信件,然后交给每天到家门口来的邮政车,以及从邮政车上取下发往本公司各部门的信件并分投到各部门的信箱之中
主机之间通信的情景跟公司间通信的情景很相似:
主机中各个应用进程将要发出去的数据块放到各自的传输层服务访问点(TSAP)中,并从各自的TSAP中取走发给本进程的数据块;传输层从各个进程的TSAP中收集要发出去的数据块,给它们加上传输层首部,构成报文段,交给网络层(这叫做多路复用);传输层接收来自网络层的报文段,根据报文段的首部信息将它们分别定向各到目标进程的TSAP(这叫做多路分解)
公司=主机
部门=应用进程
收发室=运输层
邮政系统=网络层
信箱=传输层服务访问点TSAP
3端口(Port)和套接字(Socket)
⏹端口就是传输层服务访问点TSAP,每个网络应用进程都有1到多个端口,其作用相当于信箱:
网络应用进程将要发送的数据块放在各自的端口中;传输层从各网络应用进程的端口中收集数据块,给它们加上源、目端口号等控制字段,构成报文段,然后交网络层传送;传输层接收来自网络层的数据报,根据它们的目的端口号字段将它们包含的数据定向到恰当的端口中;网络应用进程从各自的端口中取走发给它们的数据块;端口通常就是报文队列,如上图所示
⏹端口号在一个端系统内有多个端口,端口号就是端口标识,也就是传输层地址
⏹端系统中的端口总是和运行于其上的一个网络应用进程相关联,从这个意义上讲,在一个端系统内,端口号同时也是网络应用进程的标识
⏹有两类端口号:
一类是周知端口号,编号范围是0~1023,每当开发一种新的网络服务程序,必须给它分配一个周知端口号,比如FTP服务器的端口号是21,HTTP服务器的端口号是80,等等;另一类是一般端口号,用来随时分配给请求通信的客户进程
⏹端口号仅具有本地意义,在一个端系统上运行的多个网络应用进程的端口号不能重叠,运行在不同的端系统上的网络应用进程的端口号可以重叠,比如运行在多个端系统上的HTTP服务器进程的端口号都是80。
为了唯一地标识一个网络应用进程的端口,除端口号外,还必须加上IP地址,IP地址加端口号就是所谓的套接字;在TCP/IP协议中,UDP套接字是一个2元组:
(IP地址,端口号);TCP套接字是一个4元组:
(源IP地址,源端口号,目的IP地址,目的端口号)
二互联网的传输层协议
1互联网的两个传输层协议
互联网的传输层协议有两个——传输控制协议TCP和用户数据报协议UDP。
TCP提供可靠的、面向连接的运输服务,UDP提供不可靠的、无连接的运输服务
两个对等的传输层实体在通信时传送的数据单元叫作传输层协议数据单元TPDU;TCP传送的协议数据单元是TCP报文段;UDP传送的协议数据单元是UDP报文或用户数据报
2用户数据报协议UDP
1)UDP概述
⏹UDP提供不可靠的、无连接的运输服务
⏹UDP只在IP的数据报服务之上增加了很少一点的功能,也就是端口的功能和差错检测的功能。
UDP不提供差错恢复、流量控制和拥塞控制功能,不保证按序交付
⏹发送数据时无须事先建立连接,收到一个UDP报文时无须应答
⏹UDP的优点:
UDP的主机无须维护复杂的连接状态表;UDP用户数据报只有8字节的首部开销;网络出现拥塞时不会使源主机的发送速率降低。
这对某些实时应用是很重要的
2)UDP用户数据报的格式
3传输控制协议TCP
1)TCP概述
⏹TCP是面向连接的协议,即位于两个端系统中的一对应用进程在交换数据前,这两个端系统中的TCP必需事先交换一系列用于控制目的的报文段,目的是为那一对进程建立一个TCP连接。
建立TCP连接实质就是两个端系统中的TCP为连接的双方分配资源,初始化若干状态变量
⏹一个TCP连接包含以下要素:
一台主机上的缓存、一组变量、与一个进程关联的套接字,以及另一台主机上的缓存、一组变量、与一个进程关联的套接字
⏹TCP连接既不是电路交换网络中的端到端TDM或FDM电路,也不是一条虚电路,原因在于TCP连接状态仅保存在端系统中,中继结点不会维持TCP连接状态
⏹TCP连接的双方以全双工方式通信,图中为了简洁只表现了一个方向上的数据流。
TCP连接仅支持点对点方式,不支持多点方式,因此TCP不支持广播和多播
⏹一旦建立起TCP连接,两个应用进程就可以交换数据了,大致的过程如上图所示,同样是为了简洁没有表现出IP和链路层的动作
⏹发送进程发送数据的速度和接收进程接收数据的速度不相同,TCP需要缓存暂存数据。
每个方向上都有两个缓存,发送缓存和接收缓存,缓存的数据结构可能是环形字节队列,如下图所示。
发送缓存中的的位置分为3类:
白色为空位置,发送进程可以将数据填入到空位置;浅灰色位置存放的是TCP将要要发送的字节;深灰色位置存放的字节已发送出去,但还没被确认,一旦其中的字节被确认,存放被确认字节的位置即可被发送进程再利用。
接收缓存中的位置分为2类:
白色表示空闲位置,从网络接收的数据存放到这个区域;灰色位置存放已接收的字节,这些字节可以被接收进程读取,当其中的字节接收进程被读取后,其位置可被再利用
2)TCP报文段首部格式
⏹源端口号(2B)和目的端口号(2B)源端口号就是发放方进程的端口号,目的端口号就是接收方进程的端口号。
TCP借助于这两个字段实现多路复用和多路分解功能
⏹序号(4B)序号字段的值指示本报文段所携带的数据的首字节序号。
比如A、B两个进程建立了TCP连接,A通过该连接向B发送了500000B,假设TCP这50000B数据分成500个片段,每个片段段长度为1000B,第一个片段的首字节编号为0,第二个片段的首字节编号为1000,第三个片段的首字节编号为2000,……。
然后TCP会将这500个片段封装成500个报文段交网络层发送,则第一个报文段的序号字段填入0,第二个报文段的序号字段填入1000,第三个报文段的序号字段填入2000,……
⏹确认号(4B)期望收到对方的下一个报文段的数据的首字节序号
⏹首部长度(4b)由于存在选项字段,所以要设首部长度字段指示TCP首部的字节数。
需要强调的是该字段的单位是32比特字
⏹保留(6b)留着以后使用,目前应置为0
⏹紧急比特URG(1b)为1表示紧急指针字段有效。
它告诉系统此报文段中有紧急数据(相当于高优先级数据)应尽快传送
⏹确认比特ACK(1b)为1表示确认号字段有效
⏹急迫比特PSH(1b)接收方TCP收到PSH位置1的报文段后,会立即交付接收方应用进程,而不是等接收缓存满后再上交
⏹复位比特RST(1b)为1表示TCP连接出现严重错误,需立即释放连接,然后重建TCP连接
⏹同步比特SYN(1b)为1表示是一个连接请求或连接接受报文段
⏹终止比特FIN(1b)为1表示此报文段的发送方已发完数据,请求释放连接
⏹窗口(2B)用来控制对方发送的数据量,单位是字节。
TCP连接的一端根据设置的缓存空间大小确定自己的接收窗口大小,然后通知对方以确定对方的发送窗口的上限
⏹检查和(2B)检验和字段检验的范围包括首部和数据这两部分
⏹紧急指针(2B)指出本报文段中紧急数据的最后一个字节的序号
⏹选项TCP只规定了一种选项,即最大报文段长度MSS,该字段旨在告诉对方TCP,我的缓存所能接收的报文段的数据字段的最大长度是MSS个字节
3)TCP如何确保传输的可靠性
TCP确保传输可靠性的措施包括计算校验和、给要发送的数据以字节为单位编号、在报文段中捎带确认信息、重传
TCP如何计算检查和?
TCP通过计算检查和提供检错功能,校验的范围包括首部、数据和伪首部;伪首部长度为12B,其中包括了源IP地址(4B)、目的IP地址(4B)、协议号、报文段长度等字段,伪首部仅仅用于计算检查和;在计算检查和时,临时将TCP首部中的检查和字段置0;如果数据部分的长度是奇数个字节,则在其后临时补一个全0字节,计算完检查和后删除该字节;将伪首部、首部、数据看成是一个16位长的字序列,将所有的字进行二进制反码求和,即最高位上有进位时不进位,而是在和的最低位上加1,然后将求和的结果取反,得到的结果就是检查和
TCP如何给要发送的数据编号?
TCP把一个连接中发送的所有数据字节都编了号,且两个方向上的数据流中的字节编号是彼此独立的。
编号不一定总是从0开始,TCP生成一个0~232-1之间的随机数作为第一个字节的编号。
比如主机A中的进程1通过TCP连接向主机B中的进程2一共发送了50000字节的数据,这些数据被主机A中的TCP看成是一个字节流,字节流的首字节序号是0,其后的字节序号依次是1、2、3、……、49999
假设主机A中的TCP将这50000B数据等分成500个的数据块,每个数据块的大小是1000B,则第一个数据块的首字节序号是0,第二个数据块的首字节序号是1000,第三个数据块的首字节序号是2000,依次类推
主机A中的TCP将这500个数据块封装成500个报文段交网络层发送,它将在第一个报文段的序号字段填入0,在第二个报文段的序号字段填入1000,在第3个报文段的序号字段中填入2000,依次类推。
一言蔽之,报文段中的序号字段的值就是它所携带的数据块的首字节序号
TCP如何对收到的数据进行确认?
规则1一方向另一方发送报文段时,通过报文段的确认号字段告诉对方它期待的下一个数据字节的序号是多少。
比如主机A中的进程1和主机B中的进程2通过TCP连接交换数据,在某一时刻,主机B中的TCP收到一个报文段,其中包含了进程1发给进程2的数据,假设该报文段的确认号字段的值为ACKN,于是主机B中的TCP就明白了:
进程2发给进程1的数据中,序号为ACKN-1的字节以及在它之前的字节已经被主机A中的TCP收到,正期待接收序号为ACKN的字节
规则2如果一方没有数据要发送,并且它接收到对方一个按序到达的报文段,同时前一个按序到达的报文段已经确认过了,它会等待500毫秒,如果500毫秒内没有收到对方下一个按序到达的报文段,它会向对方发一个不包含数据的ACK报文段,通过其中的确认号字段告诉对方它期待的下一个数据字节的序号;ACK报文段不携带数据,不消耗序号,也不用确认
规则3如果一方收到按序到达的报文段,前一个按序到达报文段还没有确认,它立即向对方发送ACK报文段
规则4接收端收到一个失序到达的报文段,使得接收到的数据中产生空隙,接收端立即发送ACK报文段,以告诉对方它期待收到的下一个数据字节的序号
规则5接收端收到一个能补空隙的报文段,接收端立即发送ACK报文段,以告诉对方它期待的下一个数据字节的序号
规则6接收端收到一个重复到达的报文段,接收端立即发送ACK报文段,以告诉对方它期待的下一个数据字节的序号
TCP的重传机制
TCP设置了一个定时器和最久未被确认的报文段关联,另外TCP设置了一个SendBase变量记录最久未被确认的、最小的字节序号;TCP会重传引发超时的报文段,以期纠正传输错误;我们通过一个简化的TCP发送方进程理解TCP的超时重传机制
NextSeqNum=InitiaSeqNumber
SendBase=InitialSeqNumber
Loop(forever){
Switch(event)
event:
datareceivedfromApplicationabove
createTCPsegmentwithsequencenumberNextSeqNum
if(timercurrentlynotrunning)starttimer
passsegmenttoIP
NextSeqNum=NextSeqNum+length(data)
break;
event:
timertimeout
retransmitnot-yet-acknowledgedsegmentwithsmallestsequencenumber
starttimer
break;
event:
ACKreceived,withACKfieldvalueofy
if(y>SendBase){
SendBase=y
if(therearecurrentlynot-yet-acknowledgedsegment)starttimer}
break;
}
除了超时引发重传外,还有一种情况会引发重传,即当发送方收到3个重复的ACK报文段时,发送方会立即重传跟在被重复确认的报文段之后的报文段,而不用等到计时器超时,这种情况叫快速重传。
如上图所示
5)TCP的流量控制机制
流量控制就是接收方对发送方发送数据的速率进行控制,目的是为了避免发送方发送数据太快以至于使接收方的缓存溢出
TCP采用滑动窗口机制提供流量控制功能。
TCP为建立了TCP连接的两个进程分别设置了一个名为发送窗口的变量,可以把发送窗口理解为一个序号集合,序号落在窗口内的数据字节允许发送,序号落在窗口之外的数据字节不允许发送。
如上图所示
窗口可以合拢、展开以及回缩:
合拢指窗口左沿向右移动,这意味着某些已发送的字节得到确认;展开指窗口右沿向右移动,这意味着可以从发送缓存中取更多新的字节发送;回缩右沿向左移动,这意味着本来可以发送的字节现在不允许发送了,这是最不希望出现的
一方的发送窗口的大小为MIN(对方接收窗口的大小rwnd,拥塞窗口的大小cwnd);对方接收窗口的大小通常代表对方还有多少接收缓存可用;一方向另一方发送报文段时,通过窗口字段告诉对方我的接收窗口的大小是多少,窗口的工作机制如下图所示
6)TCP的拥塞控制机制
当网络中的端系统向网络中注入了太多的分组,以至于网络中交换机和路由器的缓冲区溢出,拥塞便发生了。
当发生拥塞时,分组时延会急剧增加,而网络的吞吐量会急剧下降
拥塞控制机制分为两大类:
开环拥塞控制和闭环拥塞控制
开环拥塞控制技术用于预防拥塞,包括
⏹在端系统中应用能预防拥塞的重传策略
⏹在端系统中应用能预防拥塞的确认策略
⏹在中继结点上应用恰当的丢包策略等
闭环控制技术用于消除拥塞,包括
⏹当一个路由器发生拥塞时,通知其上游路由器降低分组发送速率
⏹当路由器发生拥塞时,向源端系统发一个分组,告知源点发生了拥塞
⏹让端系统能感知拥塞的发生的征兆,如端系统推迟收到已发分组的确认,从而降低发送分组的速率
⏹中继结点将分组中的某些位置1,以此告知发送方或接收方发生了拥塞
TCP的拥塞控制机制分为3个阶段:
慢开始、拥塞避免和拥塞检测
⏹慢开始指数增加开始时拥塞窗口为1个MSS,在收到确认前仅能发送一个报文段;在超时发生前收到第一个报文段的确认后,拥塞窗口增至2个MSS,即在收到确认前允许发送2个报文段;在超时发生前收到第2、3个报文段的确认后,拥塞窗口增至4个MSS,即在收到确认前允许发送4个报文段;在超时发生前收到第4、5、6、7个报文段的确认后,拥塞窗口增至8个MSS;……;即拥塞窗口以指数方式增长;当拥塞窗口达到慢开始门限值时,便进入到拥塞避免阶段
⏹拥塞避免加法增加进入拥塞避免阶段后,拥塞窗口以线性方式增长,即当窗口中的报文段的确认全部收到后,拥塞窗口加1个MSS
⏹拥塞检测乘法减少端系统是在要重发一个报文段时意识到拥塞发生了;重发报文段有两种情况,一种是发生超时,另一种是收到3个重复的ACK;如果发生超时,TCP将慢开始门限值设为发送窗口的一半,拥塞窗口设为1,重新进入慢开始阶段;如果收到3个重复的ACK,TCP将慢开始门限值设为发送窗口的一半,拥塞窗口设为慢开始门限值,进入拥塞避免阶段
7)TCP的连接管理
传输层的连接有3个阶段:
连接建立、数据传输和连接释放
之所以要有连接建立过程,目的在于
⏹使连接的双方知道对方的存在
⏹使得双方能协商一些参数,如最大报文长度、窗口大小、服务质量等
⏹对运输层实体的资源进行分配,如缓存、连接表中的项目等。
连接表包含以下字段:
连接号、连接状态、本地IP、本地端口号、远端IP、远端端口号
使用TCP协议进行通信的两个网络应用进程通常采用客户机/服务器架构,即其中的一个进程充当客户机的角色,另一个进程充当服务器的角色。
客户机进程主动发起连接建立请求,服务器进程监听并响应来自客户进程的连接建立请求
TCP连接的建立和终止过程如下所述,这里假设服务器进程在主机S运行,客户机进程在主机C上运行
⏹主机S上的服务器进程发被动打开命令,告诉主机S上的TCP,它已准备好接受连接请求,服务器进程进入监听状态
⏹主机C上的客户机进程发主动打开命令,告诉主机C上的TCP,它要和S的服务器进程建立连接
⏹主机C上的TCP给主机S上的TCP发SYN报文段,即SYN位置1的报文段,其序号字段的值X是随机选取。
SYN报文段不包含数据,但消耗了一个序号
⏹主机S上的TCP收到该SYN报文段后,给主机C上的TCP发SYNACK报文段(SYN=1和ACK=1),其确认号字段的值为X+1,序号字段的值Y是随机选取的。
SYNACK报文段不包含数据,但消耗了一个序号
⏹主机C上的TCP收到SYNACK报文段后,给主机S上的TCP发ACK报文段,其确认号字段是Y+1。
然后通知客户进程连接已经建立。
ACK报文段不消耗序号
⏹服务器端的TCP收到ACK报文段后,通知服务器进程连接已经建立
⏹双向的数据交换开始
⏹客户进程发关闭连接命令,告诉主机C上的TCP我已没数据要发送了。
主机C上的TCP向主机S上的TCP发FIN报文段,即FIN位置1的报文段,其序号字段的值U是前面已传送数据的最后一个字节的序号加1
⏹主机S上的TCP收到该FIN报文段后,就发ACK报文段,其序号为X+1,同时通知上层的服务器进程。
此后,客户机进程到服务器进程的连接关闭,而服务器进程到客户机进程的连接仍是打开的,即TCP连接处于半关闭状态。
这时客户进程不再发数据给服务器进程,主机S上的服务器进程仍可发数据给主机C上客户进程,主机C上的TCP报文段后,仍向主机S上的TCP发不含数据ACK报文段
⏹服务器进程发完数据后,通知TCP释放连接,服务器端的TCP发FINACK报文段,其序号字段V是前面已传送数据的最后一个字节的序号加1,确认号字段的值仍为U+1
⏹最后客户端的TCP发ACK报文段,其确认号字段的值为V+1,至此整个连接关闭
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第09章 传输层 09 传输