专栏首页cwl_Java速读原著-TCP/IP(连接建立的超时)

速读原著-TCP/IP(连接建立的超时)

第18章 TCP连接的建立与终止

18.3 连接建立的超时

有很多情况导致无法建立连接。一种情况是服务器主机没有处于正常状态。为了模拟这种情况,我们断开服务器主机的电缆线,然后向它发出t e l n e t命令。图1 8 - 6显示了t c p d u m p的输出。

在这个输出中有趣的一点是客户间隔多长时间发送一个 S Y N,试图建立连接。第2个S Y N与第1个的间隔是5 . 8秒,而第3个与第2个的间隔是2 4秒。

作为一个附注,这个例子运行3 8分钟后客户重新启动。这对应初始序号为291 008 001(约为3 8×6 0×6 4 0 0 0×2)。我们曾经介绍过使用典型的伯克利实现版的系统将初始序号初始化为1,然后每隔0 . 5秒就增加64 000。

另外,因为这是系统启动后的第一个TCP连接,因此客户的端口号是1024。 图1 8 - 6中没有显示客户端在放弃建立连接尝试前进行 S Y N重传的时间。为了了解它我们必须对t e l n e t命令进行计时:

时间差值是 7 6秒。大多数伯克利系统将建立一个新连接的最长时间限制为 7 5秒。我们将在2 1 . 4节看到由客户发出的第 3个分组大约在1 6 : 2 5 : 2 9超时, 客户在它第3个分组发出后4 8秒而不是7 5秒后放弃连接。

18.3.1 第一次超时时间

在图1 8 - 6中一个令人困惑的问题是第一次超时时间为 5 . 8秒,接近6秒,但不准确,相比之下第二个超时时间几乎准确地为 2 4秒。运行十多次测试,发现第一次超时时间在 5 . 5 9秒~ 5 . 9 3秒之间变化。然而,第二次超时时间则总是 2 4 . 0 0秒(精确到小数点后面两位)。

这是因为B S D版的T C P软件采用一种500 ms的定时器。这种500 ms的定时器用于确定本章中所有的各种各样的T C P超时。当我们键入t e l n e t命令,将建立一个6秒的定时器(1 2个时钟滴答(t i c k)),但它可能在之后的 5 . 5秒~ 6秒内的任意时刻超时。图 1 8 - 7显示了这一发生过程。

尽管定时器初始化为 1 2个时钟滴答,但定时计数器会在设置后的第一个 0~500 ms中的任意时刻减1。从那以后,定时计数器大约每隔 500 ms减1,但在第1个500 ms内是可变的(我们使用限定词“大约”是因为在 T C P每隔500 ms获得系统控制的瞬间,系统内核可能会优先处理其他中断)。

当滴答计数器为 0时,6秒的定时器便会超时(见图 1 8 - 7),这个定时器会在以后的 2 4秒 (4 8个滴答)重新复位。之后的下一个定时器将更接近 2 4秒,因为当T C P的500 ms定时器被内核调用时,它就会被修改一次。

18.3.2 服务类型字段

在图1 8 - 6中,出现了符号 [ tos 0x10 ]。这是I P数据报内的服务类型(TO S)字段(参见图3 - 2)。B S D / 3 8 6中的Te l n e t客户进程将这个字段设置为最小时延。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 速读原著-TCP/IP(TCP经受时延的确认)

    在图1 9 - 2中有一些与本节将要论及的时间有关的细微之处。图 1 9 - 3表示了图1 9 - 2中数据交换的时间系列(在该时间系列中,去掉了所有的窗口通告...

    cwl_java
  • 速读原著-TCP/IP(ICMP报文的类型)

    各种类型的I C M P报文如图6 - 3所示,不同类型由报文中的类型字段和代码字段来共同决定。图中的最后两列表明 I C M P报文是一份查询报文还是一份差错...

    cwl_java
  • 经典面试题-CORBA 是什么用途是什么

    CORBA 标准是公共对象请求代理结构(Common Object Request BrokerArchitecture),由对象管理组织(Object Man...

    cwl_java
  • Java 中的四种引用类型

    一、背景二、简介1. 强引用 StrongReference2. 弱引用 WeakReference3. 软引用 SoftReference4. 虚引用 Pha...

    芋道源码
  • Jquery和Ajax

    1、  ajax基础知识(http://www.0377joyous.com/archives/484.html) 2、  load()函数示例代码 <butt...

    苦咖啡
  • 深入理解JVM虚拟机13:再谈四种引用及GC实践

    本系列文章将整理到我在GitHub上的《Java面试指南》仓库,更多精彩内容请到我的仓库里查看

    Java技术江湖
  • 新形势下互联网金融发展问题研究报告

    腾讯研究院金融课题组 一、互联网金融现状   互联网金融是指传统金融机构与互联网企业利用互联网技术和信息通信技术实现资金融通、支付、投资和信息中介服务的新型...

    腾讯研究院
  • [一对一课程] 之 设计并实现第一个JS模块?

    这篇文章不太好写,谈目前网上的多数教程,谈到JS模块必贴代码,而我一向不喜欢在公众号文章里写代码,因为难以阅读。所以我尝试从“构思”的角度,来写一下本文。 在昨...

    web前端教室
  • 前端基础-CSS通配选择器

    cwl_java
  • React-Native简介

    React-Native 基于目前React来开发IOS原生应用,Android版本将在年底推出。 为什么需要React-Native 目前主流的应用大体分成三...

    IMWeb前端团队

扫码关注云+社区

领取腾讯云代金券