世の中にはCiscoルータのシミュレータがあると聞いたことがあったが、仕事がらCiscoルータは自由に触れるのであまり興味はなかったし、どうせ不完全な動作しかしないのだろうと思っていた。しかしdynamipsというそのオープンソースソフトウェアは、Cisco7200のハードウェアをエミュレートして本物のIOSを走らせるのだという。しかもPCのメモリさえ十分にあれば何台も起動させて、ルーティングプロトコルの動作やパケット転送までできる。さらにPCのLANポートを介して外部の本物のルータと通信もできる。これは検証(おもちゃ)用ML115#2で動かしてみるしかない。
ネットワークの最近のブログ記事
BGP4はIPv4以外のプロトコルも扱えるように機能拡張ができるようになっており、IPv6にもその仕組みで対応をしている。IPv6対応のBGP4をBGP4+とも呼ぶ。
BGPを使うときは経路の優先制御やフィルタなどの様々なポリシーを設定するが、まずは繋ぐだけの簡単な設定を示す。Cisco側はAS番号1111、Juniper側はAS番号2222で、eBGP接続をしている。またそれぞれ1台ずつ、iBGP接続もしている。
Ciscoの設定は以下のとおり。
Cisco#show config ! version 12.2 ! hostname Cisco ! ip subnet-zero ! ipv6 unicast-routing ! interface GigabitEthernet1/1 ip address 10.0.0.1 255.255.255.252 ipv6 address 2000::1/64 ipv6 enable ! interface GigabitEthernet1/2 ip address 172.16.0.254/24 ipv6 address 2001::1/64 ipv6 enable ! interface Loopback0 ip address 172.16.255.254/32 ipv6 address 2001:0:0:255::254/128 ipv6 enable ! router bgp 1111 no synchronization bgp log-neighbor-changes neighbor 172.16.255.253 remote-as 1111 neighbor 10.0.0.2 remote-as 2222 neighbor 2001:0:0:255::253 remote-as 1111 neighbor 2000::2 remote-as 2222 no auto-summary ! address-family ipv6 neighbor 2001:0:0:255::253 activate neighbor 2001:0:0:255::253 update-source Loopback0 neighbor 2001:0:0:255::253 soft-reconfiguration inbound neighbor 2000::2 activate neighbor 2000::2 soft-reconfiguration inbound network 2002::/48 exit-address-family ! address-family ipv4 neighbor 172.16.255.253 activate neighbor 172.16.255.253 update-source Loopback0 neighbor 172.16.255.253 soft-reconfiguration inbound neighbor 10.0.0.2 activate neighbor 10.0.0.2 soft-reconfiguration inbound network 172.16.0.0 mask 255.255.240.0 exit-address-family ! ip classless ! ip route 172.16.0.0 255.240.0.0 Null0 ! ipv6 route 2001::/48 Null0 ! line con 0 line vty 0 4 line vty 5 15 ! end
Juniperの設定は以下のとおり。
interfaces {
fe-0/0/0 {
unit 0 {
family inet {
address 10.0.0.2/30;
}
family inet6 {
address 2000::2/64;
address fe80::2/64;
}
}
}
fe-0/0/1 {
unit 0 {
family inet {
address 192.168.0.254/24;
}
family inet6 {
address 2002::1/64;
address fe80::1/64;
}
}
}
lo0 {
unit 0 {
family inet {
address 192.168.255.254/32;
}
family inet6 {
address 2002:0:0:255::254/128;
address fe80::1/128;
}
}
}
}
routing-options {
rib inet6.0 {
static {
route 2002::/48 discard;
}
}
static {
route 192.168.0.0/16 discard;
}
router-id 192.168.255.254;
autonomous-system 2222;
}
protocols {
bgp {
remove-private;
group IBGP {
type internal;
local-address 192.168.255.254;
export ( LOCAL BGP);
peer-as 2222;
neighbor 192.168.255.253;
}
group IBGP6 {
type internal;
local-address 2002:0:0:255::254;
export ( LOCAL6 BGP);
peer-as 2222;
neighbor 2002:0:0:255::253;
}
group EBGP_Cisco {
type external;
export ( LOCAL BGP);
peer-as 1111;
neighbor 10.0.0.1;
}
group EBGP_Cisco6 {
type external;
export ( LOCAL6 BGP);
peer-as 1111;
neighbor 2000::2;
}
}
}
policy-options {
policy-statement LOCAL {
term 10 {
from {
protocol static;
route-filter 192.168.0.0/16 exact;
}
then accept;
}
then reject;
}
policy-statement LOCAL6 {
term 10 {
from {
protocol static;
route-filter 2002::/48 exact;
}
then accept;
}
then reject;
}
policy-statement BGP {
term 10 {
from protocol bgp;
then accept;
}
then reject;
}
}
設定の量が増えるため省略しているが、各AS内ではOSPFなどが適切に動いていて、IBGPのルータID同士が通信できる必要がある。またEBGPのネットワークもOSPF Passiveなどにしておいて、IBGPルータのためにネクストホップが解決されている必要がある。
Juniperも2001年からIPv6に対応している。こちらはライセンスでOSが違うことなどはない。Juniperの設定はIPv4もIPv6もほとんど設定は変わらないので、IPv4の設定ができる人はほとんど戸惑わずにIPv6も設定できるだろう。
system {
host-name Juniper-RE0;
}
interfaces {
fe-0/0/0 {
unit 0 {
family inet {
address 192.168.0.254/24;
}
family inet6 {
address 2001:1:1:0::1/64;
address fe80::1/64;
}
}
}
fe-0/0/2 {
unit 0 {
family inet {
address 192.168.1.254/24;
}
family inet6 {
address 2001:1:1:1::1/64;
address fe80::1/64;
}
}
}
}
routing-options {
rib inet.0 {
static {
route 172.16.1.0/24 next-hop 192.168.1.253;
}
}
rib inet6.0 {
static {
route 2001:1:1:3::/64 next-hop 2001:1:1:1::254;
}
}
router-id 192.168.0.254;
}
protocols {
ospf {
export REDISTRIBUTE;
area 0.0.0.0 {
interface fe-0/0/0.0;
interface fe-0/0/1.0 {
passive;
}
}
}
ospf3 {
export REDISTRIBUTE6;
area 0.0.0.0 {
interface fe-0/0/0.0;
interface fe-0/0/1.0 {
passive;
}
}
}
}
policy-options {
policy-statement REDISTRIBUTE {
term 10 {
from {
protocol static;
}
then accept;
}
}
policy-statement REDISTRIBUTE6 {
term 10 {
from {
protocol static;
}
then accept;
}
}
}
Ciscoは2001年からIPv6のサポートを開始している。現在ではルータ、スイッチのいずれもローエンドからハイエンドまでほとんどの機種でIPv6に対応しているが、利用するにはAdvancedフィーチャーという別ライセンスを購入する必要がある。
まずは基本的な設定を示す。IPv4とIPv6のアドレスを付与して、OSPFの設定をしている。関係のないところは省略している。
! version 12.2 ! ip routing ! ipv6 unicast-routing ! interface FastEthernet0/0 ip address 192.168.0.254 255.255.255.0 ipv6 address 2001:1:1:0::/64 eui-64 ipv6 enable ipv6 ospf 100 area 0.0.0.0 ! interface FastEthernet0/1 ip address 192.168.1.254 255.255.255.0 ipv6 address 2001:1:1:1::254/64 ipv6 enable ipv6 ospf 100 area 0.0.0.0 ! router ospf 100 redistribute static subnets network 192.168.0.0 0.0.0.255 area 0 network 192.168.1.0 0.0.0.255 area 0 ! ipv6 router ospf 100 router-id 192.168.0.254 redistribute static ! ip route 172.16.1.0 255.255.255.0 192.168.2.253 ! ipv6 route 2001:1:1:3::/64 FastEthernet0/1 FE80::1 ! end
FE0/0のIPv6アドレスはEUI-64形式でMACアドレスから自動的に生成される。FE0/1は全て指定している。ネットワーク機器やサーバなど他の機器からアクセスするものは全て指定する方がいい。
OSPFを有効にするインターフェースの指定は、IPv4ではrouterサブモードでnetworkコマンドを使うが、IPv6では各インターフェースで設定する。IPv4のルータIDは自動的に選択させることも可能だが、IPv6では必ず明示的に設定する。redistribute staticではIPv4ではsubnets引数を付けないとサブネット化したアドレスへのスタティックルートを再配信することができないが、IPv6では不要である。
スタティックルートは、IPv6ではネクストホップにリンクローカルアドレスを使用し、インターフェースを指定する。グローバルアドレスを使用することも可能だが、リダイレクトができなくなる。
近頃のLinuxは標準でIPv6に対応している。OSインストール時に特に指定や設定をしないでもifconfigを見ると以下のようなIPv6のリンクローカルアドレスが設定されている。
[root@ml115 ~]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:1B:78:9E:D6:6B
inet addr:192.168.0.2 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::21b:78ff:fe9e:d66b/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:238099 errors:0 dropped:0 overruns:0 frame:0
TX packets:264177 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:26886732 (25.6 MiB) TX bytes:381478301 (363.8 MiB)
これだけで同一セグメント上のIPv6ホスト同士は通信ができる。またネットワーク上にIPv6ルータがいればグローバルアドレスとデフォルトゲートウェイも自動的に設定され、他のネットワークやインターネットとの通信もできる。
ここでは単にIPv6ホストとして使うだけでなく、IPv6ルータとしての設定もしてみよう。ルータとして最低限必要な動作は、IPv6アドレスの設定と、IPv6パケットの転送、ルータアドバタイズメントというルータ情報等のネットワークへの送出である。ルータアドバタイズメントはIPv6から追加された機能であり、ホストアドレスの自動設定やルータの冗長化を実現する。
IPv6アドレスの設定は、IPv4と同様に/etc/sysconfig/network-script/ifcfg-eth0等に記述する。IPv6アドレスはローカルIPv6アドレス(FD00::/8)から適当にとろう。うちの場合このネットワークはIPv4で192.168.0.0/24なので、見やすいように以下のようにした。
[root@ml115 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 HWADDR=00:1b:78:9e:d6:6b IPADDR=192.168.0.2 NETMASK=255.255.255.0 IPV6INIT=yes IPV6ADDR=fd00:192:168::2/64 ONBOOT=yes TYPE=Ethernet
また、/etc/sysconfig/networkにNETWORKING_IPV6=yesの設定を加える。
[root@ml115 ~]# cat /etc/sysconfig/network NETWORKING=yes NETWORKING_IPV6=yes HOSTNAME=ml115.grandarbre.net
そうしたらネットワークを再起動して設定を反映させる。ただし以下のコマンドだとカーネルパラメータ等の設定が飛んでしまうので、できればOSを再起動したほうが確実。
[root@ml115 ~]#service network restart
インターフェースにちゃんとIPv6アドレスが付与されたか見てみよう。
[root@ml115 ~]# ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:1B:78:9E:D6:6B
inet addr:192.168.0.2 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fd00:192:168::2/64 Scope:Global
inet6 addr: fe80::21b:78ff:fe9e:d66b/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1199 errors:0 dropped:0 overruns:0 frame:0
TX packets:668 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:253144 (247.2 KiB) TX bytes:95419 (93.1 KiB)
また、ルータとして動作するのだから、自分のアドレスをルータアドバタイズメントから自動設定してはいけない。これは以下のようにカーネルパラメータで設定する。
[root@ml115 ~]# echo 0 > /proc/sys/net/ipv6/conf/all/accept_ra
IPv6パケットの転送もカーネルパラメータで設定する。
[root@ml115 ~]# echo 1 > /proc/sys/net/ipv6/conf/all/forwarding
恒久的に変更するには/etc/rc.d/rc.localに上記の2つのコマンドを追記する。
次にルータアドバタイズメントを行うデーモンをインストールする。
[root@ml115 ~]# yum install radvd
設定ファイルは/etc/radvd.conf。ほとんど設定サンプルどおりでいいが、自分のネットワークで使うプレフィックス(ネットワークアドレス)だけは決めなければいけない。
interface eth0
{
AdvSendAdvert on;
MinRtrAdvInterval 30;
MaxRtrAdvInterval 100;
prefix fd00:192:168:0::/64
{
AdvOnLink on;
AdvAutonomous on;
AdvRouterAddr off;
};
};
それではデーモンを起動してみよう。
[root@ml115 etc]# service radvd start Starting radvd: [ OK ] [root@ml115 ~]# chkconfig radvd on
ルータアドバタイズが送信されている様子は、 radvdumpコマンドで表示することができる。今回の設定では30秒から100秒おきに以下のようなアドバタイズが送信される。
[root@ml115 ~]# radvdump eth0
#
# radvd configuration generated by radvdump 0.9.1
# based on Router Advertisement from fe80::21b:78ff:fe9e:d66b
# received by interface eth0
#
interface eth0
{
AdvSendAdvert on;
# Note: {Min,Max}RtrAdvInterval cannot be obtained with radvdump
AdvManagedFlag off;
AdvOtherConfigFlag off;
AdvReachableTime 0;
AdvRetransTimer 0;
AdvCurHopLimit 64;
AdvHomeAgentFlag off;
AdvDefaultPreference medium;
AdvSourceLLAddress on;
prefix fd00:192:168::/64
{
AdvValidLifetime 2592000;
AdvPreferredLifetime 604800;
AdvOnLink on;
AdvAutonomous on;
AdvRouterAddr off;
}; # End of prefix definition
}; # End of interface definition
ここまで設定すれば、このLinuxサーバはIPv6ルータとして動作している。配下のWindows XPでは以下のようにIPv6アドレスとデフォルトゲートウェイが取得されている。
C:¥>ipconfig
Windows IP Configuration
Ethernet adapter wlan0:
Connection-specific DNS Suffix . :
IP Address. . . . . . . . . . . . : 192.168.0.7
Subnet Mask . . . . . . . . . . . : 255.255.255.0
IP Address. . . . . . . . . . . . : fd00:192:168:0:2c9c:62b1:1de3:b294
IP Address. . . . . . . . . . . . : fd00:192:168:0:219:7eff:fe4b:f6b
IP Address. . . . . . . . . . . . : fe80::219:7eff:fe4b:f6b%8
Default Gateway . . . . . . . . . : 192.168.0.2
fe80::21b:78ff:fe9e:d66b%8
Tunnel adapter Teredo Tunneling Pseudo-Interface:
Connection-specific DNS Suffix . :
IP Address. . . . . . . . . . . . : fe80::ffff:ffff:fffd%4
Default Gateway . . . . . . . . . :
Tunnel adapter Automatic Tunneling Pseudo-Interface:
Connection-specific DNS Suffix . :
IP Address. . . . . . . . . . . . : fe80::5efe:192.168.0.7%2
Default Gateway . . . . . . . . . :
また配下のLinuxサーバでは以下のようにIPv6アドレスとデフォルトゲートウェイが取得されている。
[root@r60e ~]# ifconfig ath0
ath0 Link encap:Ethernet HWaddr 00:19:7D:39:5E:87
inet addr:192.168.0.3 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fd00:192:168:0:219:7dff:fe39:5e87/64 Scope:Global
inet6 addr: fe80::219:7dff:fe39:5e87/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:45319 errors:0 dropped:0 overruns:0 frame:0
TX packets:43011 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:34823760 (33.2 MiB) TX bytes:5576371 (5.3 MiB)
[root@r60e ~]# route --inet6
Kernel IPv6 routing table
Destination Next Hop Flags Metric Ref Use Iface
fd00:192:168::/64 * UA 256 67 0 ath0
fe80::/64 * U 256 0 0 ath0
*/0 fe80::21b:78ff:fe9e:d66b UGDA 1024 0 0 ath0
localhost6.localdomain6/128 * U 0 1 1 lo
fd00:192:168:0:219:7dff:fe39:5e87/128 * U 0 0 1 lo
fe80::219:7dff:fe39:5e87/128 * U 0 2 1 lo
fe80::f498:ddff:fec3:1f54/128 * U 0 0 1 lo
ff00::/8 * U 256 0 0 ath0
ちなみにfe80::21b:78ff:fe9e:d66bというのはルータのリンクローカルアドレスである。IPv6ルーティングテーブルでは通常グローバルアドレス(fd00:192:168::2)ではなくリンクローカルアドレスが使われる。
Windows XPのSP1以降は標準でIPv6に対応しているが、使用するにはコマンドラインでインストールする必要がある。やることは実に簡単で、コマンドプロンプトで以下のコマンドを打つだけ。
C:\ipv6 install Installing... Succeeded. C:\
IPv6ルータが同一サブネット上にいない場合、Windowsはリンクローカルアドレスだけを自分で生成する。よってこのアドレスを使えばPC同士は通信ができる。アドレスを確認するにはIPv4と同様にipconfigコマンドを使う。IPv6アドレスの最後についている%の後の数字はインターフェースを識別する連番。fe80で始まるリンクローカルアドレスはネットワークを識別できないので、インターフェースで識別する。
C:¥>ipconfig
Windows IP Configuration
Ethernet adapter wlan0:
Connection-specific DNS Suffix . :
IP Address. . . . . . . . . . . . : 192.168.0.7
Subnet Mask . . . . . . . . . . . : 255.255.255.0
IP Address. . . . . . . . . . . . : fe80::219:7eff:fe4b:f6b%5
Default Gateway . . . . . . . . . : 192.168.0.2
Tunnel adapter Teredo Tunneling Pseudo-Interface:
Connection-specific DNS Suffix . :
IP Address. . . . . . . . . . . . : fe80::ffff:ffff:fffd%4
Default Gateway . . . . . . . . . :
Tunnel adapter Automatic Tunneling Pseudo-Interface:
Connection-specific DNS Suffix . :
IP Address. . . . . . . . . . . . : fe80::5efe:192.168.0.7%2
Default Gateway . . . . . . . . . :
C:¥>
ちゃんと設定してあるIPv6ルータがネットワーク上にいる場合、そのルータからグローバルアドレスとデフォルトゲートウェイを取得する。つまりIPv4ではDHCPが必要だったIPアドレスとデフォルトゲートウェイの自動設定を、IPv6は標準的に実現している。
C:¥>ipconfig
Windows IP Configuration
Ethernet adapter wlan0:
Connection-specific DNS Suffix . :
IP Address. . . . . . . . . . . . : 192.168.0.7
Subnet Mask . . . . . . . . . . . : 255.255.255.0
IP Address. . . . . . . . . . . . : fd00:192:168:0:2c9c:62b1:1de3:b294
IP Address. . . . . . . . . . . . : fd00:192:168:0:219:7eff:fe4b:f6b
IP Address. . . . . . . . . . . . : fe80::219:7eff:fe4b:f6b%8
Default Gateway . . . . . . . . . : 192.168.0.2
fe80::21b:78ff:fe9e:d66b%8
Tunnel adapter Teredo Tunneling Pseudo-Interface:
Connection-specific DNS Suffix . :
IP Address. . . . . . . . . . . . : fe80::ffff:ffff:fffd%4
Default Gateway . . . . . . . . . :
Tunnel adapter Automatic Tunneling Pseudo-Interface:
Connection-specific DNS Suffix . :
IP Address. . . . . . . . . . . . : fe80::5efe:192.168.0.7%2
Default Gateway . . . . . . . . . :
なおpingコマンド、tracertコマンド、telnetコマンドはそのままIPv6アドレスを使うことができる。ただし宛先がリンクローカルアドレスである場合、%数字によるインターフェース指定が必要。
仕事でIPv6をさわらなければいけなくなった。いつか必要になったら勉強しようと思ってずっと後回しにしてきたのだが、その日が来てしまったようだ。書籍などを見ながら勉強をしていくので、もしかしたら不正確な記述があるかもしれないし、たぶん不十分な記述はたくさんあると思う。
IPv6アドレスは、ご存知のとおりIPv4のアドレスの4倍の128ビットのサイズがある。これを16進数32桁で表し、16ビット(4桁)ごとにコロン(:)で区切る。つまり以下のようになる。
fe80:0000:0000:0000:0216:d3ff:fe3e:2a85
これではあまりにも長いということで、:0000:が連続する場合は1個の::で略記できる。ただし::を使えるのは1回だけである。:0000:は:0:とも略記できる。また:0216:のように16ビット区切りの上位桁が0の場合は:216:などと略記できる。よって上記のアドレスは下記のように略記できる。
fe80::216:d3ff:fe3e:2a85
IPv4の時と同様に、IPv6でも/64などというようにプレフィックス表記によるサブネット表現ができる。ユーザ組織は通常/48のプレフィックスを割り当てられ、続く16ビットをサブネットIDとして設計する。つまり128ビットのアドレスのうち上位64ビットをネットワークアドレスとして使用する。/48を/64に分けるので、ユーザ組織は16ビット分(65536)のサブネットを使うことが出来る。下位64ビットはインターフェースIDと呼ばれ、サブネット内でホストを一意に識別するIDとして使用する。
グローバルアドレスの割り当てに関しては、一定の条件を満たしたプロバイダは/32のプレフィックスを割り当てられる(グローバルルーティングプレフィックス)。そのプロバイダに接続するユーザは、先述のようにその中から/48のプレフィックスを割り当てられる。よってこのプロバイダは16ビット分(65536)のユーザを接続することができる。こうすることによってインターネット全体のルーティング情報が増えることを防いでいるが、ユーザはプロバイダを乗り換える際にはグローバルアドレスが変わってしまう。
ややこしいので、実際のアドレスと見比べてみる。
2000:0001:0001:0001:0216:d3ff:fe3e:2a85
赤字はプロバイダに割り当てられたグローバルルーティングプレフィックス、青字はユーザ組織に割り当てられたプレフィックス、緑字はユーザ組織が設計するネットワークアドレス、黒字がホストアドレスである。
IPv6アドレスは全部で128ビットあるが、IPv4のクラス分割と同様に使用目的によって以下のように分割して割り当てられている。これをなんとなく頭に入れておかないと、IPv6アドレスを見たときに何が何だかわからなくなる。
| 名称 | プレフィックス | アドレス範囲 |
|---|---|---|
| グローバルユニキャストアドレス | 2000::/3 | 2000:...~3fff:... |
| リンクローカルユニキャストアドレス | FE80::/10 | FE80:...~FEBF:... |
| ローカルIPv6アドレス | FC00::/7 | FC00:...~FDFF:.. |
| マルチキャストアドレス | FF00::/8 | FF00:...~FFFF:... |
このうちローカルIPv6アドレスは、現在は8ビット目が1であるFD00::/8(つまりFD00:...~FDFF:...)のみが定義されている。ローカルIPv6アドレスは、グローバルなインターネットに向けて送信してはいけないアドレスであるが、グローバルで一意であるように定義されるアドレスであり、FDに続く40ビットをランダムに生成して使用する。合計48ビットとなるので、更に16ビットでサブネットを作ることが出来る。
ここまでが128ビットのアドレスの上位64ビットの話。下位64ビットのインターフェースIDは自由に設定することができるが、通常は48ビットのMACアドレスから生成されるEUI-64(Extended Unique Identifier-64)フォーマットを使用する。この生成方法は(人間には)面倒である。6バイト長のMACアドレスの第3バイトと第4バイトの間に0xFF-FEという値を挿入し、次にMACアドレスの最初のバイト0x00を0x02に変える。よってEUI-64フォーマットのアドレスは以下のような形になる。
xxxx:xxxx:xxxx:xxxx:02xx:xxFF:FExx:xxxx
100 Mbps のネットワークを使用した場合のデフォルトのTCPウィンドウサイズ。こちらから転載。
| OSバージョン | デフォルトのサイズ |
|---|---|
| Windows 2000 (SP なし) | 17,520 バイト |
| Windows 2000 SP1 | 17,520 バイト |
| Windows 2000 SP2 | 17,520 バイト |
| Windows 2000 SP3 | 65,535 バイト |
| Windows 2000 SP4 | 65,535 バイト |
| Windows 2000 SP4 + MS05-019 (893066) | 17,520 バイト |
| Windows 2000 SP4 対応の更新プログラム ロールアップ 1 (URP) | 17,520 バイト |
| Windows XP (SP なし) | 65,535 バイト |
| Windows XP SP1 | 65,535 バイト |
| Windows XP SP1a | 65,535 バイト |
| Windows XP SP2 | 65,535 バイト |
| Windows Server 2003 (SP なし) | 17,520 バイト |
| Windows Server2003 SP1 | 65,535 バイト |
| Windows Server2003 R2 | 65,535 バイト |
ちなみにLinuxのTCPウィンドウサイズは/proc/sys/net/core/rmem_defaultで受信ウィンドウのデフォルト値、/proc/sys/net/core/wmem_defaultで送信ウィンドウのデフォルト値が調べられる。このサーバ(CentOS5.0)ではどちらも126,976バイトになっていた。
なぜこんなことを調べたかというと、スイッチの帯域制御(ポリシング)をするとき、どんなに細く絞る場合でもデフォルトウィンドウサイズ程度のバーストは許しておかないと、TCPの通信を開始するときにパケット損失が発生して問題になるという記述を見つけたため。しかしこんなに大きな値を設定してしまうと、一瞬(1/100秒くらい)とはいえ100Mbpsのワイヤレートを出してしまうなぁ。
ネットワーク屋で疎通試験、障害試験をする人は、ダウンタイムを計測するのにExpingを使っている人が多いと思う。複数のあて先を設定できたり、カラーアイコンで状態がわかったり、ログを保存できたりと実に便利だ。
しかし障害試験などでダウンタイム測りたい場合は、あまり便利ではない。別途ストップウォッチソフトで測るか、ExPingに表示されるタイムスタンプを自分で引き算することになる。これは大量の試験をするときには結構大変だし、効率がわるい。
そこで、非常に簡単なスクリプトだが特定のあて先にpingをうち、アップタイム、ダウンタイムを表示するものを作った。これまで何回か使ったが、特に問題なく使えるようだ。
Windows+Cygwin、Windows+Active Perl、Linuxで動いている。特にパッケージの追加は必要ないが、Linuxではrootで使用する必要がある。
使い方はこんなかんじ。
www.grandarbre.net is up for 10 seconds
www.grandarbre.net is down for 5 seconds ←ケーブルを抜いたのでダウン
www.grandarbre.net is up for 10 seconds ←ケーブルを戻したのでアップ