【12日目】TCP/IPネットワーク入門(第5章UDP編)
皆さん,こんにちは.bb_lotusです. さて,今回はTCP/IPネットワークに関しての12日目のアウトプットになります.
すぐアウトプットだけ見たい人はこちらから
(ネットワーク初学者のため,記載内容等間違いがありましたらどしどしコメント,指摘等していただければと思います.)
使用する教材はこちらです.
「Linuxで動かしながら学ぶTCP/IPネットワーク入門」
--------------↓ここからアウトプット--------------
さて,今回は第5章になります.
その中でも特に今回はUDPというものに関してやっていきます!
~用語確認~
トランスポート層:OSI基本参照モデルにおける第4層,IPのペイロードとなるプロトコル.(ペイロードとは,パケット通信においてパケットに含まれるヘッダやトレーラなどの付加的情報を除いた、データ本体のこと)
トランスポート層のプロトコル:TCP,UDPなど.(パケットが経路上で破棄されないように観察する)
さて,それではUDPについて見ていきましょう.
まず,イーサネットフレームを見てみると,UDPヘッダはIPのヘッダの直後にペイロードとして連結されている.
ということは,UDPヘッダの中に,通信するアプリケーションを区別する情報が入っている!
では,ここで通信するアプリケーションはどうやって区別するのか.
→ポートとポート番号で区別!!
ncコマンドはサーバ・クライアント方式
まずはサーバとなる側を用意.
$ nc -ulnv 127.0.0.1 54321
Bound on 127.0.0.1 54321
コマンドのオプション,-ulnvはそれぞれ以下の意味みたいです.
-u:UDPで通信することを指定している.
-l:サーバとして動作させることを指定している.
-n:IPアドレスをDNSで名前解決させないために指定する.
-v:コマンドの表示を詳細にするため指定する.
このコマンドの意味合いとしては,ncコマンドというアプリケーションがUDPの54321番ポートに入居する.
次に別のターミナルを開いて,クライアント側を用意しサーバに接続.
$ nc -u 127.0.0.1 54321
さらにUDP通信を観察するため,別のターミナルを開く.
$ sudo tcpdump -i lo -tnlA "udp and port 54321"
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on lo, link-type EN10MB (Ethernet), capture size 262144 bytes
クライアント側で文字列を入力しサーバへメッセージを送る.
$ nc -u 127.0.0.1 54321
Hello,World!
サーバのターミナルを見るとクライアントで入力した文字列が反映されている.
$ nc -ulnv 127.0.0.1 54321
Bound on 127.0.0.1 54321
Connection received on 127.0.0.1 58684
Hello,World!
tcpdumpコマンドを実行したターミナルも確認すると..
$ sudo tcpdump -i lo -tnlA "udp and port 54321"
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on lo, link-type EN10MB (Ethernet), capture size 262144 bytes
IP 127.0.0.1.58684 > 127.0.0.1.54321: UDP, length 13
E..)-*@.@............<.1...(Hello,World!
末尾に自分が入力した文字列が反映されているのが確認できます.
また,この文字列はUDPフォーマットのデータの部分(UDPペイロード)に格納され,運ばれています.
次は,サーバからクライアントへメッセージを送って見ましょう.
$ nc -ulnv 127.0.0.1 54321
Bound on 127.0.0.1 54321
Connection received on 127.0.0.1 58684
Hello,World!
Reply,World!
クライアントのターミナルを確認すると..
$ nc -u 127.0.0.1 54321
Hello,World!
Reply,World!
ちゃんと表示されていますね!
tcpdumpコマンドを実行しているターミナルも確認してみると,
$ sudo tcpdump -i lo -tnlA "udp and port 54321"
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on lo, link-type EN10MB (Ethernet), capture size 262144 bytes
IP 127.0.0.1.58684 > 127.0.0.1.54321: UDP, length 13
E..)-*@.@............<.1...(Hello,World!
IP 127.0.0.1.54321 > 127.0.0.1.58684: UDP, length 13
E..)0S@.@..o.........1.<...(Reply,World!
送信元と送信先のポート番号が入れ替わってメッセージのやりとりがされているのが確認できます!
これにて,UDPでのパケットのやりとりが確認できました!!
重要なこととしては,
トランスポート層のプロトコルで,ポート番号を確認すれば,それをやりとりしているアプリケーションが判断できるということ!
しかし,UDPには問題点があり,コネクションレス型という,送ったら送りっぱなしのプロトコルになっており,経路上でパケットが破棄されてもUDPは何もしてくれません.
そこで出てくるのがTCPさんです.
次回はそんなTCPさんを見ていきます!!
今回はここまで!
それではまた次回!!