SlideShare une entreprise Scribd logo
1  sur  55
Télécharger pour lire hors ligne
2017/10/17
佐々木 健
ネットワークの基本について学ぶ
第3回
TCP
この文書について
前回、前々回の勉強会で沢山お菓子をもらえて嬉
しかったのですが、沢山のお菓子がいつの間にか
減ってきたので、また勉強会をやる気になりまし
た。
前回、前々回で説明を省いたところに今回はフォー
カスしたいと思っています。
お願い
定時後の勉強会なので気楽に行きましょう。
飲食、雑談は自由にしてください。
みんなであれこれ雑談してくれるほうが私もおやつ
を食べやすいです。
わからないことがあったら遠慮せずに聞いてね。
#beginner-net-study というSlackチャンネルを
作ったので雑談に使ってくださいませ。
本日のタイムスケジュール(予定)
●
参加者の自己紹介(5分)
– 人数が少なかったら全員
– 人数が多かったら近くにいる5人に自己紹介
●
前回までのおさらい(5分)
●
本編(15分)
●
質疑(5分)
自己紹介タイム
●
参加者の自己紹介(5分)
– 人数が少なかったら全員
– 人数が多かったら近くにいる5人に自己紹介
●
前回のおさらい(5分)
●
本編(15分)
●
質疑(10分)
前回までのおさらい
説明したこと、疑問点のまとめ
パケット通信とは何か?
郵便でデータを運ぶイメージ
封筒には、宛先、差出元が書いてある
インターネットの基本アイディア
●
データをパケット通信で送る
●
パケットには宛先と差出元を書いておく
●
パケットを受けとった人は各自が適切に判断して
処理をする
●
宛先、差出元はユニーク(世界でひとつだけ)
こんな質問があった
●
大きいパケットはどう運ぶの?
●
分割して送って、届いたところで再構成する?
丸田先生による解説1
元情報を「パケット」という細かい単位に分解
丸田先生による解説2
パケットには宛先と差し出し元を書いておく
一つ一つに宛先と差し出し元情報を乗っけて通信する
よ。
丸田先生による解説3
受け取った先が適切に処理をする
元に戻すとかして、適切に(玉虫色の表現)処理します。
本日のネタ元
●
パケットを分割、再構成する仕組みを勉強しよう
インターネットプロトコルの階層構造
TCP
HTTP
IP
Ethernet
前回説明したところ
今日やるところ
前々回説明したところ
前回資料:実際に使われてるNAT
●
この資料で説明した、IPアドレスだけを変換する、原始的な
NAT(Network Address Translation)は現在はほとんど使われ
ていない。
●
IPアドレスに加えて、ポート番号の変換を行な
う、NAPT(Network Address Port Transation)を使うのが普
通。今では、NATと言えばNAPTのことを指すのが一般的。
●
NAPTの説明は、ポート番号について説明してからのほうが良
いかな。
これも説明するよ
今日のお題1
TCP
(Transmission Control Protocol)
実現したいこと
●
相手との通信の確立、切断
●
双方向通信、同時通信
●
高信頼性、安定性
パケット通信(IP)でどう実現するか?
●
相手との通信の確立
●
双方向通信、同時通信
●
高信頼性、安定性
意外とむずかしい
それを実現するのがTCP
実現する仕掛け
●
ポート番号
●
3way hand shake
●
シーケンス番号
●
フロー制御、輻輳制御
●
チェックサム
実現する仕掛け
●
ポート番号
●
3way hand shake
●
シーケンス番号
●
フロー制御、輻輳制御
●
チェックサム
ポート番号
●
マンションの宅配ボックス、のイメージ
●
利用したいときに使う
●
あらかじめ番号がふられている(0〜65535)
ポートを使った通信のイメージ
●
ポートとポートを繋いで通信する
●
1拠点から複数の接続ができる
●
元ポート番号と宛先ポート番号を決めて通信をする。
●
片側が1つで宛先が複数という接続もある。
ポート番号の使いわけ
●
3種類定義されている
●
でも強制力はない。最近はわりと自由に使われている。
– Linuxでは、32768番以降を動的に割り当てている。
種類 範囲 内容
WELL KNOWN PORT
NUNBERS
0番〜1023番 一般的なポート番号
UNIX系OSでは利用するためにはroot
権限が必要
REGISTERED PORT
NUMBERS
1024番〜49151番 登録済みポート番号
DYNAMIC AND/OR
PRIVATE PORTS
49152番〜65535番 自由に使用できるポート番号
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 (セキュアなウェブアクセス)
実現する仕掛け
●
ポート番号
●
3way hand shake
●
シーケンス番号
●
フロー制御、輻輳制御
●
チェックサム
3way hand shake
●
通信を開始するための儀式
データ送っていい?
OK〜
そっちからも届いた
通信開始するね
SYN
SYN+ACK
ACK
通信の前にやらなきゃいけないこと
●
受け側は、受ける口(ポート)を作る
– Listen
●
送る側は、送る口(ポート)を作る
– Connect
接続時の状態遷移
●
Wikipedia上にある図がわかりやすい
– Wikimedia:File:Tcp start.svg
切断時の遷移図
●
Wikipedia上にある図がわかりやすい
– Wikimedia:File:Tcp end.svg
実現する仕掛け
●
ポート番号
●
3way hand shake
●
シーケンス番号
●
フロー制御、輻輳制御
●
チェックサム
分解されたものを組みたてるために
分解するときに番号を振る
分割
採番
106 105 104 103 102 101
番号順に組み立てる
組立
106 105 104 103 102 101
もし途中が抜けていたら
106 105 103 102 101
104番が届いてないから
送り直してー
104番送るねー
実現する仕掛け
●
ポート番号
●
3way hand shake
●
シーケンス番号
●
フロー制御、輻輳制御
●
チェックサム
確認しながらデータを送ると大変
101番届いたー
101番送るねー
102番届いたー
102番送るねー
103番届いたー
103番送るねー
104番届いたー
104番送るねー
ある程度まとめて送る
101番送るねー
102番送るねー
103番送るねー
101〜104番届いたー
104番送るねー
余裕があるなら沢山送る
101番送るねー
102番送るねー
103番送るねー
全部届いたー
104番送るねー
○○番送るねー
○○番送るねー
○○番送るねー
○○番送るねー
○○番送るねー
○○番送るねー
○○番送るねー
○○番送るねー
○○番送るねー
○○番送るねー
余裕がなかったら断わる
101番送るねー
102番送るねー
103番送るねー
そんなに送ってこないで!!
104番送るねー
○○番送るねー
○○番送るねー
○○番送るねー
○○番送るねー
○○番送るねー
○○番送るねー
○○番送るねー
○○番送るねー
○○番送るねー
○○番送るねー
実現する仕掛け
●
ポート番号
●
3way hand shake
●
シーケンス番号
●
フロー制御、輻輳制御
●
チェックサム
チェックサム
●
誤り検出のための手法
●
受けとったデータが壊れていないか判定するために用
いられる
●
各ワード列毎の総和を取っていき、その下位1ワード
部分を符号として用いるのが一番簡単なチェックサム
●
TCPにおいては、疑似ヘッダを定義し、パディングし
た後、全16ビットワードを1の補数表現で加算してい
き、その総和をビット毎に反転する
– ※さらりと流してくれていいよ。興味がある人は調べれば
良いと思う
実現する仕掛け(再掲)
●
ポート番号
●
3way hand shake
●
シーケンス番号
●
フロー制御、輻輳制御
●
チェックサム
こんなヘッダとして実装されている
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
各ノードがデータ通信時にやること
●
データをパケットに分割し、それぞれのパケット
にヘッダを付けて送信
●
パケットを受けとった人はヘッダを見て、適切に
判断して処理をする
IPでやっていることと考え方はあまり変わらない。
ルール、仕組み、等の機能はヘッダが受け持つ
具体的なパケットのイメージ
TCPヘッダ
データ
IPヘッダ
src/dest 情報はどこにあるか
(通信制御用情報)
TCPヘッダ
データ
IPヘッダ
src IP dest IP
src port dest port
TCPは難しいのでは???
●
実装はわりと大変
●
ちゃんと理解するのもわりと大変
●
仕様を元に細かい動作を動きを追って
いくと良くわからないところも結構出て
くる。
– 実装依存となるところもある
●
元の仕様はセキュリティ的に甘いところ
もあったり。
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.
己のなすことには慎重たれ、 他人のなすことに
は寛容たれ
今日のお題2
UDP
User Datagram Protocol
インターネットプロトコルの階層構造
UDP
NTP
IP
Ethernet
TCPじゃなくて
UDPを使う場合もある
UDPがやること
パケットにIPアドレスだけじゃなくて、ポート番号
を付けると便利!!
こんなヘッダとして実装されている
0 7 8 15 16 23 24 31
+--------+--------+--------+--------+
| Source | Destination |
| Port | Port |
+--------+--------+--------+--------+
| | |
| Length | Checksum |
+--------+--------+--------+--------+
|
| data octets ...
+---------------- ...
User Datagram Header Format
RFC768
3ページ!!
パケット全体イメージ
UDPヘッダ
データ
IPヘッダ
src IP dest IP
src port dest port
質疑応答
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
差出元
宛先
これ何??次回予告?

