フロー制御の問題点について

投稿者: user32953 ネットワークの通信制御についてです。 フロー制御は受信側の性能を考慮してパケットを送信しますが、途中の中継機器の性能は考慮してません。これがフロー制御の問題点でもあります。 ではこれに対する対策はなんなのでしょうか? フロー制御の欠点を補う技術がネットで調べても見つかりません。 現状これらの対策などはないのでしょうか? 解決 シリアル通信っつても山ほどありますし何を議題にしているか全くわかりませんが PC <–> 対象装置 の場合と PC <–> 中継装置 <–> 対象装置の場合で フロー制御なるものが何か違うのか? という質問であるとします。 例としてその昔の電話回線を使った Modem + ダイアルアップ接続を考えるとき – 中継装置は Modem – 対象装置はプロバイダのアクセスポイント なわけですが、当然 PC-Modem 間にはフロー制御がありますし Modem-アクセスポイント間にもフロー制御があります(この両者が使う手続きは異なります)。フツーに「フロー制御」という文言を使うときは両端の装置だけでなく途中の装置も対応しておかねばなりません。 同様 Ethernet HUB においてもフロー制御はあります (IEEE802.3X) 2019年時点で実用されている一般的な通信ハードウエアには「ある」と考えてよいです。 で、もし本当にフロー制御非対応な装置が通信経路の中に挟まったらどうなるか、ですが・・・そのときは途中でデータがあふれるでしょう (OSI でいうデータリンク層で失敗する) 。 TCP 通信が途中で失敗したらトランスポート層が再試行するでしょう。アプリケーション層から見ると「通信が遅くなった」以外には普段と変化ないはずです。(実用できないほどあふれ続けているなら最終的には「失敗」になります) UDP 通信が失敗するのはネットワーク層・トランスポート層としては仕様通りです。再試行する必要があればアプリケーション層で再試行するでしょうし (DNS の解決など) 必要なければスキップして次に進むだけです( UDP による動画再生等:一瞬画像が乱れても気にしない) TCP はエラーが多発したらゆっくりしていってね!になる仕様なので、最終的にはフロー制御がなくても何とかなる程度の速度まで通信を遅くしていくだけだと思われます。 回答者: Anonymous

VirtualBox でホストからゲストにネットワークがつながらない

投稿者: Anonymous ホストOS Windows 7 上の VirtualBox で ubuntu を入れて使用しています ubuntu 内で 3000 ポートに rails を起動してホストから接続テストを行いたいのですが ホスト上のブラウザで http://10.0.2.15:3000 にアクセスしても一切反応がなく しばらくして「接続がタイムアウトしました」が表示されます Rails がうまくいってないのかと思って nc -l 3000でもやってみましたがかわりません ubuntu のファイアウォールを確認したところ sudo ufw status 状態: 非アクティブ でした ゲスト内でネットにはつながってるので NAT 自体は機能しているようです そこで2点確認なのですが VirtualBox 窓の右下のネットワークのところに アダプター1(NAT) IP: 10.0.2.15 ケーブル接続 とでてるのでこれがホストから見たゲストのIPでいいのでしょうか? Windows 側のファイアウォールのことがよく分かってないのですが ホスト側でも何か設定が必要だったりするのでしょうか? 解決 https://qiita.com/daijinload/items/85f6e84926f41812ed70 こちらを参考にしてポートフォワーディングで IP 空欄にして 3000 番同士を入れると動きました 127.0.0.1…(Continue Reading)

仮想マシン上のWebサーバにホストからアクセスできない

投稿者: Anonymous Rustの勉強のため,簡単なWebサーバのプログラムを書いています. VirtualBox上のArch Linuxをサーバとして用い,http://nickel.rs/のHello Worldをcargo runで実行しました.ところが,http://127.0.0.1:portにゲストOS側からアクセスすることはできても,http://guest_ip:portにホストOS側のブラウザからアクセスすることができません.http://ironframework.io/も試してみましたが,同じくアクセスはできませんでした. ここで,ネットワークの問題を疑い,ゲスト側でpython -m http.serverを実行したところ,今度はホスト側からアクセスすることができました.ネットワークが問題ではないのでしょうか? VirtualBoxはブリッジアダプターでネットワークと繋がっており,ホストからpingを打ったり,sshで接続することはできます.rustcのバージョンはrustc 1.0.0 (built 2015-06-01)で,cargoはAURのcargo-binを使用していてバージョンはcargo 0.3.0-nightly (47306a4 2015-06-17) (built 2015-06-18)です. 一体どうすればRustで書いたサーバにアクセスできるでしょうか. 解決 127.0.0.1にbindしても、ローカルホストからしか接続できないことがあります。 ソースコード中でアドレスを記載している部分、 server.listen(“127.0.0.1:6767”); これを、eth0などのネットワークインターフェイスが持つIPアドレス、または0.0.0.0を指定してみてはどうでしょうか。 server.listen(“0.0.0.0:6767”); 回答者: Anonymous

Ubuntu に IPv6 接続したい

投稿者: Anonymous さくらインターネットで運用しているサーバーが IPv6 を受け入れていないことが判明して 受け入れるように設定中なのですがうまく行きません https://manual.sakura.ad.jp/cloud/network/switch/ipv6.html#id3 こちらの設定を行って IPv6 アドレス自体は有効になりました その後 ip6tables の設定が ip6tables -L Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination と何の設定もされていなかったので *filter :INPUT DROP [0:0] :FORWARD DROP [0:0] :OUTPUT ACCEPT [0:0] -A INPUT…(Continue Reading)

違うMTU設定での通信について質問

