Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

TCP 〜 ネットワーク勉強会資料

1,539 views

Published on

社内勉強会用資料
初心者向け

Published in: Internet
  • Be the first to comment

TCP 〜 ネットワーク勉強会資料

  1. 1. 2017/10/17 佐々木 健 ネットワークの基本について学ぶ 第3回 TCP
  2. 2. この文書について 前回、前々回の勉強会で沢山お菓子をもらえて嬉 しかったのですが、沢山のお菓子がいつの間にか 減ってきたので、また勉強会をやる気になりまし た。 前回、前々回で説明を省いたところに今回はフォー カスしたいと思っています。
  3. 3. お願い 定時後の勉強会なので気楽に行きましょう。 飲食、雑談は自由にしてください。 みんなであれこれ雑談してくれるほうが私もおやつ を食べやすいです。 わからないことがあったら遠慮せずに聞いてね。 #beginner-net-study というSlackチャンネルを 作ったので雑談に使ってくださいませ。
  4. 4. 本日のタイムスケジュール(予定) ● 参加者の自己紹介(5分) – 人数が少なかったら全員 – 人数が多かったら近くにいる5人に自己紹介 ● 前回までのおさらい(5分) ● 本編(15分) ● 質疑(5分)
  5. 5. 自己紹介タイム ● 参加者の自己紹介(5分) – 人数が少なかったら全員 – 人数が多かったら近くにいる5人に自己紹介 ● 前回のおさらい(5分) ● 本編(15分) ● 質疑(10分)
  6. 6. 前回までのおさらい 説明したこと、疑問点のまとめ
  7. 7. パケット通信とは何か? 郵便でデータを運ぶイメージ 封筒には、宛先、差出元が書いてある
  8. 8. インターネットの基本アイディア ● データをパケット通信で送る ● パケットには宛先と差出元を書いておく ● パケットを受けとった人は各自が適切に判断して 処理をする ● 宛先、差出元はユニーク(世界でひとつだけ)
  9. 9. こんな質問があった ● 大きいパケットはどう運ぶの? ● 分割して送って、届いたところで再構成する?
  10. 10. 丸田先生による解説1 元情報を「パケット」という細かい単位に分解
  11. 11. 丸田先生による解説2 パケットには宛先と差し出し元を書いておく 一つ一つに宛先と差し出し元情報を乗っけて通信する よ。
  12. 12. 丸田先生による解説3 受け取った先が適切に処理をする 元に戻すとかして、適切に(玉虫色の表現)処理します。
  13. 13. 本日のネタ元 ● パケットを分割、再構成する仕組みを勉強しよう
  14. 14. インターネットプロトコルの階層構造 TCP HTTP IP Ethernet 前回説明したところ 今日やるところ 前々回説明したところ
  15. 15. 前回資料:実際に使われてるNAT ● この資料で説明した、IPアドレスだけを変換する、原始的な NAT(Network Address Translation)は現在はほとんど使われ ていない。 ● IPアドレスに加えて、ポート番号の変換を行な う、NAPT(Network Address Port Transation)を使うのが普 通。今では、NATと言えばNAPTのことを指すのが一般的。 ● NAPTの説明は、ポート番号について説明してからのほうが良 いかな。 これも説明するよ
  16. 16. 今日のお題1 TCP (Transmission Control Protocol)
  17. 17. 実現したいこと ● 相手との通信の確立、切断 ● 双方向通信、同時通信 ● 高信頼性、安定性
  18. 18. パケット通信(IP)でどう実現するか? ● 相手との通信の確立 ● 双方向通信、同時通信 ● 高信頼性、安定性 意外とむずかしい それを実現するのがTCP
  19. 19. 実現する仕掛け ● ポート番号 ● 3way hand shake ● シーケンス番号 ● フロー制御、輻輳制御 ● チェックサム
  20. 20. 実現する仕掛け ● ポート番号 ● 3way hand shake ● シーケンス番号 ● フロー制御、輻輳制御 ● チェックサム
  21. 21. ポート番号 ● マンションの宅配ボックス、のイメージ ● 利用したいときに使う ● あらかじめ番号がふられている(0〜65535)
  22. 22. ポートを使った通信のイメージ ● ポートとポートを繋いで通信する ● 1拠点から複数の接続ができる ● 元ポート番号と宛先ポート番号を決めて通信をする。 ● 片側が1つで宛先が複数という接続もある。
  23. 23. ポート番号の使いわけ ● 3種類定義されている ● でも強制力はない。最近はわりと自由に使われている。 – Linuxでは、32768番以降を動的に割り当てている。 種類 範囲 内容 WELL KNOWN PORT NUNBERS 0番〜1023番 一般的なポート番号 UNIX系OSでは利用するためにはroot 権限が必要 REGISTERED PORT NUMBERS 1024番〜49151番 登録済みポート番号 DYNAMIC AND/OR PRIVATE PORTS 49152番〜65535番 自由に使用できるポート番号
  24. 24. WELL KNOWN PORT NUNBERS ● IANA(Internet Assigned Numbers Authority)が管理してい る。 ● UNIX系OSでは /etc/services というファイルに記述されてい る。 ● 一般的に良く使われるポート番号 – TCP/22: SSH (リモート接続) – TCP/25: SMTP (メール送信) – TCP/80: HTTP (ウェブアクセス) – UDP/123: NTP (時刻同期) – TCP/443: HTTPS (セキュアなウェブアクセス)
  25. 25. 実現する仕掛け ● ポート番号 ● 3way hand shake ● シーケンス番号 ● フロー制御、輻輳制御 ● チェックサム
  26. 26. 3way hand shake ● 通信を開始するための儀式 データ送っていい? OK〜 そっちからも届いた 通信開始するね SYN SYN+ACK ACK
  27. 27. 通信の前にやらなきゃいけないこと ● 受け側は、受ける口(ポート)を作る – Listen ● 送る側は、送る口(ポート)を作る – Connect
  28. 28. 接続時の状態遷移 ● Wikipedia上にある図がわかりやすい – Wikimedia:File:Tcp start.svg
  29. 29. 切断時の遷移図 ● Wikipedia上にある図がわかりやすい – Wikimedia:File:Tcp end.svg
  30. 30. 実現する仕掛け ● ポート番号 ● 3way hand shake ● シーケンス番号 ● フロー制御、輻輳制御 ● チェックサム
  31. 31. 分解されたものを組みたてるために
  32. 32. 分解するときに番号を振る 分割 採番 106 105 104 103 102 101
  33. 33. 番号順に組み立てる 組立 106 105 104 103 102 101
  34. 34. もし途中が抜けていたら 106 105 103 102 101 104番が届いてないから 送り直してー 104番送るねー
  35. 35. 実現する仕掛け ● ポート番号 ● 3way hand shake ● シーケンス番号 ● フロー制御、輻輳制御 ● チェックサム
  36. 36. 確認しながらデータを送ると大変 101番届いたー 101番送るねー 102番届いたー 102番送るねー 103番届いたー 103番送るねー 104番届いたー 104番送るねー
  37. 37. ある程度まとめて送る 101番送るねー 102番送るねー 103番送るねー 101〜104番届いたー 104番送るねー
  38. 38. 余裕があるなら沢山送る 101番送るねー 102番送るねー 103番送るねー 全部届いたー 104番送るねー ○○番送るねー ○○番送るねー ○○番送るねー ○○番送るねー ○○番送るねー ○○番送るねー ○○番送るねー ○○番送るねー ○○番送るねー ○○番送るねー
  39. 39. 余裕がなかったら断わる 101番送るねー 102番送るねー 103番送るねー そんなに送ってこないで!! 104番送るねー ○○番送るねー ○○番送るねー ○○番送るねー ○○番送るねー ○○番送るねー ○○番送るねー ○○番送るねー ○○番送るねー ○○番送るねー ○○番送るねー
  40. 40. 実現する仕掛け ● ポート番号 ● 3way hand shake ● シーケンス番号 ● フロー制御、輻輳制御 ● チェックサム
  41. 41. チェックサム ● 誤り検出のための手法 ● 受けとったデータが壊れていないか判定するために用 いられる ● 各ワード列毎の総和を取っていき、その下位1ワード 部分を符号として用いるのが一番簡単なチェックサム ● TCPにおいては、疑似ヘッダを定義し、パディングし た後、全16ビットワードを1の補数表現で加算してい き、その総和をビット毎に反転する – ※さらりと流してくれていいよ。興味がある人は調べれば 良いと思う
  42. 42. 実現する仕掛け(再掲) ● ポート番号 ● 3way hand shake ● シーケンス番号 ● フロー制御、輻輳制御 ● チェックサム
  43. 43. こんなヘッダとして実装されている 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 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Data | |U|A|P|R|S|F| | | Offset| Reserved |R|C|S|S|Y|I| Window | | | |G|K|H|T|N|N| | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Checksum | Urgent Pointer | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Options | Padding | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | data | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ TCP Header Format RFC793
  44. 44. 各ノードがデータ通信時にやること ● データをパケットに分割し、それぞれのパケット にヘッダを付けて送信 ● パケットを受けとった人はヘッダを見て、適切に 判断して処理をする IPでやっていることと考え方はあまり変わらない。 ルール、仕組み、等の機能はヘッダが受け持つ
  45. 45. 具体的なパケットのイメージ TCPヘッダ データ IPヘッダ
  46. 46. src/dest 情報はどこにあるか (通信制御用情報) TCPヘッダ データ IPヘッダ src IP dest IP src port dest port
  47. 47. TCPは難しいのでは??? ● 実装はわりと大変 ● ちゃんと理解するのもわりと大変 ● 仕様を元に細かい動作を動きを追って いくと良くわからないところも結構出て くる。 – 実装依存となるところもある ● 元の仕様はセキュリティ的に甘いところ もあったり。
  48. 48. RFC 793 に書いてあること 2.10. Robustness Principle TCP implementations will follow a general principle of robustness: be conservative in what you do, be liberal in what you accept from others. 己のなすことには慎重たれ、 他人のなすことに は寛容たれ
  49. 49. 今日のお題2 UDP User Datagram Protocol
  50. 50. インターネットプロトコルの階層構造 UDP NTP IP Ethernet TCPじゃなくて UDPを使う場合もある
  51. 51. UDPがやること パケットにIPアドレスだけじゃなくて、ポート番号 を付けると便利!!
  52. 52. こんなヘッダとして実装されている 0 7 8 15 16 23 24 31 +--------+--------+--------+--------+ | Source | Destination | | Port | Port | +--------+--------+--------+--------+ | | | | Length | Checksum | +--------+--------+--------+--------+ | | data octets ... +---------------- ... User Datagram Header Format RFC768 3ページ!!
  53. 53. パケット全体イメージ UDPヘッダ データ IPヘッダ src IP dest IP src port dest port
  54. 54. 質疑応答
  55. 55. RFC:791 INTERNET PROTOCOL 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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |Version| IHL |Type of Service| Total Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Identification |Flags| Fragment Offset | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Time to Live | Protocol | Header Checksum | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Source Address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Destination Address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Options | Padding | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Example Internet Datagram Header 差出元 宛先 これ何??次回予告?

×