Contenu connexe

Plus de Ken SASAKI

The Internet Situation in Myanmar
The Internet Situation in MyanmarThe Internet Situation in Myanmar
The Internet Situation in MyanmarKen SASAKI
 
世界のインターネット ミャンマー編
世界のインターネット ミャンマー編世界のインターネット ミャンマー編
世界のインターネット ミャンマー編Ken SASAKI
 
さくらインターネット西新宿セミナールームと私
さくらインターネット西新宿セミナールームと私さくらインターネット西新宿セミナールームと私
さくらインターネット西新宿セミナールームと私Ken SASAKI
 
インターネットの仕組み enPiT資料
インターネットの仕組み enPiT資料インターネットの仕組み enPiT資料
インターネットの仕組み enPiT資料Ken SASAKI
 
通販チャレンジ ミャンマー編
通販チャレンジ ミャンマー編通販チャレンジ ミャンマー編
通販チャレンジ ミャンマー編Ken SASAKI
 
槓の光 for ssmonline #4
槓の光 for ssmonline #4槓の光 for ssmonline #4
槓の光 for ssmonline #4Ken SASAKI
 
リモートスクラム開発のノウハウ
リモートスクラム開発のノウハウリモートスクラム開発のノウハウ
リモートスクラム開発のノウハウKen SASAKI
 