投稿者: Anonymous PCとPCをEthernetでつないで通信を行うと、通常はMTU1500どうしなので通信可能かと思います。 片方のMTU設定を1000に変えた場合、MTU1500のPCからデータを送信すると、MTU1000にしたPCへはデータが届かないかと思うのですが、どのような挙動になるのかご教授頂けないでしょうか? 解決 レイヤ2(Ethernet)の話 質問の状況であれば、送信側が受信側のMTUを超えるフレームを送信すると、ネットワーク全体としては違反しているわけではないので、受信側までフレームは到達していますが、たいていの場合エラーとして破棄されます。 質問は故意にMTUを小さくした場合ですが、ジャンボフレームに対応したネットワークにジャンボフレーム非対応の機器をつなぐと同じことが起き得ます。 類似の状況として、ジャンボフレーム非対応のスイッチで構成されたネットワークにジャンボフレームを送信する場合が考えられます。この場合は、スイッチのレベルで破棄されるので、受信側に届くことはありません。 いずれにしても、EthernetのレベルでMTUが異なるという状態は通常あり得ない状態なので、何かしらいろいろ不都合が出るでしょう レイヤ3(IP)の話 MTUはL2層によって異なります。IPは様々なL2層を経由して通信することが前提のため、このことは考慮されています(別の見方をすると、そういう前提なのでエンド-エンドでMTUを調整する機能が無い)。異なるL2層を接続するのはルータの役目ですが、ルータはMTUが大きいネットワークから小さいネットワークへ中継する際、IPパケットをMTUサイズに応じて分割して送信します。これが(IP)フラグメントです。フラグメントされたパケットは受信者が再結合します。 これは通常想定されている動作で、これがあるので容易に様々なメディアでネットワークを接続することができます。なので「避けるべきもの」では本来ないのですが、「微妙にMTUが小さい経路が存在する」という状況では、「元のパケットより微妙に小さいパケット+あまりのサイズのパケット」に分割されるという状況が頻繁に発生します。これは非常に非効率です(*)。 これを解決するために、Path MTU Discoveryという仕組みが考えられました。簡単に言うと、ルータでフラグメントが発生する場合、そのことを送信側に通知することで、適当なMTUに調整して送信してもらう仕組みです。中継するルータが通知するので、L2ネットワーク内では機能しません。 (*)フラグメントが発生すると遅くなるのは、 単純にパケット数が増える パケット数が増えるとヘッダなどによるオーバーヘッドも増える 短いパケットは特にオーバーヘッドが大きいため転送効率が悪い という理由からです。ルータがフラグメントを行う処理にかかる時間の問題ではないので、これはどんなに高性能なルータでも発生します。 レイヤ4(TCP/UDP)の話 TCPには、「自分が受信できる最大サイズ(MSS)」を接続時に通知する仕組みがあります。これは、本来「エンド-エンドでMTUを調停する仕組み」ではありません。 一方的な通知で双方向で調整するわけではない 途中経路のMTUを考慮するわけではない MSSで通知するのは「自分が受信できる最大サイズ」なので、途中経路のMTUが小さいがそれを知り得ない場合にはフラグメントが発生する状況になります。最近のルータにはMTUが小さくなる部分でMSSを書き換えてしまうことでフラグメントが発生しないようにする機能があります。 質問の状況で考えてみます。繰り返しになりますが、本来「エンド-エンドでMTUを調停する仕組み」ではないので、質問のように環境が正しくない状態では正しく機能することを期待してはいけません。また、MSSはTCPの話なので、例えばOSでMSSの制限値を設定したとしても、TCP以外のプロトコルでは機能しません。 回答者: Anonymous

「CentOSサーバ」よりファイルをダウンロードする際、出来るだけ転送時間を短縮したい

投稿者: Anonymous 現状 ・FileZilla使用 ・FTPダウンロード ・ファイル数が多い(5万件以上)と、処理完了まで時間がかかる 知りたいこと ・高速ダウンロードする方法 ・FTPではなくSSHで接続すると、ダウンロード速度は早くなる? ・あるいは、複数ディレクトリを圧縮してダウンロードすると速度は速くなる? ・コマンドは? ・下記で、対象ディレクトリ内の全ファイルを再帰的に圧縮できるのでしょうか? $ zip archive -r 対象ディレクトリ 解決 速度とか高速という単語に引っかかるのですが、時間短縮したいという意図だと思いましたので 分かる範囲で回答します。 SSH (SCP) は暗号化するので遅くなります。 FTPは十分に速い部類の通信プロトコルですが、GUIの FTPクライアントが 5万件超のファイル一覧を取得すると その結果を受信するのに時間がかかってしまうことも考えられます。 できれば コマンドの ftp を覚えて 最短のオペレーションで ファイルを get するのがいいと思います。 もしも、ほんの少しでも早くしたいなら nc を使います。 ・あるいは、複数ディレクトリを圧縮してダウンロードすると速度は速くなる? オーバーヘッドとデータ量が減るので時間短縮が期待できます。 ただ転送速度は変わらないです。 ・コマンドは? Unix系でよく使うのは tar + gzip だと思います。 次のコマンドでアーカイブと圧縮を行い、 出来上がった /var/tmp/hoge.tgz をFTPで転送してください。 送信元サーバー $ cd /path/to/コピー元/…(Continue Reading)

Linux におけるデフォルトルートについて

投稿者: Anonymous Container-Linux を KVM 上で運用しようと考えておりますが, 構築時のネットワーク疎通でつまづいています. ゲストである Container-Linux から KVM ホストへの ping 疎通はありますが, KVM ホストから ゲストへの ping 疎通が Destination Host unreachable となってしまいます. また, ゲストから外部セグメントへの疎通も行えませんでした. ゲストのルーティングテーブルを確認(ip route show)したところ, 下記の出力を得ました. default via 192.168.101.126 dev lo proto static default via 192.168.101.126 dev ens2 proto static 192.168.101.0/25 dev ens2 proto kernel scope link src 192.168.101.2 デフォルトルートの出力デバイスに lo が使われていると推測しております.…(Continue Reading)

