ネットワークの基本3〜TCP

145 Views

September 09, 23

スライド概要

DMMの社内向け勉強会資料
インターネットの仕組みについて知りたい、と若者が言ってたので、開催した勉強会
3回目はTCPについて説明

profile-image

SlideShareが使いにくくなってしまったのでこちらに全部移してみた。 - 勉強会で使った資料 - イベントでの登壇資料 等を中心に上げてあります。

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

ネットワークの基本について学ぶ 第3回 TCP 2017/10/17 佐々木 健

2.

この文書について 前回、前々回の勉強会で沢山お菓子をもらえて嬉 しかったのですが、沢山のお菓子がいつの間にか 減ってきたので、また勉強会をやる気になりまし た。 前回、前々回で説明を省いたところに今回はフォー カスしたいと思っています。

3.

お願い 定時後の勉強会なので気楽に行きましょう。 飲食、雑談は自由にしてください。 みんなであれこれ雑談してくれるほうが私もおやつ を食べやすいです。 わからないことがあったら遠慮せずに聞いてね。 #beginner-net-study というSlackチャンネルを 作ったので雑談に使ってくださいませ。

4.

本日のタイムスケジュール(予定) ● 参加者の自己紹介(5分) – 人数が少なかったら全員 – 人数が多かったら近くにいる5人に自己紹介 ● 前回までのおさらい(5分) ● 本編(15分) ● 質疑(5分)

5.

自己紹介タイム ● 参加者の自己紹介(5分) – 人数が少なかったら全員 – 人数が多かったら近くにいる5人に自己紹介 ● 前回のおさらい(5分) ● 本編(15分) ● 質疑(10分)

6.

前回までのおさらい 説明したこと、疑問点のまとめ

7.

パケット通信とは何か? 郵便でデータを運ぶイメージ 封筒には、 宛先、差出元が書いてある

8.

インターネットの基本アイディア ● データをパケット通信で送る ● パケットには宛先と差出元を書いておく ● ● パケットを受けとった人は各自が適切に判断して 処理をする 宛先、差出元はユニーク(世界でひとつだけ)

9.

こんな質問があった ● 大きいパケットはどう運ぶの? ● 分割して送って、届いたところで再構成する?

10.

丸田先生による解説1 元情報を「パケット」という細かい単位に分解

11.

丸田先生による解説2 パケットには宛先と差し出し元を書いておく 一つ一つに宛先と差し出し元情報を乗っけて通信する よ。

12.

丸田先生による解説3 受け取った先が適切に処理をする 元に戻すとかして、適切に(玉虫色の表現)処理します。

13.

本日のネタ元 ● パケットを分割、再構成する仕組みを勉強しよう

14.

インターネットプロトコルの階層構造 前回説明したところ HTTP TCP IP Ethernet 前々回説明したところ 今日やるところ

15.

前回資料:実際に使われてるNAT ● ● ● この資料で説明した、IPアドレスだけを変換する、原始的な NAT(Network Address Translation)は現在はほとんど使われ ていない。 IPアドレスに加えて、ポート番号の変換を行な う、NAPT(Network Address Port Transation)を使うのが普 通。今では、NATと言えばNAPTのことを指すのが一般的。 NAPTの説明は、ポート番号について説明してからのほうが良 いかな。 これも説明するよ

16.

今日のお題1 TCP (Transmission Control Protocol)

17.

実現したいこと ● 相手との通信の確立、切断 ● 双方向通信、同時通信 ● 高信頼性、安定性

18.

パケット通信(IP)でどう実現するか? ● 相手との通信の確立 ● 双方向通信、同時通信 ● 高信頼性、安定性 意外とむずかしい それを実現するのがTCP

19.

実現する仕掛け ● ポート番号 ● 3way hand shake ● シーケンス番号 ● フロー制御、輻輳制御 ● チェックサム

20.

実現する仕掛け ● ポート番号 ● 3way hand shake ● シーケンス番号 ● フロー制御、輻輳制御 ● チェックサム

21.

ポート番号 ● マンションの宅配ボックス、のイメージ ● 利用したいときに使う ● あらかじめ番号がふられている(0〜65535)

22.

ポートを使った通信のイメージ ● ポートとポートを繋いで通信する ● 1拠点から複数の接続ができる ● 元ポート番号と宛先ポート番号を決めて通信をする。 ● 片側が1つで宛先が複数という接続もある。

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.

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.

実現する仕掛け ● ポート番号 ● 3way hand shake ● シーケンス番号 ● フロー制御、輻輳制御 ● チェックサム

26.

3way hand shake ● 通信を開始するための儀式 SYN データ送っていい? SYN+ACK OK〜 そっちからも届いた 通信開始するね ACK

