从TCP_OS转到STCP的人一开始就会发现,TCP_OS的netstat命令显示的TCP统计数据集比STCP显示的要丰富不少。STCP的netstat统计显示的是标准的RFC-1213 TCP统计。像重复的 acks、重复的数据、失序的数据包或窗口探针计数等统计信息都没有。然而,许多统计信息都可以作为 analyze_system stcp_meters 请求显示的输出的一部分。请尝试使用以下命令
analyze_system -request_line 'stcp_meters -all -long' -quit (退出)
stcp_meters参数和输出在OpenVOS系统分析(R073)手册中都有记载,可以在http://stratadoc。stratus.com。数据集和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 & [email protected] & &begin_parameters LOCAL选项(-local),字符串。 REMOTE选项(-remote),字符串。 PCB选项(-pcb),字符串 &end_parameters & 并确保无关的东西不会被回传到结果文件中。 &if (process_type) = 'batch' &then &do set_ready -format off &echo no_command_lines 终止 & &if (length &PCB&) > 0 &然后&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 归来 终止 & &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 attach_default_output &FILE_1&。 netstat -numeric -PCB_addr detach_default_output & display &FILE_1& -match &LOCAL& -output_path &FILE_2& -no_header。 display &FILE_2& -match &REMOTE& -output_path &FILE_1& -no_header。 & &attach_input 分析系统 &set LINE 1 &label AGAIN &set_string CONNECTION (contents &FILE_1& &LINE& -hold) &if (end_of_file &FILE_1&) = 1 &then &do &if &LINE& = 1 &then &goto ERROR_NOT_FOUND &else &do 退出 归来 终止 终止 & ..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。 退出 显示行 显示行 display_line 在netstat输出中找不到指定的连接。 display_line &LOCAL&&REMOTE&&。 归来 & &label ERROR_ADDRESS。 显示行 display_line 你必须输入一个PCB或BOTH本地和远程IP:端口。 display_line 的用法。 display_line ' get_connection_meters -pcb PCB'。 display_line '或' display_line ' get_connection_meters -local IP:PORT -remote IP:PORT' 归来 & & get_connection_meters在此结束。