Python-Zeroconfで受け取った情報からIPアドレスのみ抽出したい

投稿者: Anonymous iOSのIPアドレス情報を、PC上のPython-Zeroconfで受け取りたいと考えています。 Swiftでの送信に関しては、以下のコードを使用しています。 https://github.com/jameszaghini/bonjour-demo-osx-to-ios 以下のように、Python-Zeroconfのサンプルコードを走らせると、Swiftと連携が出来ているようで、情報がprintされます。 from zeroconf import ServiceBrowser, Zeroconf class MyListener: def remove_service(self, zeroconf, type, name): print("Service %s removed" % (name,)) def add_service(self, zeroconf, type, name): info = zeroconf.get_service_info(type, name) print("Service %s added, service info: %s" % (name, info)) zeroconf = Zeroconf() listener = MyListener() for i in range(10): browser = ServiceBrowser(zeroconf, "_probonjore._tcp.local.",…(Continue Reading)

BlackRaccoonを使用してSwiftでFTPアップロードする方法

投稿者: Anonymous 以下の2つの記事を参考に、SwiftでBlackRaccoonというライブラリを使用するテストをしてみました。 SwiftでFTPを使用する準備を行う SwiftのFTPでファイルを作成する BlackRacoonはObjective-Cで書かれたライブラリです。 BlackRacoonのファイルをDLして、プロジェクトに追加しています。 Swiftで使用するために、Bridging-Header.hでBlackRaccoonのObjective-Cファイルをimportしています。 以下はViewControllerの内容です。 ボタンを押すと、FTPアップロードをするような仕様になっています。 しかし、実際にビルドすると、ビルド前にはエラーが出ていないにも関わらずビルド後にエラーになります。 class ViewController: UIViewController { @IBOutlet weak var FTPuploadButton: UIButton! override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. self.view.addSubview(FTPuploadButton) } //ボタンを押したとき @IBAction func FTPuploadButtonPush(_ sender: Any) { self.ftpupload() } //ftpアップロード func ftpupload() { let testList = [“test1″,”test2”] do {…(Continue Reading)

Vagrantでホストからゲストに通信が出来ない。

投稿者: Anonymous 使用しているソフトバージョン Vagrant 2.2.4 VirtualBox バージョン 5.2.28 r130011 (Qt5.6.3) VBoxControl バージョン 5.2.28r130011 ホストos mac High Sierra 10.13.5 ゲストos Ubuntu14.04 vagrantfile # -*- mode: ruby -*- # vi: set ft=ruby : # All Vagrant configuration is done below. The “2” in Vagrant.configure # configures the configuration version (we support older styles for # backwards compatibility). Please…(Continue Reading)

iSCSIネームについて

投稿者: Anonymous 現在仮想化基礎検定という資格を取得するため学習しています。 ここで質問するのが場違いでしたらすみません。 IP-SANにおいては、iSCSIプロトコルを用いてファブリックデバイス間の 通信を行う場合、機器を一意特定するためにiSCSIネームをデバイスに 付与します。 iSCSIプロトコルでは下位レイヤーでTCP/IPが使われていますが、 TCP/IPまでで機器を一意に特定することはできないのでしょうか? ご存知の方がいらっしゃいましたらご回答お願いします。 解決 まず、回答です。 >TCP/IPまでで機器を一意に特定すること iSCSIプロトコルを使いノード識別や管理を行っているので 出来ません。 IPアドレスの変更があったら設定も変更します。 (SCSIコマンドをIPパケットに乗せて運んでいるだけなので、また、IPを使用していますが、ファイルサーバとは違い 出来るなら閉塞した環境で使う物です。) ・簡単に何故必要なのか ノード識別や管理のためにiSCSIネームを持ち,iSCSIプロトコルを用いて サーバやPC(イニシエータ)が HDDなどのデバイス(ターゲット)との間でTCPコネクションを張り、認証とネゴシエーションすることによりデータ転送を行います 認証は、不正アクセス、なりすましなどを防ぐためです。 補足、以下の様にiSCSIネームの命名は決められています。 iSCSIネームは、iSCSIノードのロケーションに依存しないこと、全世界で唯一であること、iSCSIノードのライフにおいて固定であることなどが必要であり、 iSCSIでは、IPドメイン名を使用したiSCSI Qualified NameとIEEEの64ビットExtended Unique Identifierを使用した「IEEE EUI-64 Format」でiSCSIネームを付ける。(管理上必要ならエイリアス名を付けます。) 補足2、規格名など SCSI(スカジー <−ふざけてはいません、SCSIはスカジーと読みます)バス(ケーブル)接続でHDD、テープデバイスなどを繋ぐ規格があります。(転送速度は、〜1280Mbps) SAN (サン) シリアルSCSIプロトコルを用いてネットワーク化した規格です。(転送速度は光ファイバを使って800Mbpsぐらい、導入コストが高いので普通の人は手が出せません。) iSCSI(アイスカジー)は、SCSIコマンドをIPパケットに乗せてデータ転送を行う規格です。(ギガビットイーサネットで、実用的に使えるようになった。でも古い規格です。) 回答者: Anonymous

DDoSを予告されたときに、すぐにできる緩和策はありますか?

投稿者: Anonymous 自らの運営するサービスに対するDDoS攻撃を予告された場合、突然攻撃されることと比較して良い点はありますか? 例えば、「1時間後に攻撃する」と予告された場合、1時間でできるなんらかの緩和策はあるのでしょうか。 また、30日後の攻撃を予告された場合はどうでしょうか。 解決 サービスの規模にもよりますが、1時間あれば、 CloudflareやMicrosoft Azureが提供するDDoS Protectionを導入できるでしょう。 AkamaiやCloudflareにはDDoSの攻撃中に使える緊急サポートがあります。予告されただけでは対象になるか不明ですが、連絡を取ってみるのはアリです。 AWSなどスケールが容易な環境であれば、サーバ側のリソースを一時的に増強することも可能です。そうでない環境でも、30日あればいくらかの増強はできるのではないかな、と思います。 とはいえ、実際のDDoSの予告には脅しだけのものも多いですし、攻撃の規模は始まってからでないとわからないところがあります。 回答者: Anonymous

