Ethernetのリンクと通信方式
両端の条件とエラー増分から、リンク上の問題と経路の問題を調べます。
説明
リンクアップは物理的な接続が成立しているという情報です。速度や二重方式が両端で整合しているか、通信中にエラーが増えないか、宛先への経路があるかは、さらに確認する必要があります。
100BASE-TXのduplex不一致を両端の表とエラー差分で調べ、設定をそろえた後の再試験と比較します。最後にリンクが正常でも遠隔へ届かない例から、IPの配送条件を確認します。
1両端のリンク条件
ports.csvは100BASE-TXの両端で確認した設定を整理した教材表です。一方を100/full固定、他方を自動交渉とした不一致例を扱います。
cat ports.csv両端の速度・duplex・交渉状態両方LINK=yesで速度も100Mbit/秒ですが、Aはfull、Bはhalfです。この例のBは相手の速度を検出しても全二重と判断できず半二重になっています。リンクアップと二重方式の一致は別に確認します。
2通信中に増えたエラー
同じ試験区間の前後で、late collisionとFCS errorのカウンターを読みます。
cat counters-before.csv試験前の累積値; cat counters-after.csv試験後の累積値AではFCS error、Bではlate collisionが増えています。全二重側と半二重側で送信の扱いが違うため、同時送信時に問題が現れる構成です。これらのエラーだけで原因を一つに断定せず、両端設定との一致を確認します。
3累積値から増分を求める
端末ごとに差分を計算します。
awk -F, 'NR==FNR {if(FNR>1) {late[$1]=$2; fcs[$1]=$3}; next} FNR>1 {printf "%s late_delta=%d fcs_delta=%d\n",$1,$2-late[$1],$3-fcs[$1]}'同じ側の前後差分 counters-before.csv counters-after.csv試験区間を合わせるAのFCSは20、Bのlate collisionは16増えています。累積値には過去の障害も含まれるため、現在の試験区間で増えた量を使います。再起動などでカウンターがリセットされていないことも前提です。
4両端の設定をそろえた後
両側とも自動交渉を有効にし、100/fullで成立した後の記録を読みます。
cat ports-fixed.csv一致したリンク条件; cat counters-fixed.csv再試験後の累積値設定は両側fullで一致しています。一方、エラーの累積値は0へ戻っていません。設定修正の効果は、修正後に新しいエラーが増えるかどうかで確認します。
5修正後の再試験
修正前の最終値と、修正後に同じ負荷で通信した最終値を比較します。
awk -F, 'NR==FNR {if(FNR>1) {late[$1]=$2; fcs[$1]=$3}; next} FNR>1 {printf "%s late_delta=%d fcs_delta=%d\n",$1,$2-late[$1],$3-fcs[$1]}'修正後の増分 counters-after.csv counters-fixed.csv同条件での再試験両側とも増分0です。この試験区間では設定をそろえた後に対象エラーが増えていません。ケーブルやトランシーバー、別の負荷条件まで健全と保証する値ではなく、同条件での改善を示す記録です。
6リンク正常でも遠隔宛先へ届かない例
リンク条件が一致した別の調査で、近隣通信と経路を確認した表を読みます。
cat reachability.csvリンク・アドレス・経路・近隣の結果同じ192.0.2.0/24内の相手には届きますが、198.51.100.20向けはnetwork_unreachableです。接続経路だけがあり、デフォルト経路はありません。この記録では物理リンクより、宛先を扱える経路があるかを先に調べます。
7遠隔宛先を直接接続の範囲と比較
自分の/24ネットワークに、近隣と遠隔の二つの宛先が含まれるかを計算します。
python3 -c直接接続の範囲を確認 'import ipaddress; net=ipaddress.ip_network("192.0.2.0/24"); print([(ip,ipaddress.ip_address(ip) in net) for ip in ["192.0.2.20","198.51.100.20"]])'二つの宛先を判定近隣はTrue、遠隔はFalseです。遠隔への通信には適切な経路と次ホップへの配送が必要です。リンク、二重方式、エラー増分、IP設定、経路、近隣情報のどこで条件が満たされていないかを順に照合します。
まとめ
リンク状態だけでなく、両端の速度・duplex・自動交渉を合わせて見ます。
設定修正後も累積エラーは残るため、同じ負荷での増分を確認します。
リンクが正常でも、宛先への経路や近隣の解決など別の条件が必要です。
操作履歴と解説を振り返れます。
シェル / PCAPと通信の記録
cat ports.csvSIDE,SPEED_MBIT,DUPLEX,AUTONEG,LINK A,100,full,off,yes B,100,half,on,yes
cat counters-before.csv; cat counters-after.csvSIDE,LATE_COLLISIONS,FCS_ERRORS A,0,2 B,1,0 SIDE,LATE_COLLISIONS,FCS_ERRORS A,0,22 B,17,0
awk -F, 'NR==FNR {if(FNR>1) {late[$1]=$2; fcs[$1]=$3}; next} FNR>1 {printf "%s late_delta=%d fcs_delta=%d\n",$1,$2-late[$1],$3-fcs[$1]}' counters-before.csv counters-after.csvA late_delta=0 fcs_delta=20 B late_delta=16 fcs_delta=0
cat ports-fixed.csv; cat counters-fixed.csvSIDE,SPEED_MBIT,DUPLEX,AUTONEG,LINK A,100,full,on,yes B,100,full,on,yes SIDE,LATE_COLLISIONS,FCS_ERRORS A,0,22 B,17,0
awk -F, 'NR==FNR {if(FNR>1) {late[$1]=$2; fcs[$1]=$3}; next} FNR>1 {printf "%s late_delta=%d fcs_delta=%d\n",$1,$2-late[$1],$3-fcs[$1]}' counters-after.csv counters-fixed.csvA late_delta=0 fcs_delta=0 B late_delta=0 fcs_delta=0
cat reachability.csvCHECK,VALUE link,up local_address,192.0.2.10/24 connected_route,192.0.2.0/24 default_route,missing neighbor_192.0.2.20,REACHABLE local_peer_ping,success remote_198.51.100.20,network_unreachable
python3 -c 'import ipaddress; net=ipaddress.ip_network("192.0.2.0/24"); print([(ip,ipaddress.ip_address(ip) in net) for ip in ["192.0.2.20","198.51.100.20"]])'[('192.0.2.20', True), ('198.51.100.20', False)]演習完了