ping程序
- 改程序发送一份ICMP回显请求报文给主机,并等待返回ICMP回显应答
- ping能测出这台主机的往返时间,以表明主机离的有多远
- ping不能到达,如今并不能代表不能telnet到某台主机。一台主机的可到达行不知取决于IP层是否能到达,还取决于使用何种协议与端口号
- 大多数TCP/IP实现都在内核中直接支持ping服务器,这种服务器不是一个用户进程
- 当返回ICMP回显应答时,要打印序列号和TTL,并计算往返时间
- 上面的例子往返时间为0,主要是由于计算机的计时精度未达到。一般情况下第一个往返时间长一些,因为硬件目的地址不在ARP告诉缓存中
- 通过往返时间验证SLIP传输速度
IP记录路由选项
- 每个处理数据报的路由器都把它的IP地址放入选型字段中,当数据到达目的端时,IP地址清单复制到ICMP回显应答中。
- 一个缺点是:大小只能最多9个IP地址
- 还可以记录时间戳
小结
- ping程序是对两个TCP/IP系统连通性进行测试的基本工具,只利用了ICMP回显请求和回显应答报文,而不用经过传输层(TCP/IP)
- 讨论了ping程序的记录路由选项
Traceroute程序
- 可以让我们看到IP数据报从一台主机传到另一台主机所经过的路由。相对于ping有优点:不需要所有的路由器支持记录路由选项,克服空间有限的问题
- 使用ICMP报文和IP首部的TTL字段,TTL字段为了防止数据报在选路时无休止在网络中运动
- 操作过程:首先发送一份TTL字段为1的IP数据报给目的主机。处理这份数据报的第一个路由器将TTL减1,丢弃该数据报,并发回一份超时ICMP报文,这样得到一个路由器地址。随后发送TTL=2的数据报,得到第二个地址。但是目的主机哪怕接收到T T L值为1的I P数据报,也不会丢弃该数据报并产生一份超时I C M P报文,这是因为数据报已经到达其最终目的地
- 如何判断是否已到达目的主机呢?因为traceroute程序发送一份UDP数据报给目的主机,但它选择一个不可能的值作为UDP端口。产生一份“端口不可到达”错误
- traceroute程序要区分接受到的ICMP报文是超时还是端口不可到达,以判断结束时间。
tcpdump程序
- tcpdump将网络接口卡设置为混杂模式来截获经过网络接口的每一个分组
BSD分组过滤器
- BSD分组过滤器BPF,tcpdump用它来截获和过滤来自一个被设置为混杂模式的网络接口分组
- BPF从驱动程序那里接受到每一个收到的分组和传输的分组。这些分组要通过一个用户指明的过滤器,使只有那些用户进程感兴趣的分组才会传递到用户进程
- 每个进程指明自己的过滤器
- 由于网络传输率很容易超过CPU的处理能力,并且一个用户进程从内核中只读小块数据的代价昂贵,因此BPF将多个帧装载进一个读缓存,缓存器满了再将读缓存保存的帧返回
- 在内核中过滤,而不是在进程中过滤
- 过滤表达式 : %tcpdump tcp port 25,只打印源端口和目的端口为25的报文段
SUNOS的网络接口分接头
- 与BPF不同的是,网络接口分头只截获网络接口收到的分组,而BPF可以接受网络接口和传送的分组
SOCK程序
- 生成TCP和UDP数据,既可以用作一个客户进程,也可以用作服务器进程
- 几个例子: sun % sock bsdi echo 服务器主机的名字是bsdi 服务的名字是echo(回显)
- sock -s 140.252.13.33 5555 作为一个在端口5555监听的服务器,只接受140.252.13.33的地址
- sock -i -n12 -w4096 bsdi discard 把12个缓存,每个包含4096字节的数据,送给主机bsdi的discard服务器
IFCONFIG
- 用来显示和配置网络接口
- 在执行ifconfig 命令后,系统将在内核表中设置必要的参数,这样Linux 就知道如何与网络上的网卡通信
- ifconfig 直接显示当前系统的网络配置状况
- ifconfig eth0 192.168.0.1 netmask 255.255.255.0 在eth0上配置上192.168.0.1 的IP地址及24位掩码
netstat
- 提供系统上的接口信息