Kademlia DHTのk-bucketについて

投稿者: Anonymous Kademliaの論文を読んでいて、k-bucketの説明に関してよく分からない箇所がありました。 2.2 の Node state では、 For each 0≤i<160, every node keeps a list of < IP address, UDP port, NodeID > triples for nodes of distance between 2i and 2i+1 from itself. We call these lists k-buckets. 各ノードに160個のk-bucketがあり、ノードとのIDの距離によってルーティング情報が各k-bucketに割り当てられていると読めます。 しかし、後の2.4 Routing table のセクションでは、 Initially, a node u’s routing tree has a single node…(Continue Reading)

TCPコネクションを1本保持するのと10本保持する場合のコストの違い

投稿者: Anonymous 同じ内容を一本の接続に全て書き込むのと、10本に対して書き込むのは、どのくらいCPUサイクルやリソース消費が違いますか? 速度や通信効率は置いておいて、マシン負荷のみを考えた場合に一本の方がコストが少ないのでしょうか? 解決 マシン負荷を考える場合、CPUよりも低速なデバイスとのやり取りにコストがかかります。受信パケットがあればCPUに割り込みが発生しますから、TCPコネクション数に応じて負荷が上がると考えていいでしょう。 送信に関してもソケットの通信の効率化をネットワークカードレベルで考えるでコメントしましたが今はネットワークカードにオフロード処理させるためコネクション数が少ない方が処理をまとめることができます。 回答者: Anonymous

1つのネットワーク内に2つのルータ

投稿者: Anonymous ご教授お願いします。 同ネットワーク内にルーターが2つあるとします。 それぞれIPは RouterA:192.168.1.253/255.255.255.0 RouterB:192.168.1.254/255.255.255.0 とします。 同ネットワークに機器A、B、Cがあり、それぞれのデフォルトGWが A:192.168.1.253 B:192.168.1.253 C:192.168.1.254 となっています。 同じネットワーク内にデフォルトGWが違う設定の機器があることは問題ないのでしょうか。 RouterA, Bそれぞれ行き着く先は同じネットワークなんですが… 問題無いような気がするのですが、実機検証ができない状態ですので、この場をお借りして質問 しました。 ご回答よろしくお願いします。 解決 —-+———————+——- | | : : routerA routerB |192.168.1.253 |192.168.1.254 —-+–+——-+——+—+——– | | | 機器A 機器B 機器C (GWはrouterA) (GWはrouterB) ってことですね。 問題ありません。 ただし、機器A,Bが必ずRouterAを経由する、機器Cが必ずRouterBを経由することは保証されていません。 たとえば別ネットワークの機器Dから機器C宛ての通信がRouterA経由で行われた場合、以後機器Cから機器Dへの通信はRouterAで行われるかもしれません。 別ネットワークへの経路になにかあるのかもしれませんし、routerAかBかその両方に、それぞれしか繋がらないネットワークが生えているとかいうこともあるので、一概に意味が無いと決めつけられる物でもありません。 回答者: Anonymous

URIで使われるfile://について検索するにはどういうワードを使えば良いですか?

投稿者: Anonymous URI で使われる file:// 関係の情報について詳しく調べたいのですが、Google で「file://」を検索ワードにしても単なる「ファイル」の情報ばかり出てきてしまいます。 例:「file:// 実行可能ファイル」で調べても、単に実行可能ファイルの情報が出てきてしまう。 どのような検索ワードで調べれば的確な情報に辿り着きやすいですか? なお、file:// という書き方の意味を知りたいのではありません。これが https:// などの仲間であることは知っています。 解決 file:// には file URI scheme という名前があるので、「file URI scheme ほにゃらら」とか「fileスキーム ほにゃらら」とかで検索するとマシになりました。 「file URI ほにゃらら」「file URL ほにゃらら」でもある程度出てくる場合があるのですが、「ほにゃらら」の内容によっては file スキームと関係ない話が出てきてしまいます(例:「file URI 画像」だと画像ファイルのURIについてのページがヒットする)。 回答者: Anonymous

AWS の VPC へ VPN 接続したい

投稿者: Anonymous 手元の PC から、 AWS の VPC へ VPN 接続を行いたいです。具体的には: プライベート IP をブラウザで指定しながら、 VPC 内インスタンスのウェブサービスに接続したい。(インターネットに公開されないウェブサービス. もろもろ管理画面などを想定) ssh + port forwarding で、特定のポートだけこじ開ける方法は分かりますが、それだと接続したサービスごとにポート・ホスト情報をひとつずつポートを開けていく必要があります。VPN 接続ができれば、そこの設定だけで、 VPC 内のインスタンスに IP 指定するだけで接続できるようになり、便利だと考えたので質問しています。 質問 上記やりたいことを実現するのに利用できるツール・サービスなどはありますか? 公式ページ: VPN 接続 – AWS は見てみたのですが、何やらいろいろ書いてあるけれども結局上記やりたいことをどうやったらできるのかがパッと見わからないので質問しています。 質問者の知識レベル VPN という概念は知識として知っているが (LAN を拡張するような技術)、実際に VPN クライアントなどは触ったことがない。 補足 手元の PC だけから接続できればよく、手元の LAN を VPC と VPN 接続したいわけではありません。 ウェブブラウザが VPC 内部へ…(Continue Reading)

TCP/IP通信によるブロードキャストの挙動

