第5章传输层协议和传输层软件编程分析.ppt

第5章传输层协议和传输层软件编程分析.ppt

  1. 1、本文档共91页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第5章传输层协议和传输层软件编程分析

5.4.5 TCP窗口与流量控制 通知窗口的概念 通知窗口(advertised window)是接收端根据接收能力确定的窗口值; 接收端将通知窗口值放在TCP报文头部中发送给发送端; 在数据交互的过程中,接收端可以根据自己的资源情况,随时动态调整对方的发送窗口大小。 * 如果接收端应用程序读取数据的速度与数据到达的速度一样快,接收端将在每个确认中发送一个非零的窗口通告; 如果发送端发送的速度比接收端要快,由于接收端来不及处理到达到的字节,最终将造成缓冲区被全部占用,等待处理。这时,接收端只能发出一个“零窗口”的通告; 当发送端接收到一个“零窗口”通告时,必须停止发送,直到接收端重新通告一个非零窗口。 * TCP利用窗口进行流量控制的过程 * 坚持计时器 假定接收端的TCP通告窗口大小为零。发送方的TCP就停止传送报文,直到接收端的TCP发送确认并通告一个非零的窗口大小,这个确认可能会丢失。对方的TCP都在永远地等待着对方,这就可能出现了死锁; 为了防止死锁,TCP为每个连接使用一个坚持计时器; 当发送方的TCP收到一个窗口大小为零的确认时,就需要启动坚持计时器; 当坚持计时器期限到时,发送方的TCP就发送一个特殊的报文,称为探测报文; 探测报文提醒接收端的TCP:确认已丢失,必须重传; 坚持计时器的值设置为重传时间值,这个值增大到门限值通常设定为60秒。 * TCP窗口与拥塞控制 拥塞控制用于防止由于过多的报文进入网络而造成路由器与链路过载情况的发生; 流量控制的重点是放在点-点链路的通信量的局部控制上,而拥塞控制重点是放在进入网络报文量的全局控制上。 * 拥塞控制的基本概念 网络出现拥塞的条件写为: ∑对网络资源的需求>网络资源 拥塞控制 的作用 * TCP 拥塞 控制 例子 * 快重传与快恢复 * 连续收到3个重复确认的拥塞控制过程 * 发送窗口的概念 在讨论拥塞窗口的概念时曾假设:接收方有足够的缓存空间,发送窗口的大小只由网络拥塞程度确定,但是实际上接收缓存空间一定是有限的; 接收端需要根据自己的接收能力给出一个合适的接收窗口(rwnd),并将它写入到TCP的报头中,通知发送端。接收窗口又称为通知窗口(advertised windows); 从流量控制的角度,发送窗口一定不能超过接收窗口,实际的发送窗口的上限值应该等于接收窗口(rwnd)与拥塞窗口(cwnd)中最小的一个:Min(rwnd,cwnd); rwnd与cwnd中较小的一个限制发送端的报文发送速率。 * 5.4.6 UNIX进程通信实现方法 socket的基本概念 * socket的类型 流套接字(stream socket) 数据报套接字(datagram Socket) 原始套接字(raw socket) * 流套接字: 主要用于TCP协议; 提供了双向的、有序的、无重复的、无记录边界的数据传输服务。 数据报套接字: 主要用于UDP协议; 它提供了双向的、无序的、有重复的、有记录边界的数据传输服务。 原始套接字: 主要用于访问底层协议,如IP、ICMP与IGMP等协议; 原始套接字可以保存IP包中的完整IP头部。 * UNIX socket调用 创建socket—socket() 系统在调用创建应用程序是使用socket(); socket()调用的格式是: socketid = socket(af,type,protocol) socket()参数: 地址族(af)、类型(type)与协议(protocol) af — socket使用的地址类型 type — socket使用的服务类型 protocol — socket使用的协议 返回值socketid是一个整数(即socket号); * 指定本地地址—bind() socket()是实现创建socket通信的第一步,它只指定相关五元组中的协议类型,而bind()给出本地地址与本地端口; bind()调用的格式是: bind(socketid,localaddr,addrelen) socketid — 本地socket号 localaddr — 本地地址 addrelen — IP地址的长度 * 建立socket连接—connect()与accept() connect()与accept()调用完成两个相关连接; 意义: 一是指在两个socket之间沟通,二是在传输层建立连接(例如TCP连接); connect()主要用于面向连接的传输服务,而accept()完全用于面

您可能关注的文档

文档评论(0)

wbjsn + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档