私が好きなITコミュニティイベント
私が好きなITコミュニティイベント私が好きなITコミュニティイベント
私が好きなITコミュニティイベントKen SASAKI
 
リモートスクラム開発やってみた
リモートスクラム開発やってみたリモートスクラム開発やってみた
リモートスクラム開発やってみたKen SASAKI
 
Wi-Fiのイマ Internet Week 2019 発表資料
Wi-Fiのイマ Internet Week 2019 発表資料Wi-Fiのイマ Internet Week 2019 発表資料
Wi-Fiのイマ Internet Week 2019 発表資料Ken SASAKI
 
中国のネットワーク勉強会 JANOG44野良BoF資料
中国のネットワーク勉強会 JANOG44野良BoF資料中国のネットワーク勉強会 JANOG44野良BoF資料
中国のネットワーク勉強会 JANOG44野良BoF資料Ken SASAKI
 
ダイビングのすゝめ
ダイビングのすゝめダイビングのすゝめ
ダイビングのすゝめKen SASAKI
 
「入門Kubernetes」輪読会資料 6章
「入門Kubernetes」輪読会資料 6章「入門Kubernetes」輪読会資料 6章
「入門Kubernetes」輪読会資料 6章Ken SASAKI
 
監視 〜 ネットワーク勉強会資料
監視 〜 ネットワーク勉強会資料監視 〜 ネットワーク勉強会資料
監視 〜 ネットワーク勉強会資料Ken SASAKI
 
オーケストラと&オーケストレーション
オーケストラと&オーケストレーションオーケストラと&オーケストレーション
オーケストラと&オーケストレーションKen SASAKI
 
パケット通信とInternet Protocol
パケット通信とInternet Protocolパケット通信とInternet Protocol
パケット通信とInternet ProtocolKen SASAKI
 
データ処理の改善をどのように行なうか
データ処理の改善をどのように行なうかデータ処理の改善をどのように行なうか
データ処理の改善をどのように行なうかKen SASAKI
 