投稿者: Anonymous ネットワークの基礎を現在学習しており、不明点がありました為、質問させて頂きます。 一対複数時の通信の時の挙動なのですが、 どの層の時点で、PCの数の把握、必用なデータの数のコピー(一対一の通信ならデータは一つで十分なはずだが、複数との通信では複数いるのだろうと現在理解しています。)を行っているのかが理解できていません。 例として、(自分の考えている)ローカルブロードキャストの時の動きとしましては、 送信側 ネットワーク層でローカルブロードキャストのブロードアドレスをIPホストアドレスに指定 ↓ ネットワーク層にてARPをかける(ローカル領域の接続PCの数の確認) ↓ 応答(ARP?)が返ってくる。 ↓ ネットワーク層まで応答(ARP?)が上がってくる ↓ データリンク層、物理層を通って、ローカル領域の接続PCの数の分のデータを送信 が一連の流れになると思うのですが、 この時、PCの数分のデータのコピー(用意)はどこで行っているのでしょうか? また、応答(ARP?)を送信側が受け取った後、「ネットワーク層までしか、連絡は来ない」という認識は正しいでしょうか? どなたか回答をお持ちの方がいらしたら、是非ともご教示頂きたいです。 解決 @suzukisさん@bluevioletさんの補足で、質問記述に対する内容を書くと以下になるでしょう。 どの層の時点で、PCの数の把握、必用なデータの数のコピーを行っているのかが理解できていません。 答:これらは送信側ホストの中では行っていません。 例として、(自分の考えている)ローカルブロードキャストの時の動きとしましては、 送信側 ネットワーク層でローカルブロードキャストのブロードアドレスをIPホストアドレスに指定 ↓ ネットワーク層にてARPをかける(ローカル領域の接続PCの数の確認) ↓ 応答(ARP?)が返ってくる。 ↓ ネットワーク層まで応答(ARP?)が上がってくる ↓ データリンク層、物理層を通って、ローカル領域の接続PCの数の分のデータを送信 が一連の流れになると思うのですが、 答:ARPは行われません。   また送信側ホスト内での接続PC数把握やデータのコピーもありません。 送信側 ネットワーク層でローカルブロードキャストのブロードアドレスを宛先IPホストアドレスに指定 ↓ 宛先MACアドレスは全てのbitが1のブロードキャストMACアドレスが設定されます。 ↓ データリンク層、物理層を通って、ネットワークにデータを送信 ブロードキャストだからといって特別なコピーが行われるわけではなく、通常の通信と同様に ハブ等のネットワーク機器が中継してネットワーク内の各ホストに送信します。 質問者さんの考える、「必要なデータの数のコピー」はそれら機器で行われているとも言えます。 ただし、「必要」かどうかとか「台数」は低機能なハブ等では考慮されません。 ポートの先に何かの装置が接続されて通信できているかどうかくらいですか。 インテリジェントハブとか高機能な機器は、設定情報などにより中継する/しないを制御します。 そしてブロードキャストを受信した側で、自分が処理すべき通信か(対応するサービスやプロセスが動作しているか)どうかを判断することになります。 候補がいっぱいあるのですが、この辺の記事あたりが参考になるでしょう。 ブロードキャストアドレス・マルチキャストアドレス ◆ブロードキャストアドレスの用途 回答者:…(Continue Reading)

ubuntu クライアントからWindowsファイルサーバーにつなぎたい

投稿者: Anonymous ネットワーク初学者です。よろしくお願いします。 ubuntu 15.04 をデスクトップOSとして使用しています。 これをクライアントとし、Windowsファイルサーバー (Windows server2003)にアクセスして、共有フォルダを 参照できるようにするにはどうすればいいのでしょうか。 よろしくおねがいします。 解決 ファイルマネージャ(という名称で正しいのかよくわかりませんが)を起動するとウィンドウ左側のメニューの一番下に「Connect to Server」という項目があります。これを選び、入力欄に smb://198.51.100.1 などと入力すれば共有フォルダに接続できます。 回答者: Anonymous

LANカード2枚差し時に、同一IPアドレスのサーバーと通信する方法に関して

投稿者: Anonymous こんにちわ! windows環境で、.NetのHttpClient 、Socket で、 サーバーと通信する際に、 送信元の自分のIPアドレスを指定したいんですが、 どうしたらよいでしょうか? どういう状況かといいますと、 PCには、2枚 LANカードが刺さっており、 それぞれ別のネットワーク1、2につながっています。 サーバーA、サーバーB のIPアドレスはそれぞれ、 同一で、固定で変更することができません。 ■ネットワーク図 ○サーバーA(192.168.1.2) |※ネットワーク1 LANカードA(192.168.1.5) ○PC LANカードB(192.168.1.6) |※ネットワーク2 ○サーバーB(192.168.1.2) このとき、ネットワーク1,2のサーバーA,Bとそれぞれ通信をおこないたい考えです。 単純な相手先のIPアドレス指定では、 どちらか一方のサーバーとした通信ができません。 方法として、送信するLANカードを指定することができればよいみたいで、 送信したいネットワークにつながっている自分のLANカードのIPアドレスを指定すると、 そのLANカードから送信することは PINGで、送信元IPアドレス指定でできることがわかりました。 ping -s 192.168.1.5 192.168.1.2 だと、サーバーA 、 ping -s 192.168.1.6 192.168.1.2 では、サーバーBに送信することができていることがわかっています。 すいませんが、よろしくおねがいします。 解決 HttpClientクラスでは制御方法が提供されていません。SocketクラスであればBind()メソッドで制御できます。 回答者: Anonymous

PythonでTCP通信のエラー: [WinError 10061] 対象のコンピューターによって拒否されたため、接続できませんでした。

