pikesaku’s blog

個人的な勉強メモです。記載内容について一切の責任は持ちません。

PDU毎のフォーマット

イーサネット

VLANタグ・フレームのフォーマット - ネットワークエンジニアを目指して

項目 内容
PDU フレーム
ヘッダ長 18byte

~上記より引用~

タグ付きVLANの場合、1522byteとなり1518byte超えるが通信できる理由は?
Lesson4:VLANとジャンボ・フレーム,フレームを拡張する技術を学ぶ | 日経クロステック(xTECH)
→大体の機器は、フレーム長が1536バイトまたは2048バイトまでならOKなのでOK

IP

TCP/IP - IPとは

項目 内容
PDU パケット
ヘッダ長 20byte(オプション・パディングなし)

~上記より引用~

TCP

TCP/IP - TCPとは - TCPヘッダ

項目 内容
PDU セグメント
ヘッダ長 20byte

~上記より引用~

UDP

TCP/IP - UDPとは

項目 内容
PDU データグラム
ヘッダ長 8byte

~上記より引用~

ICMP(おまけ)

TCP/IP - ICMPとは

~上記より引用~

参考

TCPUDPの違い

TCP/IP - UDPとは
~上記より引用~

TCPの通信効率をよくする機能

TCP/IP - TCP ウィンドウ制御、フロー制御

ウィンドウ制御

~上記より引用~

3WHS時にお互いのサイズを知り、ACK待たずに送信

フロー制御

~上記より引用~

受信側がバッファが一杯になった場合に、送信を止めてもらう機能
下流
①受信側は、他ホストとも通信してるケースあり。バッファが一杯になったら、ウィンドウサイズ0で「もう送らないで!」を伝える。
②送信側は、メッセージを受けたら、一定期間待ってウィンドウプルーブで、「ウィンドウサイズの最新値は?」ときく。
③受信側は、最新のウィンドウサイズを通知する。

SACK (Selective ACK)

【図解】TCP のオプションと仕組み 〜SACK, Timestamp(PAWS), Window Scale, MSS〜 | SEの道標
~上記より引用~

ウィンドウ制御でACKを待たずに送信された複数セグメントのうち、一部でパケロスが発生した場合、SACK未使用だとパケロス発生した以降のパケットが全て再送される。SACKを利用すると、受信済みセグメントの情報を送信元に通知することででき、パケロスしたセグメントのみ再送させることが可能。
※昔、これに関するトラブルあり。FWがシーケンス番号をセキュリティ考慮し書き換えるけど、SACKの中のシーケンス番号を変えない不具合があった。たしかパケロス発生すると通信が失敗する動作だった。

Path MTU Discovery

【図解】Path MTU Discoveryの仕組み~ルータやWindows/Linuxでの設定確認/変更方法~ | SEの道標
~上記より引用~

MTA超過時にフラグメントを発生させずに通信をする仕組み。
下流れ。
①送信元ホストがDon't Flagmentフラグつけて送信
②途中NW機器がMTU超過検知時にICMP Type3 Code4で送信元に通知
③送信元はサイズを小さくして再送信
注意
送信元がICMP Type3 Code4をFirewallで受け取らない場合、MTU超過時に通信できない問題(ブラックホール問題)が発生する。

tracertとtraceroute

図解 tracert の見方 ~WindowsとLinuxの違い(icmp/udp),経路途中のIPが表示されない理由~ | SEの道標
tracert
~上記より引用~

traceroute
~上記より引用~

どちらもIP TTL Expiredの動きを利用した到達性を確認するツール。
TTLを1個づつ大きくしてICMP TTL Expiredを受信することで間のNW機器の情報を得る。
tracertはicmp echoで、tracerouteはUDPハイポート(33434から1づつ大きくする)
ゴールまで到達するとtracertがicmp reply、tracerouteはport unreachableを受信する。
※tracerouteも-Iオプションで、tracertと同様icmp echoになる。