初心者向けインターネットの仕組みと8/25の障害についての説明
初心者向けインターネットの仕組みと8/25の障害についての説明初心者向けインターネットの仕組みと8/25の障害についての説明
初心者向けインターネットの仕組みと8/25の障害についての説明Ken SASAKI
 
LL2017 プログラミング言語鑑定団 資料
LL2017 プログラミング言語鑑定団 資料LL2017 プログラミング言語鑑定団 資料
LL2017 プログラミング言語鑑定団 資料Ken SASAKI
 
2017年 日本のマストドン
2017年 日本のマストドン2017年 日本のマストドン
2017年 日本のマストドンKen SASAKI
 

Plus de Ken SASAKI (20)

The Internet Situation in Myanmar
The Internet Situation in MyanmarThe Internet Situation in Myanmar
The Internet Situation in Myanmar
 
世界のインターネット ミャンマー編
世界のインターネット ミャンマー編世界のインターネット ミャンマー編
世界のインターネット ミャンマー編
 
さくらインターネット西新宿セミナールームと私
さくらインターネット西新宿セミナールームと私さくらインターネット西新宿セミナールームと私
さくらインターネット西新宿セミナールームと私
 
インターネットの仕組み enPiT資料
インターネットの仕組み enPiT資料インターネットの仕組み enPiT資料
インターネットの仕組み enPiT資料
 
通販チャレンジ ミャンマー編
通販チャレンジ ミャンマー編通販チャレンジ ミャンマー編
通販チャレンジ ミャンマー編
 
槓の光 for ssmonline #4
槓の光 for ssmonline #4槓の光 for ssmonline #4
槓の光 for ssmonline #4
 
リモートスクラム開発のノウハウ
リモートスクラム開発のノウハウリモートスクラム開発のノウハウ
リモートスクラム開発のノウハウ
 
私が好きなITコミュニティイベント
私が好きなITコミュニティイベント私が好きなITコミュニティイベント
私が好きなITコミュニティイベント
 
リモートスクラム開発やってみた
リモートスクラム開発やってみたリモートスクラム開発やってみた
リモートスクラム開発やってみた
 
Wi-Fiのイマ Internet Week 2019 発表資料
Wi-Fiのイマ Internet Week 2019 発表資料Wi-Fiのイマ Internet Week 2019 発表資料
Wi-Fiのイマ Internet Week 2019 発表資料
 
中国のネットワーク勉強会 JANOG44野良BoF資料
中国のネットワーク勉強会 JANOG44野良BoF資料中国のネットワーク勉強会 JANOG44野良BoF資料
中国のネットワーク勉強会 JANOG44野良BoF資料
 
ダイビングのすゝめ
ダイビングのすゝめダイビングのすゝめ
ダイビングのすゝめ
 
「入門Kubernetes」輪読会資料 6章
「入門Kubernetes」輪読会資料 6章「入門Kubernetes」輪読会資料 6章
「入門Kubernetes」輪読会資料 6章
 
監視 〜 ネットワーク勉強会資料
監視 〜 ネットワーク勉強会資料監視 〜 ネットワーク勉強会資料
監視 〜 ネットワーク勉強会資料
 
オーケストラと&オーケストレーション
オーケストラと&オーケストレーションオーケストラと&オーケストレーション
オーケストラと&オーケストレーション
 
パケット通信とInternet Protocol
パケット通信とInternet Protocolパケット通信とInternet Protocol
パケット通信とInternet Protocol
 
データ処理の改善をどのように行なうか
データ処理の改善をどのように行なうかデータ処理の改善をどのように行なうか
データ処理の改善をどのように行なうか
 
初心者向けインターネットの仕組みと8/25の障害についての説明
初心者向けインターネットの仕組みと8/25の障害についての説明初心者向けインターネットの仕組みと8/25の障害についての説明
初心者向けインターネットの仕組みと8/25の障害についての説明
 
LL2017 プログラミング言語鑑定団 資料
LL2017 プログラミング言語鑑定団 資料LL2017 プログラミング言語鑑定団 資料
LL2017 プログラミング言語鑑定団 資料
 
2017年 日本のマストドン
2017年 日本のマストドン2017年 日本のマストドン
2017年 日本のマストドン
 

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