投稿者: Anonymous 以下のPythonコードでTCP/IP通信を行おうとしているのですが、特定のソフトウェアとの通信がうまくいきません。 noLoopBack.py import socket with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: s.connect((‘192.168.1.5′, 49985)) s.sendall(b’testSend’) エラー内容は以下のようなものです。 ConnectionRefusedError: [WinError 10061] 対象のコンピューターによって拒否されたため、接続できませんでした。 しかし、殆ど同じコードでループバックアドレス(127.0.0.1)に対して送信すると特定のソフトウェアとも通信がうまくいきます。 loopBack.py import socket with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: s.connect((‘127.0.0.1′, 49985)) s.sendall(b’testSend’) ファイアウォールの設定はネットの記事等を参考にして一時的に無効にしてみたのですが、変化がありませんでした。 また、Python単体で作成したTCP/IPサーバーのコードでは192.168.1.5と127.0.0.1共に受信が出来ております。 私の使用している特定のソフトウェアのみで受信ができないという問題が起きるようです。 受信に使用したTCP/IPサーバーのコード tcpServer.py import socket with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: s.bind((”, 49985)) s.listen(1) while True: conn, addr = s.accept() with conn: while…(Continue Reading)

L2スイッチを2台から3台にする場合の接続の仕方

投稿者: Anonymous ネットワーク初心者のため、御教示下さい。 24ポートL2スイッチ2台を使用し、19台のサーバーにLAN接続をしています。 (冗長化の為、1台のサーバーからそれぞれのスイッチに接続) そのため、24ポートのうち19ポートはサーバー用に、2ポートはリンクアグリケーション用に使用済みの状況です。 しかし、新たにサーバーが10台増設されることになりました。 その場合、ポートが足りなくなってしまうので、1台スイッチを増設することになるかと思います。 3台構成になった場合、どのような接続の仕方になるのでしょうか。 (1)リンクアグリケーションは、以下のような接続になるのでしょうか?      (スイッチ3)=スイッチ1=スイッチ2=スイッチ3=(スイッチ1)    わかりづらくてすみません。 スイッチ1と2をLAN2本で、2と3、3と1を同様に接続して輪になるようなイメージです。 リンクアグリゲーションもあまり詳しくは知らないため、3台で構成する場合はこのような接続になるのでしょうか? それともスイッチ1と3は接続不要で、1と2、2と3をつなげばOKなのでしょうか? そもそも3台では構成できないものなのでしょうか? (2)配下のサーバーは現在は冗長化のため2個のスイッチに接続していますが、今後は3個中2個のスイッチに接続するイメージになるのでしょうか? 情報が不足していましたら、ご指摘ください。 どうぞアドバイスをお願い致します。 ※要件があり、物理サーバーの仮想化はできません。 ※使用するスイッチはメーカー指定があり、そのメーカーでは24ポート以上のものは扱っておりませんでした。 解決  そのため、24ポートのうち19ポートはサーバー用に、2ポートはリンクアグリケーション用に使用済みの状況です。 本当にリンクアグリゲーションですか?(専用ポートを使用しない)スタック接続とリンクアグリゲーションによる接続は見た目では区別できません。サーバとの接続が複数リンクになっているようなのでこの違いは重要です。 リンクアグリゲーションによる接続なのであれば、論理的には単なるカスケード接続なので、追加するスイッチは同様にスイッチ1または2にカスケード接続する形に「たいてい」なります。「たいてい」なのは、後述するように設計を見直す必要があるかもしれないからです。      (スイッチ3)=スイッチ1=スイッチ2=スイッチ3=(スイッチ1) 単純にこのようにつなぐとループします。STPで冗長構成にすることもできますが最近はあまり使わないです。 スタック接続の場合、      (スイッチ3 – )スイッチ1 – スイッチ2 – スイッチ3( -スイッチ1) このように接続するのが一般的です(リンクが1本になっているのに注意。リンクを2本にできるかは装置仕様によります)。 (2)配下のサーバーは現在は冗長化のため2個のスイッチに接続していますが、今後は3個中2個のスイッチに接続するイメージになるのでしょうか? サーバから3本出してそれぞれのスイッチに接続する構成とすることもないことはないです。OS、NICの仕様と用途次第です。 スイッチ間、サーバともどのように接続するかは、データの流れや故障時の動作を勘案して決めてください。サーバしかつながっていないということはないでしょうから、その部分の接続も再検討をしたほうがよいです。サーバ側の冗長構成とのからみもあります。 LAGにせよスタックにせよ装置の設定が必要になりますので、そういった部分も含めて設定してもらう業者と相談してください。必要であれば現状確認もしてもらってください。 回答者: Anonymous

MTU を変更するとネットワークの速度が大きく変わるのはなぜ?

投稿者: Anonymous aws 上の ubuntu で、sudo apt-get update の実行が異様に重たいインスタンスがありました。 最終的に、これは eth0 の MTU を 9001 -> 1300 にすることで改善したのですが、その際、 sudo apt-get update の速度が、おおざっぱに体感で20倍ぐらい (それ以上かも?) になりました。 質問: MTU とは何でしょうか。なぜこれを変更するとここまでネットワーク速度に影響があるのでしょうか。 解決 MTUとは、通信相手との間で無変換で転送できるデータの最大値のことです。(無変換、の意味は、先に回答のあるように分割されない、の意味です) どの程度の値であればよいか、については通信相手との間の途中ネットワークに依存するため、単純に求めるのは困難です。ただし、通常次の2つの方法で動的に最適値を求めてくれるはずです。 経路MTU検索 (RFC1191) TCPのMSSオプション (RFC879) ですので、MTUが9001のままでも大抵最適な通信をしてくれると思いますが、 ファイアウォール等があると(特に前者は)期待通りの動作をしなくなるため、通信経路の途中でパケット分割が生じます(これが速度低下を引き起こします)。こういう場合はすでに試されているように主導でMTUを小さくする必要があります。 なお、必要以上にMTUを小さくすると、同じデータ量を転送するのに必要なパケット数が増加するため、IPヘッダ、TCPヘッダ分の通信オーバーヘッドが増大し通信速度が低下することもあります。注意してください。 回答者: Anonymous

