ロボットシステム学2016第11回

Mon Dec 19 11:03:31 JST 2016 (modified: Fri Nov 29 17:21:21 JST 2019)
views: 1620, 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ビットがネットワーク部
  • コマンドで確かめてみましょう
    • $ 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アドレスが内側のものなのか
    • ルータがネットワークの境界にいて交通整理
      • 「ルーティング」
      • 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 番
  • インターネット上のサービスを利用するときは
    • 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を使わない方向に
  • /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)