プログラマーが信じているTCPに関する誤った情報
(lwn.net)NetworkManager または networkd
-
NetworkManager または networkd
- ユーザーは
wpa_supplicantベースの管理へ移行した理由を説明している - TCP に関する誤った思い込みの一覧を提示している
- TCP の信頼性に関する誤解を扱っている
- ユーザーは
-
TCP に関する誤った思い込みの一覧
- TCP は常に信頼できる
- TCP はたいてい信頼できる
- TCP は信頼できないが、送信者と受信者は最終的に送信されたバイトについて合意する
- TCP の上にメッセージ指向プロトコルを構築すれば信頼性を保証できる
- TCP パケットというものは存在する
- TCP パケットというものは存在しない
- リモートホストへの接続に失敗したら、相手はオフラインである
- Nagle アルゴリズムは良い
- Nagle アルゴリズムは悪い
- Nagle アルゴリズムを気にする必要はない
- TCP はネットワークを透過的に扱う
- ネットワークが TCP に対して透過的なら、IP に対しても透過的である
- ネットワークが HTTP/1.1 に対して透過的なら、TCP に対しても透過的である
- 標準プロトコルに対して透過的でないネットワークは例外的である
- TCP は IP を基盤として実装されている
-
説明
- ACK を待っている間に接続が切れると、送信者はセグメントが受信されたかどうか分からない
- Paxos や Raft のようなアルゴリズムが必要であり、最低 3 ノードが必要になる
- SMTP のようなプロトコルでもこの問題は発生する
-
追加の意見
- 2 者は不確実なリンクを通じて合意に到達できる
- 送信されたバイトの部分集合について合意できる
- 合意されたバイト集合が 0 である場合もあり、そこから増えていく可能性がある
- Paxos は不要である
-
追加の議論
- 合意されたバイト集合の正確な範囲は分からない
- ネットワーク透過性に関する誤った思い込みが問題を引き起こす
- ICMP を遮断したり、理解できないパケットをドロップしたりするネットワークがある
- 輻輳制御に関する知識が必要である
GN⁺の要約
- この記事は TCP の信頼性に関する誤った思い込みを扱っており、ネットワーク管理ツールの選択に関する議論も含んでいる
- TCP の信頼性の問題は、Paxos のような複雑なアルゴリズムが必要になることを説明している
- ネットワーク透過性に関する誤った思い込みが、実際の問題を引き起こしうることを強調している
- ネットワーク管理ツールを選ぶ際に考慮すべきさまざまな要素を提示している
1件のコメント
Hacker Newsの意見
「falsehoods programmers believe」形式が明確でなく、混乱する
Ethernetケーブルを抜いて再接続しても接続が維持されることに驚く
「at most once」または「at least once」の配信保証は可能だが、「exactly once」の配信保証は不可能だ
ACKが未解決の状態で接続が切れると、送信者はセグメントが受信されたかどうかわからない
誤り訂正符号について聞いたことがないのか疑問だ
データセンター内部で独自ハードウェアを使う場合は、低レベルの詳細を無視できる
この記事は完成した文章ではなく、HNの投稿タイトルが誤解を招く可能性がある
VKontakteで働いていたときに解決しようとしていた問題を思い出す
多くの人はTCPが関数呼び出しではないことを理解していない