学习啦>学习电脑>操作系统>Linux教程>

tcpdump命令的使用方法(6)

春健分享

  AFS 请求和回应

  AFS(nt: Andrew 文件系统, Transarc , 未知, 需补充)请求和回应有如下的答应

  src.sport > dst.dport: rx packet-type

  src.sport > dst.dport: rx packet-type service call call-name args

  src.sport > dst.dport: rx packet-type service reply call-name args

  elvis.7001 > pike.afsfs:

  rx data fs call rename old fid 536876964/1/1 ".newsrc.new"

  new fid 536876964/1/1 ".newsrc"

  pike.afsfs > elvis.7001: rx data fs reply rename

  在第一行, 主机elvis 向pike 发送了一个RX数据包.

  这是一个对于文件服务的请求数据包(nt: RX data packet, 发送数据包 , 可理解为发送包过去, 从而请求对方的服务), 这也是一个RPC

  调用的开始(nt: RPC, remote procedure call). 此RPC 请求pike 执行rename(nt: 重命名) 操作, 并指定了相关的参数:

  原目录描述符为536876964/1/1, 原文件名为 '.newsrc.new', 新目录描述符为536876964/1/1, 新文件名为 '.newsrc'.

  主机pike 对此rename操作的RPC请求作了回应(回应表示rename操作成功, 因为回应的是包含数据内容的包而不是异常包).

  一般来说, 所有的'AFS RPC'请求被显示时, 会被冠以一个名字(nt: 即decode, 解码), 这个名字往往就是RPC请求的操作名.

  并且, 这些RPC请求的部分参数在显示时, 也会被冠以一个名字(nt | rt: 即decode, 解码, 一般来说也是取名也很直接, 比如,

  一个interesting 参数, 显示的时候就会直接是'interesting', 含义拗口, 需再翻).

  这种显示格式的设计初衷为'一看就懂', 但对于不熟悉AFS 和 RX 工作原理的人可能不是很

  有用(nt: 还是不用管, 书面吓吓你的, 往下看就行).

  如果 -v(详细)标志被重复给出(nt: 如-vv), tcpdump 会打印出确认包(nt: 可理解为, 与应答包有区别的包)以及附加头部信息

  (nt: 可理解为, 所有包, 而不仅仅是确认包的附加头部信息), 比如, RX call ID(请求包中'请求调用'的ID),

  call number('请求调用'的编号), sequence number(nt: 包顺序号),

  serial number(nt | rt: 可理解为与包中数据相关的另一个顺信号, 具体含义需补充), 请求包的标识. (nt: 接下来一段为重复描述,

  所以略去了), 此外确认包中的MTU协商信息也会被打印出来(nt: 确认包为相对于请求包的确认包, Maximum Transmission Unit, 最大传输单元).

  如果 -v 选项被重复了三次(nt: 如-vvv), 那么AFS应用类型数据包的'安全索引'('security index')以及'服务索引'('service id')将会

  被打印.

  对于表示异常的数据包(nt: abort packet, 可理解为, 此包就是用来通知接受者某种异常已发生), tcpdump 会打印出错误号(error codes).

  但对于Ubik beacon packets(nt: Ubik 灯塔指示包, Ubik可理解为特殊的通信协议, beacon packets, 灯塔数据包, 可理解为指明通信中

  关键信息的一些数据包), 错误号不会被打印, 因为对于Ubik 协议, 异常数据包不是表示错误, 相反却是表示一种肯定应答(nt: 即, yes vote).

  AFS 请求数据量大, 参数也多, 所以要求tcpdump的 snaplen 比较大, 一般可通过启动tcpdump时设置选项'-s 256' 来增大snaplen, 以

  监测AFS 应用通信负载.

  AFS 回应包并不显示标识RPC 属于何种远程调用. 从而, tcpdump 会跟踪最近一段时间内的请求包, 并通过call number(调用编号), service ID

  (服务索引) 来匹配收到的回应包. 如果回应包不是针对最近一段时间内的请求包, tcpdump将无法解析该包.

  KIP AppleTalk协议

  (nt | rt: DDP in UDP可理解为, DDP, The AppleTalk Data Delivery Protocol,

  相当于支持KIP AppleTalk协议栈的网络层协议, 而DDP 本身又是通过UDP来传输的,

  即在UDP 上实现的用于其他网络的网络层,KIP AppleTalk是苹果公司开发的整套网络协议栈).

  AppleTalk DDP 数据包被封装在UDP数据包中, 其解封装(nt: 相当于解码)和相应信息的转储也遵循DDP 包规则.

  (nt:encapsulate, 封装, 相当于编码, de-encapsulate, 解封装, 相当于解码, dump, 转储, 通常就是指对其信息进行打印).

  /etc/atalk.names 文件中包含了AppleTalk 网络和节点的数字标识到名称的对应关系. 其文件格式通常如下所示:

  number name

  1.254 ether

  16.1 icsd-net

  1.254.110 ace

  头两行表示有两个AppleTalk 网络. 第三行给出了特定网络上的主机(一个主机会用3个字节来标识,

  而一个网络的标识通常只有两个字节, 这也是两者标识的主要区别)(nt: 1.254.110 可理解为ether网络上的ace主机).

  标识与其对应的名字之间必须要用空白分开. 除了以上内容, /etc/atalk.names中还包含空行以及注释行(以'#'开始的行).

  AppleTalk 完整网络地址将以如下格式显示:

  net.host.port

  以下为一段具体显示:

  144.1.209.2 > icsd-net.112.220

  office.2 > icsd-net.112.220

  jssmag.149.235 > icsd-net.2

  (如果/etc/atalk.names 文件不存在, 或者没有相应AppleTalk 主机/网络的条目, 数据包的网络地址将以数字形式显示).

  在第一行中, 网络144.1上的节点209通过2端口,向网络icsd-net上监听在220端口的112节点发送了一个NBP应用数据包

  (nt | rt: NBP, name binding protocol, 名称绑定协议, 从数据来看, NBP服务器会在端口2提供此服务.

  'DDP port 2' 可理解为'DDP 对应传输层的端口2', DDP本身没有端口的概念, 这点未确定, 需补充).

  第二行与第一行类似, 只是源的全部地址可用'office'进行标识.

  第三行表示: jssmag网络上的149节点通过235向icsd-net网络上的所有节点的2端口(NBP端口)发送了数据包.(需要注意的是,

  在AppleTalk 网络中如果地址中没有节点, 则表示广播地址, 从而节点标识和网络标识最好在/etc/atalk.names有所区别.

  nt: 否则一个标识x.port 无法确定x是指一个网络上所有主机的port口还是指定主机x的port口).

  tcpdump 可解析NBP (名称绑定协议) and ATP (AppleTalk传输协议)数据包, 对于其他应用层的协议, 只会打印出相应协议名字(

  如果此协议没有注册一个通用名字, 只会打印其协议号)以及数据包的大小.

  NBP 数据包会按照如下格式显示:

  icsd-net.112.220 > jssmag.2: nbp-lkup 190: "=:LaserWriter@_

  jssmag.209.2 > icsd-net.112.220: nbp-reply 190: "RM1140:LaserWriter@_ 250

  techpit.2 > icsd-net.112.220: nbp-reply 190: "techpit:LaserWriter@_ 186

  第一行表示: 网络icsd-net 中的节点112 通过220端口向网络jssmag 中所有节点的端口2发送了对'LaserWriter'的名称查询请求(nt:

  此处名称可理解为一个资源的名称, 比如打印机). 此查询请求的序列号为190.

  第二行表示: 网络jssmag 中的节点209 通过2端口向icsd-net.112节点的端口220进行了回应: 我有'LaserWriter'资源, 其资源名称

  为'RM1140', 并且在端口250上提供改资源的服务. 此回应的序列号为190, 对应之前查询的序列号.

  第三行也是对第一行请求的回应: 节点techpit 通过2端口向icsd-net.112节点的端口220进行了回应:我有'LaserWriter'资源, 其资源名称

  为'techpit', 并且在端口186上提供改资源的服务. 此回应的序列号为190, 对应之前查询的序列号.

  ATP 数据包的显示格式如下:

  jssmag.209.165 > helios.132: atp-req 12266<0-7> 0xae030001

  helios.132 > jssmag.209.165: atp-resp 12266:0 (512) 0xae040000

  helios.132 > jssmag.209.165: atp-resp 12266:1 (512) 0xae040000

  helios.132 > jssmag.209.165: atp-resp 12266:2 (512) 0xae040000

  helios.132 > jssmag.209.165: atp-resp 12266:3 (512) 0xae040000

  helios.132 > jssmag.209.165: atp-resp 12266:5 (512) 0xae040000

  helios.132 > jssmag.209.165: atp-resp 12266:6 (512) 0xae040000

  helios.132 > jssmag.209.165: atp-resp_2266:7 (512) 0xae040000

  jssmag.209.165 > helios.132: atp-req 12266<3,5> 0xae030001

  helios.132 > jssmag.209.165: atp-resp 12266:3 (512) 0xae040000

  helios.132 > jssmag.209.165: atp-resp 12266:5 (512) 0xae040000

  jssmag.209.165 > helios.132: atp-rel 12266<0-7> 0xae030001

  jssmag.209.133 > helios.132: atp-req_12267<0-7> 0xae030002

  第一行表示节点 Jssmag.209 向节点helios 发送了一个会话编号为12266的请求包, 请求helios

  回应8个数据包(这8个数据包的顺序号为0-7(nt: 顺序号与会话编号不同, 后者为一次完整传输的编号,

  前者为该传输中每个数据包的编号. transaction, 会话, 通常也被叫做传输)). 行尾的16进制数字表示

  该请求包中'userdata'域的值(nt: 从下文来看, 这并没有把所有用户数据都打印出来 ).

892697