TCP/IP 协议笔记六

一、TCP的半关闭

  T C P提供了连接的一端在结束它的发送后还能接收来自另一端数据的能力。
  为了使用这个特性,编程接口必须为应用程序提供一种方式来说明“我已经完成了数据传送,因此发送一个文件结束( F I N)给另一端,但我还想接收另一端发来的数据,直到它给我发来文件结束(F I N)”。
  如果应用程序不调用c l o s e而调用s h u t d o w n,且第2个参数值为1,则插口的A P I支持半关闭。然而,大多数的应用程序通过调用close终止两个方向的连接。图1 8 - 1 0显示了一个半关闭的典型例子。让左方的客户端开始半关闭,当然也可以由另一端开始。开始的两个报文段和图1 8 - 4是相同的:初始端发出的 F I N,接着是另一端对这个 F I N的A C K报文段。但后面就和图1 8 - 4不同,因为接收半关闭的一方仍能发送数据。我们只显示一个数据报文段和一个A C K报文段,但可能发送了许多数据报文段(将在第 1 9章讨论数据报文段和确认报文段的交换)。当收到半关闭的一端在完成它的数据传送后,将发送一个F I N关闭这个方向的连接,这将传送一个文件结束符给发起这个半关闭的应用进程。当对第二个 F I N进行确认后,这个连接便彻底关闭了。

 

 二、最找报文字段

  最大报文段长度(M S S)表示T C P传往另一端的最大块数据的长度。当一个连接建立时,连接的双方都要通告各自的 M S S。我们已经见过 M S S都是1 0 2 4。这导致I P数据报通常是4 0字节长:2 0字节的T C P首部和2 0字节的I P首部。
  在有些书中,将它看作可“协商”选项。它并不是任何条件下都可协商。当建立一个连接时,每一方都有用于通告它期望接收的 M S S选项(M S S选项只能出现在S Y N报文段中)。如果一方不接收来自另一方的 M S S值,则M S S就定为默认值5 3 6字节(这个默认值允许 2 0字节的I P首部和2 0字节的T C P首部以适合5 7 6字节I P数据报)。
  一般说来,如果没有分段发生, M S S还是越大越好(这也并不总是正确,参见图 2 4 - 3和图2 4 - 4中的例子)。报文段越大允许每个报文段传送的数据就越多,相对 I P和T C P首部有更高的网络利用率。当 T C P发送一个S Y N时,或者是因为一个本地应用进程想发起一个连接,或者是因为另一端的主机收到了一个连接请求,它能将 M S S值设置为外出接口上的 M T U长度减去固定的I P首部和T C P首部长度。对于一个以太网, M S S值可达1 4 6 0字节。使用IEEE 802.3的封装(参见2 . 2节),它的M S S可达1 4 5 2字节。
  如果目的I P地址为“非本地的 ( n o n l o c a l )”,M S S通常的默认值为 5 3 6。而区分地址是本地还是非本地是简单的,如果目的 I P地址的网络号与子网号都和我们的相同,则是本地的;如果目的I P地址的网络号与我们的完全不同,则是非本地的;如果目的 I P地址的网络号与我们的相同而子网号与我们的不同,则可能是本地的,也可能是非本地的。大多数 T C P实现版都提供了一个配置选项(附录E和图E - 1),让系统管理员说明不同的子网是属于本地还是非本地。
  这个选项的设置将确定 M S S可以选择尽可能的大(达到外出接口的 M T U长度)或是默认值5 3 6。
  M S S让主机限制另一端发送数据报的长度。加上主机也能控制它发送数据报的长度,这将使以较小M T U连接到一个网络上的主机避免分段。
  
  只有当一端的主机以小于5 7 6字节的M T U直接连接到一个网络中,避免这种分段才会有效。如果两端的主机都连接到以太网上,都采用 5 3 6的M S S,但中间网络采用 2 9 6的M T U,也将会出现分段。使用路径上的M T U发现机制(参见2 4 . 2节)是关于这个问题的唯一方法。
 
三、建立连接的超时
  
  有很多情况导致无法建立连接。一种情况是服务器主机没有处于正常状态
  在这个输出中有趣的一点是客户间隔多长时间发送一个 S Y N,试图建立连接。第2个S Y N与第1个的间隔是5 . 8秒,而第3个与第2个的间隔是2 4秒。
posted @ 2021-01-29 13:48  无边落寞  阅读(67)  评论(0)    收藏  举报