【ネットワーク】IPマスカレードについて

投稿者: Anonymous IPマスカレードについて知りたいのですが、恥ずかしながらネットワークの知識に乏しいもので、教えていただけませんでしょうか。 NATについてはある程度理解しています。 要するに、ルータでローカルアドレスをグローバルアドレスに変換し、マッピングデータとしてNATテーブルに保存し、パケット送信。返信をルータでローカルアドレスに変換してLANに返すわけですよね?間違っていたら訂正してください。 そしてNAPTは、たとえば PC2(10.1.1.2)とPC3(10.1.1.3)があり、 PC2から1111番ポートで、PC3から1112番ポートでパケット送信した際、 ルータでの変換は 10.1.1.2:1111 を 210.124.-.-:9990, 10.1.1.3:1112 を 210.124.-.-:9991 に変換しNATテーブルに登録、帰りもポートを確認して戻っていく、ということでいいんでしょうか? でも、この解釈で疑問が湧きました。 ローカルアドレスも結局NATテーブルに登録されているのであれば、ポートを見る必要はないんではないのか?というのと、 別々のLAN機器(この場合PC2とPC3)から同時に1111番ポートでの通信を行うと、変換されるグローバルIPが同じになるからどちらかしかできない。ということはたとえばPS3とPS4が同一ポートでの通信を行うので、どちらかがポート番号を変更すれば通信できるようになる。ということでいいんでしょうか? ちょっとネットワーク関係の基礎知識がないのでトンチンカンなことを言っているかもしれないです。 恐れ多いですがよろしくお願いします。 解決 別々のLAN機器から同時に1111番ポートでの通信を行うと、変換されるグローバルIPが同じになるからどちらかしかできない のがNATですね。 最も単純なNATはローカルネットワークのホストとグローバルアドレスを一対一で対応させるもので、ポート番号が違ってもLAN機器の数だけグローバルアドレスが必要になるようです。 NAPTの場合はこれに加えてポートも変換しますから、次のようなテーブルになることで上記の問題が回避されます。 10.1.1.2:1111 — 210.124.-.-:9990 10.1.1.3:1111 — 210.124.-.-:9991 ここでいう9990、9991はランダムに採番されるので重複することはありません。外に出ていく時にはIPアドレスとポートで識別できますし、返ってくる時にはポートで識別できます。 ※以下、NAPTはサーバー設置が難しい、みたいなことを書いていたので修正 なお動的NAT/動的NAPTどちらでも、初期状態ではマッピングがありませんから、サーバーなど外側から通信を待ち受けるのは難しいです。この場合、マッピングを手動で設定する静的NATや静的NAPT(ポートマッピング・ポート開放とも言われます)が必要です。 ランダムに採番される のはNAPTだけの話ということで間違いないですか? NATではポート番号を変更しないため、そもそもルーターが採番することはありません。 ※NAPTを含んで「NAT」と言うケースはあります リクエスト時は 10.1.1.2:80 を 210.124.-.-:80 に、 10.1.1.3:80 を 210.124.-.-:80 に変換しなければいけないので、NATでポートを変換しないか、それとも静的NAPTで両方 210.124.-.-:80 に変換するんですか? 210.124.-.-:80 にマッピングされているローカルアドレスは複数存在してしまうから、静的に変換しても結局返信あて先が片方にしかならないのかと思ったのですがどうなんでしょうか? ご想像の通り問題が生じますから、NAPTで同じIPアドレスかつ同じポートに対してマッピングを行うことは動的静的に関わらずできません。LAN内にApacheを2つ動かして、どちらもインターネットから80番でアクセスできるようにする、といったことは所謂NAT/NAPTでは不可能だと思います。 なお、NAT/NAPTの実装方法には様々なやり方があるようです。私も詳しくは知らないので見かけたページを貼るだけになりますが、もし深堀りしたいのであれば参考になるかもしれません。 ネットワークアドレス変換…(Continue Reading)

http://api.ローカルIPアドレス:3000 にアクセスできない

投稿者: Anonymous 同じネットワークに入って iPhoneのSafariでhttp://IPアドレス:3000にはアクセス可能 http://api.IPアドレス:3000だとアクセス不可能 となってしまいます。 ちなみにiPhoneアプリから同様にアクセスしてみても NSLocalizedDescription=指定されたホスト名のサーバが見つかりませんでした。 というエラーが出てしまいます。 おそらく api.数字.数字.数字.数字 となっているのでドットが本来のIPアドレスよりも1個多くなってしまっているのがあやしい気がするのですが、解決方法はるのでしょうか? 解決 api.example.comというホスト名api・ドメイン名example.comの組み合わせをDNSで名前解決することによって、IPアドレスが得られ通信できる仕組みです。IPアドレスのドットが多いではなく、根本的な理解の問題です。 解決方法として簡単に挙げられるのは以下の二つです。 http://IPアドレス:3000のままアクセスする http://api.example.com:3000などで名前解決できるようにローカルネットワークを構成する 回答者: Anonymous

macでtcコマンドを利用したい。

投稿者: Anonymous Mac上でnetemを利用する方法をご教示ください。 MacとUbuntuをルータを介して同じLAN上に設置しており、Macのeth0に遅延を入れてubuntuからスループット試験をしようとしています。 [Mac netem(eth0)]——-[router]——-[Ubuntu (eth0)] iperf server iperf Client そこでMacでeth0に遅延を投入したところ tc qdisc add dev eth0 root netem delay 200ms -bash: tc: command not found というエラーが返ってきてしまいました。 解決 XcodeのNetwork Link Conditionerも試してみました。 ホストやポートを特定できませんが、UL,DL,DNSの遅延が調整できましたので、 シェルスクリプトから利用できるようにしてみました。 delay.sh #!/bin/sh open delayon.app delayon.app (AppleScript) tell application “System Preferences” activate set current pane to pane “com.apple.Network-Link-Conditioner” end tell tell application “System…(Continue Reading)

