ロボットシステム学2016第11回
Mon Dec 19 11:03:31 JST 2016 (modified: Fri Nov 29 17:21:21 JST 2019)
views: 1756, keywords:
ロボットシステム学
第11回
上田 隆一
2016年12月21日@千葉工業大学
ロボットと通信
- 自律分散系には必須ですね
- そうですよね?
- 使いますよね
- リモート監視・操作等
- 環境に埋め込んだセンサやアクチュエータの操作
- ソフトウェアのインストール
- 必須
本日の内容
- ネットワーク関係の設定方法を一通りおさえる
- イーサネット・TCP/IP IP
- アドレス・ポート
- ソケット通信については前期やったそうなので割愛
- ssh
IPアドレスの体系
- 計算機の住所(ただし複数持つことができる)
- IPアドレス: 0-255の数字を4つドットでつないで表記
- 例: 192.168.0.1
- ローカルのものとグローバルのものが存在
- グローバル
- 世界中でその計算機しか持っていない
- ローカル(プライベートIPアドレス)
- 閉じた環境で使うアドレス
- グローバル
ネットワーク部・ホスト部
- IPアドレスを2進数で書いた時、左側の何桁かは「ネットワーク部」を表し、残りは「ホスト部」を表す
- ネットワーク部
- インターネットの中の一つのグループ
- ホスト部
- 各PC固有の番号(住所で言うと番地)
- サブネットマスク
- どの部分がネットワーク部を表すかを示す数字
- 例: 255.255.255.0
- 2進数にすると11111111.11111111.11111111.00000000
- ということで、左から24ビットがネットワーク部
- 表記の例
- 192.168.1.2/255.255.255.0
- 192.168.1がネットワーク部で2がホスト部
- 192.168.1.2/24という書き方もある
- 左側24ビットがネットワーク部
- 192.168.1.2/255.255.255.0
- コマンドで確かめてみましょう
-
$ ip addr ... 3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether b8:27:eb:62:a8:84 brd ff:ff:ff:ff:ff:ff inet 192.168.0.4/24 brd 192.168.0.255 scope global eth0 ...
-
ルーティング
- 別のネットワーク部にある計算機には無条件でアクセスできない
- 別のネットワークにパケットを出す設定が必要
- 計算機で設定しなければならないこと
(DHCPを使っていると自動で設定されているので気がつかない)
- 外にパケットを出すときにどのルータに送るか
- どのIPアドレスが内側のものなのか
- 計算機で設定しなければならないこと
(DHCPを使っていると自動で設定されているので気がつかない)
- ルータがネットワークの境界にいて交通整理
- 「ルーティング」
- tracerouteを打ってみましょう(次ページ)
- 別のネットワークにパケットを出す設定が必要
$ traceroute 8.8.8.8 traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets 1 133.242.186.1 (133.242.186.1) 1.073 ms 1.062 ms 1.047 ms 2 iskrt102b-rt109e.bb.sakura.ad.jp (103.10.114.73) 1.003 ms iskrt101b-rt109e.bb.sakura.ad.jp (103.10.114.65) 1.013 ms iskrt102b-rt109e.bb.sakura.ad.jp (103.10.114.73) 1.010 ms 3 iskrt1s-rt101b-2.bb.sakura.ad.jp (103.10.113.93) 0.976 ms iskrt2s-rt102b-2.bb.sakura.ad.jp (103.10.113.105) 0.974 ms iskrt1s-rt101b-1.bb.sakura.ad.jp (103.10.113.9) 0.956 ms 4 iskrt3-rt2s.bb.sakura.ad.jp (103.10.113.113) 2.061 ms iskrt3-rt1s.bb.sakura.ad.jp (103.10.113.109) 2.050 ms iskrt4-rt2s.bb.sakura.ad.jp (103.10.113.121) 0.892 ms 5 tkort3-iskrt3.bb.sakura.ad.jp (157.17.131.33) 16.704 ms tkert1-iskrt4.bb.sakura.ad.jp (157.17.131.37) 20.049 ms tkort3-iskrt3.bb.sakura.ad.jp (157.17.131.33) 16.672 ms 6 as15169.ix.jpix.ad.jp (210.171.224.96) 20.114 ms 19.862 ms tkort3-ert1.bb.sakura.ad.jp (157.17.130.113) 18.166 ms 7 as15169.ix.jpix.ad.jp (210.171.224.96) 21.424 ms 108.170.242.161 (108.170.242.161) 20.457 ms as15169.ix.jpix.ad.jp (210.171.224.96) 21.547 ms 8 209.85.255.141 (209.85.255.141) 21.071 ms 108.170.242.193 (108.170.242.193) 22.333 ms 72.14.239.193 (72.14.239.193) 21.048 ms 9 72.14.238.173 (72.14.238.173) 22.553 ms 72.14.239.31 (72.14.239.31) 19.628 ms google-public-dns-a.google.com (8.8.8.8) 17.074 ms
- ルーティング情報の閲覧・設定
- route(8)を使います
- 下の例の読み方
- 255.255.254.0でマスクをかけた時のIPアドレスが一致すればeth0から相手のIPアドレスに直接送信
- それ以外の場合はeth0から 「デフォルトゲートウェイ」133.242.186.1に送信
ueda\@remote:~$ route
カーネルIP経路テーブル
受信先サイト ゲートウェイ ネットマスク フラグ Metric Ref 使用数 インタフェース
default 133.242.186.1 0.0.0.0 UG 0 0 0 eth0
localnet * 255.255.254.0 U 0 0 0 eth0
デフォルトゲートウェイの追加・削除
- やってみましょう。
ueda\@ubuntu16:~$ route -n カーネルIP経路テーブル 受信先サイト ゲートウェイ ネットマスク フラグ Metric Ref 使用数 インタフェース 0.0.0.0 192.168.2.1 0.0.0.0 UG 0 0 0 enp0s3 192.168.2.0 0.0.0.0 255.255.255.0 U 0 0 0 enp0s3 ueda\@ubuntu16:~$ sudo route del default gw 192.168.2.1 ueda\@ubuntu16:~$ ping 8.8.8.8 #パケットが外に行かない connect: Network is unreachable ueda\@ubuntu16:~$ sudo route add default gw 192.168.2.1 ueda\@ubuntu16:~$ ping 8.8.8.8 #今度はうまくいく PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. 64 bytes from 8.8.8.8: icmp_seq=1 ttl=54 time=4.50 ms ...
IPアドレスの設定
- 有線(Raspberry Piの場合)
- 最初からDHCPに設定されている
- 通常はこのままDHCPで良い
- 固定すると別の環境でログインできなくなる等、難しくなる
- IPアドレスはルータのウェブページ、nmap等で確認可能
-
$ nmap -sP 192.168.2.0/24
-
- DHCPでもルータ等で固定できる
固定IPの設定
- /etc/network/interfacesに設定を書く
- 下図: デフォルトの設定例(バージョンによって異なる)
pi\@raspberrypi ~ $ cat /etc/network/interfaces auto lo iface lo inet loopback iface eth0 inet dhcp
- 固定にする例
- DHCPでもらったアドレスと同じネットワーク部を持つ別のアドレスに変えてみましょう
-
pi\@raspberrypi ~ $ cat /etc/network/interfaces auto lo iface lo inet loopback #iface eth0 inet dhcp auto eth0 iface eth0 inet static address 192.168.1.200 netmask 255.255.255.0 gateway 192.168.1.1
- dhcpの設定は#でコメントアウトを
- 設定後はrebootするのが素直
- したくない時は
-
$ sudo service networking restart
ポート
- ポート= port、港
- 計算機が役所のようなものだとすればポートは窓口
- 窓口は65536*2個ある
- TCP(Transmission Control Protocol)0 番~65,535 番
- UDP(User Datagram Protocol)0 番~65,535 番
- 窓口は65536*2個ある
- インターネット上のサービスを利用するときは
- IPアドレスとプロトコル、ポート番号を指定している
- IP アドレス: 住所
- ポート: 窓口
- 窓口の後ろにサービスを提供する人(サーバ)がいる
/etc/services
- よく使われるポート番号を表にしたもの
- 大抵のLinuxには入っている
- 端末からless等で読んでみましょう
- 必ずしもサーバがこのポート番号を使う必要はないが、標準的なものにしておくと使うときに調べなくていい
- HTTP: TCP80, HTTPS: TCP443, SSH: TCP22, ...
-
$ netstat -antuで現在使っているポートの番号を調べ、 どのサービスが通常使うポートか/etc/servicesで調査してみましょう
名前解決
- IPアドレスとホスト名(www.yahoo.co.jp等)はどう変換される?
- DNSサーバ
- IPアドレスとホストを管理
- ブラウザやpingでホスト名が指定されるとDNSサーバに問い合わせが行く
- DNSサーバのIPアドレスは通常/etc/resolv.confに書く(DHCPを使っていると勝手に書かれている)
- 最近はresolv.confを使わない方向に
- DNSサーバのIPアドレスは通常/etc/resolv.confに書く(DHCPを使っていると勝手に書かれている)
- /etc/hosts
- 静的にIPアドレスとホストを対応付けたい時に編集
WiFiの設定
- WiFi標準搭載のRaspberry Pi3の場合を例に
- 準備
- iwconfigでwlan0があることを確認
$ sudo apt install wireless-tools $ sudo apt install wpasupplicant $ iwconfig wlan0 IEEE 802.11bgn ESSID:off/any Mode:Managed Access Point: Not-Associated Retry short limit:7 RTS thr:off Fragment thr:off Power Management:on
アクセスポイントに接続
- 接続したいアクセスポイントのSSID(ESSID)とパスフレーズをwpa_passphrase(1)に指定して設定ファイル(wpa_supplicant.conf)を作る
$ sudo -s # wpa_passphrase SSID パスフレーズ > /etc/wpa_supplicant/wpa_supplicant.conf
- /etc/network/interfacesに必要事項を書く
- ホットプラグ
- wpa_supplicant.confの場所
- IPアドレス周り
- パワーマネージメントを切っておくと安定
$ sudo cat /etc/network/interfaces (略 lo, eth0の設定) auto wlan0 allow-hotplug wlan0 iface wlan0 inet dhcp wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf wireless-power off
- 再起動(あるいはsudo ifup wlan0, sudo service networking restart)