第四章OSI传输层new.ppt
文本预览下载声明
* Kurose and Ross forgot to say anything about wrapping the carry and adding it to low order bit * Milisecond毫秒msec Microsecond微秒 Stink:糟糕的 * * 应该是黄色 * 上图表示了糊涂窗口综合症的情况, * 我们假设在服务器上运行保活定时器(当然在客户机上也可以运行保活定时器)。当服务器发现客户机很长时间没有动作。它发出探询报文段。客户机可能出现如下4种处理过程 客户主机依然正常工作,并从服务器可达。 客户主机已经崩溃,并且关闭或者正在重新启动。服务器收不到客户机的回答,这样服务器在间隔75秒,一共重试10后,认为客户机不可达到。服务器终止这个连接。 客户主机崩溃并已经重新启动。这时服务器将收到一个对其保活探查的响应,但是这个响应是一个复位,使得服务器终止这个连接。 客户机正常运行,但是从服务器不可达。处理情况和2一样。 持续计时器(persistence timer)。 TCP 为每一个连接设有一个持续计时器。 只要 TCP 连接的一方收到对方的零窗口通知,就启动持续计时器。 若持续计时器设置的时间到期,就发送一个零窗口探测报文段(仅携带 1 字节的数据),而对方就在确认这个探测报文段时给出了现在的窗口值。 若窗口仍然是零,则收到这个报文段的一方就重新设置持续计时器。 若窗口不是零,则死锁的僵局就可以打破了。 糊涂窗口综合症(RFC 813) 发送方很快的发送数据给接收方,接收方的接收缓存被占满。接收方会给发送方发送一个窗口大小为0的窗口更新报文。如果这时接收方向上层发送了很少的一串数据,那么接收方的缓存就有很小的一部分空闲出来。如果这时接收方向发送方发送一个很小的窗口更新报文,这时发送方可以发送很小的一段报文。这个情况也许会永远持续下去,这就是糊涂窗口综合症。 Clark提出了一个解决办法,禁止接收方发送小字节的窗口大小修正。只有接收方能处理连接建立时它通知最大窗口数据段大小,或者它的缓存区有1/2为空时,它才能发送窗口大小修正信息。 服务器 用三次握手建立 TCP 连接 SYN = 1, seq = x CLOSED CLOSED 主动打开 被动打开 A B 客户 TCP 的连接建立 A 的 TCP 向 B 发出连接请求报文段,其首部中的 同步位 SYN = 1,并选择序号 seq = x,表明传送 数据时的第一个数据字节的序号是 x。 服务器 用三次握手建立 TCP 连接 SYN = 1, seq = x TCP 的连接建立 SYN = 1, ACK = 1, seq = y, ack= x ? 1 B 的 TCP 收到连接请求报文段后,如同意,则 发回确认。 B 在确认报文段中应使 SYN = 1,使 ACK = 1, 其确认号 ack = x ? 1,自己选择的序号 seq = y。 CLOSED CLOSED 主动打开 被动打开 A 客户 B 服务器 SYN = 1, seq = x ACK = 1, seq = x + 1, ack = y ? 1 SYN = 1, ACK = 1, seq = y, ack= x ? 1 A 收到此报文段后向 B 给出确认,其 ACK = 1, 确认号 ack = y ? 1。 A 的 TCP 通知上层应用进程,连接已经建立。 主动打开 被动打开 A 客户 B 通知 应用 进程 服务器 SYN = 1, seq = x ACK = 1, seq = x + 1, ack = y ? 1 数据传送 SYN = 1, ACK = 1, seq = y, ack= x ? 1 B 的 TCP 收到主机 A 的确认后,也通知其上层 应用进程:TCP 连接已经建立。 以后就可以传送数据了。 主动打开 被动打开 A 客户 B 通知 应用 进程 ACK = 0, seq = x + 1, ack = y ? 1 在数据包丢失、重复和延迟的情况下, 3次握手法是保证连接无二义性的充要条件。 FIN = 1, seq = u 主动关闭 数据传送 A B 客户 服务器 CLOSED TCP 的连接释放 数据传输结束后,通信的双方都可释放连接。 现在 A 的应用进程先向其 TCP 发出连接释放 报文段,并停止再发送数据,主动关闭 TCP 连接。 A 把连接释放报文段首部的 FIN = 1,其序号 seq = u,等待 B 的确认。 被动关闭 FIN = 1, seq = u ACK = 1, seq = v, ack= u ? 1 数据传送 通知
显示全部