isc-dhcp-server が時々起動しない

投稿者: Anonymous raspberry pi に isc-dhcp-server を入れてルータとして運用していますが、最近起動しない現象が不定期的に発生しています。起動しない場合は以下のようなメッセージがログに残ります。 $ sudo dhcpd -t Internet Systems Consortium DHCP Server 4.3.5 Copyright 2004-2016 Internet Systems Consortium. All rights reserved. For info, please visit https://www.isc.org/software/dhcp/ �`:2218: REQUIRE(‘M’)))))) failed. Aborted �:2218: REQUIRE(‘M’)))))) failed. の部分はその時々で異なるメッセージになります。(systemctlから起動する場合も同じです。) この原因と解決方法がわかる方はいらっしゃるでしょうか? 設定ファイルは以下のとおりです。 $ cat /etc/dhcp/dhcpd.conf ddns-update-style none; authoritative; log-facility local7; subnet 192.168.3.0 netmask 255.255.255.0 { range 192.168.3.10…(Continue Reading)

IPSec VPNでPingが通らない

投稿者: Anonymous ネットワーク初心者です。 現在構成図のような「Cisco WAN 実践ケーススタディ(インプレスジャパン)」に記載されている設定内容と同じ設定をGNS3というシュミレーションソフトでIPSec VPNを設定しているのですが、PC1からPC2へpingが通りません。 大変お手数ですが、原因と解決策をご教示いただけないでしょうか。 設定内容についても記載します。 よろしくお願い致します。 ※access-listについては自分で追加しました。 ・WAN1 WAN1#show run line Building configuration… Current configuration : 2252 bytes 1 : ! 2 : version 12.4 3 : service timestamps debug datetime msec 4 : service timestamps log datetime msec 5 : no service password-encryption 6 : ! 7 : hostname WAN1…(Continue Reading)

UDPによるデータ送信のパケットロスを減らす方法について

投稿者: Anonymous  いま、1つのアプリケーションで描画した画像を、もう1つのアプリケーションにリアルタイムで送信し、表示するようなプログラムを作成しています。ネットワークに関しては初心者なのですが、調べた限りでは、実際の映像ストリーミングではUDPが使われているということで、同じくUDPを使った通信を実装しました。  具体的には、200 x 200の画像データを適当なアルゴリズムで圧縮し、約15000バイトほどのデータにしたあと、それを1398バイトの部分データに区切って、2バイトのデータのインデックス情報を付加した計1400バイトのデータをパケットに載せて送信します。送受信にはboostのasioライブラリを使用しました。送信側、受信側のともに、それ用のスレッドを用意し、それぞれひたすら送信・受信を行うようにしました。疑似的なコードで表すと以下のような感じです。 //送信側のコード while(!stop_sending) { //データの取得 data = get_image(); //データを分割して送信 for(int idx = 0; idx < max; ++idx) { s_buf[idx] = segment(data, idx); udp_sock_.send_to(boost::asio::buffer(s_buf[idx]), endpoint); //一応のスリープ(これは必要?) std::this_thread::sleep_for(std::chrono::milliseconds(1)); } //送信間隔は30ms std::this_thread::sleep_for(std::chrono::milliseconds(30)); } //受信側 while(!stop_receiving) { //データの受信 auto len = sock_udp.receive_from(boost::asio::buffer(recv_buf_udp), sender_ep, 0, error); //取得したデータから画像を復元 … } 以上の方法で、一応の画像の送受信は成功したのですが、送信の間隔を狭めるほど受信側でのパケットロスがひどくなり、リアルタイムな画像送受信が上手くいっていないような状況です。具体的には… 送信先 : 127.0.0.1 送受信のポート :…(Continue Reading)

LinuxOSにおけるネットワークの設定について

投稿者: Anonymous 今まで、フリーのドメインを使っていたのですが、今回ドメインを購入して利用することにしました。 今までは、固定IPではない(自宅サーバーであったため)定時間隔ごとにcurlでIPアドレスをDNSに登録していたのですが、 外部からAWSのWEBサーバーに有料ドメインを使ってアクセスしようと思ったのですが、 /etc/~配下のネットワーク設定ファイルというのは、LAN内に限られた設定で、外部に公開するためのドメイン設定、DNS設定はドメインを購入した側でするものなのでしょうか? お恥ずかしい質問ですが、よろしくお願いいたします。 解決 まず、あなたが購入したドメインを管理するDNSサーバを用意してください。たいていのドメイン業者は無償のサービスで提供してると思います。AWSであればDNSのサービスとしてRoute53がありますのでそれを使ってもよいです(有償ですが)。自分のサーバにBINDをインストールするという選択肢もありますがあまりお勧めしません。 用意したDNSサーバに必要なリソースレコードを設定します。ホスト名→IPアドレスの変換をするAレコードとか、メールの配送先を設定するMXレコードとかです。 そして、そのDNSサーバのIPアドレスを上位(購入したドメインがexample.comなら.comドメインの、example.co.jpドメインなら.co.jpドメインの)DNSサーバに登録します。これは(普通は)ドメインを購入した業者がやるのでそこに頼みます。ドメインの管理画面にそんな項目があるでしょう。 ・・・と言うように、自前でDNSサーバを運用する場合を除いて、名前解決される側のサーバでやることはありません。 サーバ側でどのようなホスト名を設定しようが、DNSでの名前解決に関係ありません。全然別の名前を設定していても、極端な話、名前解決される側のサーバは実在しなくてもDNS上は何の影響もありません。 (まぁサーバ側の動作には支障が出てくる点もあるので普通は一致させますが) 回答者: Anonymous