跳转至主要内容

从 TCP_OS 迁移到 STCP 的用户会立即注意到,TCP_OS 的 netstat 命令显示的 TCP 统计信息要比 STCP 显示的丰富得多。STCP 的 netstat 统计信息仅显示标准的 RFC-1213 TCP 统计信息。 诸如重复确认、重复数据、乱序数据包或窗口探测计数等统计信息均未包含。不过,其中许多统计信息可通过 `analyze_system stcp_meters` 请求的输出获取。请尝试以下命令:
analyze_system -request_line ‘stcp_meters -all -long’ -quit

stcp_meters 命令的参数和输出结果在《OpenVOS 系统分析(R073)》手册中有详细说明,该手册可从stratus 获取。其数据集与 TCP_OS 命令的不同;虽然缺少了“因重传而丢弃的连接”等某些计数器,但也新增了“接收后窗口设为零”等计数器。 一个贴心的设计是,计数器的百分比会自动计算并显示出来。

TCP_OS 和 STCP 的 netstat TCP 统计数据存在一个主要问题,即它们针对的是整个模块;所有曾存在过的连接(至少在当前启动后)的计数器数据会被相加,从而得出显示的数值。一些仅影响一个或少数几个连接的问题(例如不可接受的重传),可能会在总计数中被忽略。 默认的 stcp_meters 行为也存在同样的问题,它会汇总自当前启动以来所有连接的计数器数据;但是,stcp_meters 可以接受单个连接的 PCB(协议控制块)地址作为参数,并仅显示该连接的统计信息;这使其成为一个重要的调试辅助工具。要查找 PCB 地址,请使用 PCB_addr 参数执行 netstat 命令,是的,PCB 必须大写。 netstat 执行完成后,找到目标连接,其 PCB 地址就在第一列中。

以下宏可为您完成此操作:运行 netstat,定位目标连接,提取 PCB 地址,然后运行 stcp_meters。该宏既可以接受已知的 PCB 地址(此时将跳过上述大部分步骤),也可以接受两个字符串来帮助识别目标连接。 使用说明指出,这些字符串应分别为本地 IP 地址、本地端口号、远程 IP 地址和远程端口号。这样可以唯一标识该连接,但您也可以使用更少的参数,例如仅提供本地端口号和远程 IP 地址。如果指定的字符串匹配到多个连接,则会显示每个连接的统计数据。netstat 命令行将显示在统计数据上方,以标识这些统计数据对应的具体连接。

若要显示所有已建立连接的统计信息,请尝试执行以下命令:
get_connection_meters -local ESTAB -remote :

在此情况下,这些参数并不表示本地和远程地址,而是表示 ESTABLISHED 状态以及任何包含冒号的行。

& get_connection_meters 由此开始\
&\
& get_connection_meters.cm\
&   版本 1.0 09-04-06\
& stratus
&\
&begin_parameters\
 LOCAL  选项 (-local),字符串\
 REMOTE 选项 (-remote),字符串
PCB    选项 (-pcb),字符串
&end_parameters
&
& 确保多余内容不会被输出到结果文件中
&if (process_type) = 'batch' &then &do
set_ready -format off
&echo no_command_lines
&end
&
&if (length &PCB&) > 0
&then &do
   &if (length &LOCAL&) > 0
       &then &goto ERROR_ADDRESS
   &if (length &REMOTE&) > 0
       &then &goto ERROR_ADDRESS
   analyze_system -request_line (string stcp_meters &PCB& -all -long) -quit
   &return
&end
&
&set_string FILE_1 (process_dir)>connect_stcp_meters_1.temp
&set_string FILE_2 (process_dir)>connect_stcp_meters_2.temp
&
&if (length &LOCAL&) = 0
    &then &goto ERROR_ADDRESS
&if (length &REMOTE&) = 0
    &then &goto ERROR_ADDRESS
附加默认输出 &FILE_1&
netstat -numeric -PCB_addr
解除默认输出
&
显示 &FILE_1& -匹配 &LOCAL& -输出路径 &FILE_2& -无头部
显示 &FILE_2& -匹配 &REMOTE& -输出路径 &FILE_1& -无标题
&
&附加输入
分析系统
&设置 LINE 1
&标记 AGAIN
&设置字符串 CONNECTION (内容 &FILE_1& &LINE& -保留)
&if (end_of_file &FILE_1&) = 1 &then &do
    &if &LINE& = 1
       &then &goto ERROR_NOT_FOUND
       &else &do
          quit
          &return
       &end
&end
&
..display_line ============================================================
..display_line ============================================================
..display_line
..display_line &CONNECTION&
..display_line
&set_string PCB (substr (string &CONNECTION&) 1 8)
stcp_meters &PCB& -all -long
&set LINE (calc &LINE& + 1)
&goto AGAIN
&
&
&label ERROR_NOT_FOUND
quit
display_line
display_line
display_line 无法在 netstat 输出中找到指定的连接
display_line &LOCAL& &REMOTE&
&return
&
&label ERROR_ADDRESS
display_line
display_line 您必须输入 PCB 或同时输入本地和远程 IP:端口:
display_line 使用方法:
display_line '        get_connection_meters -pcb PCB'
display_line '    或'
display_line '        get_connection_meters -local IP:PORT -remote IP:PORT'
&return
&
& get_connection_meters 到此结束