ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
セグメントとは: TCP の PDU
OSI 参照モデルの各層では、運ぶデータの単位 (PDU = Protocol Data Unit) に決まった名前が付いています:
| 層 | プロトコル例 | PDU 名 |
|---|---|---|
| 4. Transport | TCP | セグメント (Segment) |
| 4. Transport | UDP | データグラム (Datagram) |
| 3. Network | IP | パケット (Packet) |
| 2. Data Link | Ethernet | フレーム (Frame) |
| 1. Physical | — | ビット (Bit) |
このページではこのうち TCP の セグメントを扱います。
TCP セグメントの構造
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Port | Destination Port |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Sequence Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Acknowledgment Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Offset|Rsv|U|A|P|R|S|F| Window Size |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Checksum | Urgent Pointer |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options (0-40 bytes) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Data ... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
最小 Header: 20 バイト (Options なし)
最大 Header: 60 バイト (Options 40B)
主要フィールドの意味
| フィールド | サイズ | 意味 |
|---|---|---|
| Source / Destination Port | 各 16bit | 送受信ポート番号 (HTTP=80 等) |
| Sequence Number | 32bit | 送信バイトの通し番号 |
| Acknowledgment Number | 32bit | 次に期待するバイト番号 (確認応答) |
| Data Offset | 4bit | Header 長 (4 バイト単位) |
| Flags (URG/ACK/PSH/RST/SYN/FIN) | 6bit | 制御フラグ |
| Window Size | 16bit | 受信可能バッファ残り (Flow Control) |
| Checksum | 16bit | 誤り検出 |
| Options | 0-40B | MSS, Window Scale, SACK, Timestamp 等 |
MSS と MTU
セグメントを語る上で外せないのが MSS と MTU の関係:
Ethernet Frame (1518 B)
+--------+----------+-------+--------+----------+-----+
| 14 B | 20 B | 20 B | Data | 4 B|
| Eth Hd | IP Hdr | TCP H | (1460 B) | FCS|
+--------+----------+-------+--------+----------+-----+
|<----- MTU = 1500 ----->|
|<------ MSS = 1460 -------->|
MTU (Maximum Transmission Unit) = IP パケット全体の最大 = Ethernet で 1500
MSS (Maximum Segment Size) = TCP のデータ部の最大 = MTU - 40 = 1460
| 媒体 / トンネル | 典型 MTU | 典型 MSS |
|---|---|---|
| Ethernet (一般) | 1500 | 1460 |
| PPPoE (フレッツ等) | 1492 | 1452 |
| IPv6 over IPv4 トンネル | 1480 | 1440 |
| Jumbo Frame | 9000 | 8960 |
| WireGuard / VPN | 1420 前後 | 1380 前後 |
| IPv6 最小 | 1280 | 1220 |
MSS は 3-way handshake の SYN で双方が広告し合い、小さい方を採用します。
Path MTU Discovery (PMTUD)
エンド to エンドの経路上、最も MTU が小さい区間を Path MTU と呼びます。送信側がそれを上回るサイズを送るとパケットがどこかで捨てられるので、PMTUD で動的に発見します:
- 送信側は IP Header に DF (Don't Fragment) ビットを立てて送信
- 経路途中で MTU を超えるとルータが ICMP Type 3 Code 4 (Fragmentation Needed) を返す
- 送信側はその次の MTU まで縮めて再送
ICMP がブロックされている経路では PMTUD が機能せず、通信がブラックホール化します(「大きいファイルだけ転送失敗」「ssh は通るのに scp で固まる」等)。
TCP セグメント化と IP Fragmentation の違い
| 項目 | TCP セグメント化 | IP Fragmentation |
|---|---|---|
| 誰が行う | 送信端末の TCP 層 | ルータ or 送信端末の IP 層 |
| 分割単位 | MSS (デフォルト 1460) | MTU を超えた時に分割 |
| 順序保証 | TCP が再組立 | 受信側 IP 層で再組立 |
| 性能 | 正常運用 | ★ 性能劣化 / ファイアウォール問題 |
| UDP では | — | UDP では分割が起きやすい |
TCP は事前に MSS で切ってから IP に渡すため、IP Fragmentation は基本起きません。起きている場合は MTU 設定ミスや MSS 広告漏れを疑います。
Wireshark でセグメントを見る
# キャプチャ → TCP セグメントをフィルタ
tcp.port == 80
# よく見るフラグ
SYN : 接続開始
SYN+ACK : 接続受諾
ACK : 確認応答
PSH+ACK : データ即時上層へ
FIN+ACK : 接続終了
RST : 強制切断
# 役立つ表示
Stream Index : セッション識別
Seq=, Ack= : シーケンス番号
Win=, [TCP Window Full] : 受信バッファ枯渇
[TCP Retransmission] : 再送
[TCP Dup ACK] : 重複 ACK (Selective ACK のきっかけ)
[TCP Window Scale] : 16bit を越える窓拡張
Nagle Algorithm
「小さいセグメントを大量に送ると非効率」なので、Nagle アルゴリズムが小さいデータを一旦バッファしてACK が返るまで待ってまとめて送信します。
- 長所: 効率 UP
- 短所: 対話型 (ssh / リアルタイムゲーム) では遅延感じる
- 無効化:
setsockopt(TCP_NODELAY, 1)
Window Scaling
TCP Window は 16bit (最大 64KB) ですが、現代の高速回線では小さすぎます。Window Scale オプションで SYN 時に倍率を交換し、最大 1GB までスケールできます:
# Linux で確認
cat /proc/sys/net/ipv4/tcp_window_scaling # 1 なら有効
# Window サイズの自動チューニング
sysctl -a | grep tcp_rmem
# net.ipv4.tcp_rmem = 4096 131072 6291456
# BDP (Bandwidth Delay Product) で必要サイズ計算
# 例: 1Gbps * 100ms RTT = 12.5 MB
Selective ACK (SACK)
従来 TCP は「3 を受信し損ねた」とき 4, 5, 6 を受け取っていても全部再送になっていました。SACK では「3 だけ抜けてる」と報告でき、3 だけ再送で済みます。Linux / Windows ともデフォルト有効。
FAQ
Q: セグメント、データグラム、パケット、フレーム の違いは?
A: 階層別の PDU 名: TCP=セグメント、UDP=データグラム、IP=パケット、Ethernet=フレーム。実際には混用されますが、試験では区別必須。
Q: MTU を 9000 (Jumbo Frame) にすればいつでも速い?
A: 全経路の機器 (Switch / NIC / Router) が対応している必要があります。1 ヶ所でも 1500 だと PMTUD でブラックホール化する危険。社内 LAN 限定で使うのが現実的。
Q: PPPoE で MSS が小さくなる理由
A: PPPoE Header が 8 バイト分 IP 層に乗るため MTU が 1492 になり、MSS = 1452 に。フレッツ光ネクストでよく見ます。
Q: TCP セグメントと TLS レコードの関係
A: TLS は別レイヤ。TLS レコード (最大 16KB) が複数の TCP セグメントに分割されて運ばれます。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?