27.

通信の前にやらなきゃいけないこと ● 受け側は、受ける口(ポート)を作る – ● Listen 送る側は、送る口(ポート)を作る – Connect

28.

接続時の状態遷移 ● Wikipedia上にある図がわかりやすい – Wikimedia:File:Tcp start.svg

29.

切断時の遷移図 ● Wikipedia上にある図がわかりやすい – Wikimedia:File:Tcp end.svg

30.

実現する仕掛け ● ポート番号 ● 3way hand shake ● シーケンス番号 ● フロー制御、輻輳制御 ● チェックサム

31.

分解されたものを組みたてるために

32.

分解するときに番号を振る 分割 採番 106 105 104 103 102 101

33.

番号順に組み立てる 106 105 104 103 組立 102 101

34.

もし途中が抜けていたら 106 105 103 104番が届いてないから 送り直してー 104番送るねー 102 101

35.

実現する仕掛け ● ポート番号 ● 3way hand shake ● シーケンス番号 ● フロー制御、輻輳制御 ● チェックサム

36.

確認しながらデータを送ると大変 101番送るねー 101番届いたー 102番送るねー 102番届いたー 103番送るねー 103番届いたー 104番送るねー 104番届いたー

37.

ある程度まとめて送る 101番送るねー 102番送るねー 103番送るねー 104番送るねー 101〜104番届いたー

38.

余裕があるなら沢山送る 101番送るねー ○○番送るねー 102番送るねー ○○番送るねー 103番送るねー ○○番送るねー 104番送るねー ○○番送るねー ○○番送るねー ○○番送るねー ○○番送るねー ○○番送るねー ○○番送るねー ○○番送るねー 全部届いたー

39.

余裕がなかったら断わる 101番送るねー ○○番送るねー 102番送るねー ○○番送るねー 103番送るねー ○○番送るねー 104番送るねー ○○番送るねー ○○番送るねー ○○番送るねー ○○番送るねー ○○番送るねー ○○番送るねー ○○番送るねー そんなに送ってこないで!!

40.

実現する仕掛け ● ポート番号 ● 3way hand shake ● シーケンス番号 ● フロー制御、輻輳制御 ● チェックサム

41.

チェックサム ● ● ● ● 誤り検出のための手法 受けとったデータが壊れていないか判定するために用 いられる 各ワード列毎の総和を取っていき、その下位1ワード 部分を符号として用いるのが一番簡単なチェックサム TCPにおいては、疑似ヘッダを定義し、パディングし た後、全16ビットワードを1の補数表現で加算してい き、その総和をビット毎に反転する – ※さらりと流してくれていいよ。興味がある人は調べれば 良いと思う

42.

実現する仕掛け(再掲) ● ポート番号 ● 3way hand shake ● シーケンス番号 ● フロー制御、輻輳制御 ● チェックサム

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| | |G|K|H|T|N|N| | | Window | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Checksum | Urgent Pointer | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Options | Padding | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | data | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ TCP Header Format RFC793

44.

各ノードがデータ通信時にやること ● ● データをパケットに分割し、それぞれのパケット にヘッダを付けて送信 パケットを受けとった人はヘッダを見て、適切に 判断して処理をする IPでやっていることと考え方はあまり変わらない。 ルール、仕組み、等の機能はヘッダが受け持つ

45.

具体的なパケットのイメージ IPヘッダ TCPヘッダ データ

46.

src/dest 情報はどこにあるか IPヘッダ src IP dest IP src port dest port (通信制御用情報) TCPヘッダ データ

47.

TCPは難しいのでは??? ● 実装はわりと大変 ● ちゃんと理解するのもわりと大変 ● 仕様を元に細かい動作を動きを追って いくと良くわからないところも結構出て くる。 – ● 実装依存となるところもある 元の仕様はセキュリティ的に甘いところ もあったり。

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.

今日のお題2 UDP User Datagram Protocol

50.

インターネットプロトコルの階層構造 NTP UDP IP Ethernet TCPじゃなくて UDPを使う場合もある

51.

UDPがやること パケットにIPアドレスだけじゃなくて、ポート番号 を付けると便利!!

52.

こんなヘッダとして実装されている 0 7 8 15 16 23 24 31 +--------+--------+--------+--------+ | Source | | Port | Destination Port | | +--------+--------+--------+--------+ | | | Length | | Checksum | +--------+--------+--------+--------+ | | data octets ... +---------------- ... User Datagram Header Format RFC768 3ページ!!

53.

パケット全体イメージ IPヘッダ src IP dest IP src port dest port UDPヘッダ データ

54.

質疑応答

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 宛先