今だけ人気マンガ100円レンタル特集♪

送信先IPアドレスとMACアドレスが必要なのはわかるのですが、送信元のIPアドレスとMACアドレスがなぜ必要なのでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (6件)

>No.3さん


MACアドレスは通信には不要ですよ。IPパケットのヘッダ構成は
http://www.itbook.info/study/p87.html
ヘッダの中にMACアドレスなどありません。大体ネットの先にあるIPはわかってもMACアドレスがわかるはず
ないです。あくまで通信相手を見つけて初めてMACアドレスがわかるのです。MACアドレスがわかってなければ
通信できなかったらインターネットは成り立ちません。
通信を始める前に相手のMACアドレスを知る方法がないからです。

TCP/IPは本来TCP/IPプロトコル群といって複数のプロトコルがそれぞれの役割を果たしながら通信を行います。

その説明はL3もしくはL2スイッチの説明ではないですか?
MACアドレスで動作するのはHUB、その上位のブリッジです。同一セグメント内もTCP/IPはIPで通信するのですよ。
IP(ネットワーク層)→ARPによりMACアドレスを取得(データリンク層)→NIC(物理層)
IP→MACアドレス解決をそれぞれ行いながら(実際にはARPテーブルに記憶してそれを参照しますが)
各ノードは通信を行っているのです。

中継ポイント(ルータのことですか?)はMACアドレスを通して通信しているわけではないです。
ルータから先はあくまでIPでの通信、RIPを使ってルート情報の取得で、相手ネットワークアドレスに到達した
とこで初めてMACアドレスを取得して本当の通信相手を見つけるのです。
    • good
    • 0

通信の意味がわかってないようなのでわかりやすいHP見つけたので


これ見れば意味がわかると思います。
http://cisco-freak.ddo.jp/ccna_lesson/lesson12.htm
通信というのは各階層に分かれていて役割がある。
基本的には上位層から下位層へ、それぞれプロトコルが役割を持って
次々につなげていくのですよ。
インターネット層にあるIPからMACアドレスを引くためにARPによってMACアドレスを得てパケットに追加していくのです。

MACアドレスというのは通信の途中に追加される部分なのですよ。
最初から通信に必要なわけではないです。
DNSだって同じ仕組みですよ。IP知らなくてもホスト名からIPの名前解決を行うのがDNS、IPからMACアドレスの解決を行うのがARPです。

IPを知らなければ通信ができないのであれば、今のインターネットは成り立たないでしょう。
www.yahoo.co.jpとやってDNSが124.83.139.192を返すからIPを知らなくても通信が可能になる。
同様にIPからMACアドレスを通信途中にARPによって取得できるからwww.yahoo.co.jpとやってMACアドレス知らなくても通信ができるのです。

大体MACアドレス知らなければ通信できないならNIC変えたらその時点で通信不可能になってしまいます。MACアドレス変わるわけだし。
    • good
    • 1

> MACアドレスは通信には不要ですよ。


そうですか。IPパケットは下位層のMACヘッダーを付けてセグメント内を流れるんですよ。
このときMACアドレスが活躍するんです。
目的先MACに届いたあとMACヘッダーを外してIPパケットが無傷で渡されるのです。
それで無ければARPなんているわけありません。

中継途中も隣同士は下の階層でMACを使ってやりとりを行っているのは疑いもありません。 
    • good
    • 0

どちらも確認応答や再送要求の為に必要です。


相手確認にも重要です。

なお、MACアドレスは近距離用(一斉送信の届く範囲)
IPアドレスは遠方用です。(ルーターの向こう側)

無線ルータでMACアドレス制限がかけられるのもこれがあるからです。

ARPですがセグメント内ではMACアドレスでしか通信できないのでIPアドレスを一斉送信して
答えをMACアドレスで送信してもらいます。
なおLANやインターネットでパケットを中継していく場合目的地はIPアドレスで表しルーチングしますが
中継ポイント同士はやはりお互いのMACアドレスを使って伝送・確認しながらリレーしていきます。
    • good
    • 0

通信のパケットの中には送信元IPと送信先IPが入ってます。


これは送る際に相手がわからなければならないので送信先は必要、パケットが送信先に届いた後相手がパケットを返すのに送信元のIPが必要です。送信元がわからなければ相手から返ってこないです。

MACアドレスはARPというTCP/IPプロトコル群の中の一つのプロトコルがIP→MACの対応表から引くので通信としては不要なのです。
(送信元、送信先がそれぞれで作業を行っているので)
    • good
    • 0

送信先MACアドレスはいりませんよ。


と言うかわかりません。
必要なMACアドレスはデータリンク層で用いるものです。
送信元IPアドレスはコネクションを確立するために必要です。
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qルータが「送信元を自分のMACアドレスに書き換え」る理由は?

http://www.mm-labo.com/computer/tcpip/ipaddress/ipaddressandmacaddress.html
 以上URLをもとに以下を例にしました。 
今やっていることですが
 「教えて!goo」の掲示板に書き込んだ情報を自宅のルータHUBに送り⇒「ルーティング」はどこでやるかわかりませんが?⇒はやぶさのNTTの基地局に送信され⇒ISP⇒「教えて!1goo」のサーバに無事に届く・・・
 以上が掲示板に書き込んでいる作業の流れだろうと思うのですが・・・
 冒頭のURL先に
「各ルーターは、自分の所に届いたパケットに記述されたMACアドレスのあて先を次に送るべきルーターのMACアドレスに、送信元を自分のMACアドレスに書き換えてデータを転送します。」
 
 とありますが、「送信元を自分のMACアドレスに書き換え」とあり、なぜ自分のMACアドレスに「書き換え」なければいけないのですか・・
 よろしくお願いいたします。

Aベストアンサー

IP通信はルータがバケツリレーの要領でデータを伝えていきます。
MACアドレスは隣通しを識別するためのアドレスなので、ルータを超えるたびに書き換える必要があります。

Q利用者側のMACアドレスを取得したい

いま PHP を使ってウェブサイトを構築しており、
認証として利用者のMACアドレスを取得したいと思っています。
LAN 内であれば
http://www.phpclasses.org/browse/file/7704.html
等を利用して取得できるようですが、
当たり前ですが LAN の外の方との通信では取得ができません。

JavaScript を使ってクライアント側の MACアドレスを取得してしまう
という方法があると聞いたことがあるのですが、
検索しても見つけ出すことができませんでした。

ご存じの方、お教え頂けますでしょうか?
よろしくお願い致します。

Aベストアンサー

複数PCのユーザーや、PCの買い替え、LANカードの変更など
MACアドレスが変わる機会は多々あります。

現実的には、ウェブアクセスで
MACアドレスでの認証は、可用性が低いと言えます。


逆に、ソーシャルアタックに対して
MACアドレス認証は弱い。
親のPCと自分のPCのLANカードを入れ換えるくらい
中学生でも簡単にやってのけるでしょう。

QLANからWANの送信元IPアドレスについて

初歩的な質問ですみません。

IPヘッダの送信元IPアドレスについて質問です。
以下の構成でパソコンAからパソコンBにデータを送信した場合、送信元IPアドレスにはどのIPアドレスが入っているのでしょうか?
よろしくお願いします。


***送信元[68.51.0.100]***
パソコンA[192.168.0.10]
  ↓
ルーターA[192.168.0.1]
  ↓
--WAN--
  ↓
***送信先[20.102.36.42]***
ルーターB[192.168.100.1]
  ↓
パソコンB[192.168.100.10]

Aベストアンサー

パソコンAからパソコンBへのパケットの場合…

>パソコンA[192.168.0.10]
>  ↓ SrcIP:192.168.0.10/DstIP:20.102.36.42=>外部ネットワークなのでゲートウェイ(ルータA)へ
>ルーターA[192.168.0.1](WAN側IP:68.51.0.100)
>  ↓ SrcIP:68.51.0.100/DstIP:20.102.36.42(書き換え前のSrcIP/DstIPを記憶)
>--WAN--
>  ↓ SrcIP:68.51.0.100/DstIP:20.102.36.42
>ルーターB[192.168.100.1](WAN側IP:20.102.36.42)
>  ↓ SrcIP:68.51.0.100/DstIP:192.168.100.10(書き換え前のSrcIP/DstIPを記憶 パケット転送の設定が必要)
>パソコンB[192.168.100.10]

となる…かと。(TCPやUDPなどの場合は各ルータはポート番号もセットで記憶することになります)
TCPならハンドシェークが完了すればパソコンAはクライアント側ということになりますのでルータAのパケット転送の設定は不要です。(ルータAが最初の接続時の情報を保持しています)
# UDPだと必要…かもしれません。

パソコンAからパソコンBへのパケットの場合…

>パソコンA[192.168.0.10]
>  ↓ SrcIP:192.168.0.10/DstIP:20.102.36.42=>外部ネットワークなのでゲートウェイ(ルータA)へ
>ルーターA[192.168.0.1](WAN側IP:68.51.0.100)
>  ↓ SrcIP:68.51.0.100/DstIP:20.102.36.42(書き換え前のSrcIP/DstIPを記憶)
>--WAN--
>  ↓ SrcIP:68.51.0.100/DstIP:20.102.36.42
>ルーターB[192.168.100.1](WAN側IP:20.102.36.42)
>  ↓ SrcIP:68.51.0.100/DstIP:192.168.100.10(書き換え前のSrcIP/DstIPを記憶 パケット転送の...続きを読む

QMacターミナルで実行中のプログラムを中止するには?

Macのターミナルでプログラムを走らせているとき、
実行中のプログラムを一時停止したり中断・終了させるには
どうしたらいいでしょう?

Unixだと、Control+s とか Control +c とかでできますよね。
Macだと、それではできないみたいなんです。

基本的な質問ですみませんが、どなたか教えていただけないでしょうか。

Aベストアンサー

ごく普通にControl + Cで中断できますよ。

もしかしてControlキーをcommandやcapslockと押し間違えているとかいうことはありませんか?

Q相手PCのMACアドレスを知るためのコマンドは?

こんにちは、
相手PCのMACアドレスを知るためのコマンドは何でしょうか?
単にPingでは、相手のIPアドレスしかわかりません。

何かお分かりの方がいましたら教えてください。 よろしくお願いします。

Aベストアンサー

相手のPCが自分と同じブロードキャストドメイン(同じLAN内)にあり、かつ一度通信していれば自PCが覚えているので(Windowsの場合)arp -a で表示されると思います。
別のブロードキャストドメインにある場合はルータでブロックされるのでMACアドレスは取得できないと思います。(方法があるのかもしれませんが私はわかりません)

QMACアドレスが変更される原因について教えてください。

自宅のパソコンがインターネットに繋がらなくなった原因が
MACアドレスが変わっていたことだったようなのですが、
自分ではMACアドレスを変えるようなことをした覚えがありません。

使用パソコンの変更、LANカード・LANボードの変更以外に
他にもMACアドレスが変わる原因って何かあるんでしょうか?

Aベストアンサー

>自宅のパソコンがインターネットに繋がらなくなった原因が
何かを変更してから、つながらなくなったということでしょうか?
ブロードバンドルータを導入したとか?

だとしたら、インターネットに接続する機器を全てOFFにして1時間くらい待ってみて再度接続してみてください。

ブロードバンドルータの機能によっては、MACアドレスをLANカードのものに変更できる機能があります。
それを使ってみるかですね。

QIPなしで、MACアドレスのみで通信できますか?

ネットワークを勉強する超初心者なのですが、
スイッチの勉強をしている際、MACアドレスをたよりに通信している
図を見て、「あれ?IPはどこにいった?」と思いこんがらがってきました。。
特にLAN内とかであれば、IPアドレスって必要ないんじゃないんでしょうか?
ARP要求をしなくてすむ分軽い通信になりそうな素人考えなのですが、
IPがないと何が困るでしょうか?

お恥ずかしい限りですが、教えて頂けると嬉しいです。

Aベストアンサー

NetBIOS over IEEE 802.2 を利用すれば、IPはいりません。
但し、ARPと似たような名前解決のブロードキャストがあります。

通信には相手を特定する必要があります。
相手を特定する際にmacアドレスで判断出来るのであれば理論上可能です。
(そのようなインターフェースを作れば良い)
インターネットが普及する前までは、IPアドレスを利用せずに
このような環境での通信が当たり前でした。

現在のOSは殆どが、IPでの通信を前提に作られていますので
IPで通信するのが1番手っ取り早いです。

QMACアドレスからIPアドレスを割り出す方法はありますか

MACアドレスだけがわかっている場合、そのPCのTCPIPを割り出す方法があるでしょうか?
MACアドレスだけがわかっているPCは、同一セグメント内やLAN内ではなくて、どのネットワークに接続されているかまったくわかりません。
PINGを飛ばす感覚でMACアドレスを飛ばして、IPアドレスを返すようなコマンドやツールなどご存知でしたら教えてください。

Aベストアンサー

こんにちは、疑問はつきませんね。

さてご質問の件ですが、少々勘違いなさっているような気がします。

MACアドレスは、セグメントを越えて出て行くことはできません。セグメントを越えるためにはルーターが必要なことはご存じかと思いますが、そのときには、セグメント内部の機器のMACアドレスは、ルーターのMACアドレスに書き換わってしまいます。

よって、どこにあるかわからないMACアドレスを探すことはできません。

Qスイッチングハブとハブ(バカハブ)の違い

ハブを購入しようとしましたら、店頭にはほとんどが「スイッチングハブ」という製品ばかりです。
そこで、ルータとPCを接続する場合、スイッチングハブとストレートLANケーブルを用意し接続しても問題ないのでしょうか?
スイッチングハブとハブの違いをいろいろな説明を読みまして、バカハブ(ダブハブ)というものが必要だと思っていたのですが...?

Aベストアンサー

HUB(ハブ)の説明をしますと、
一般的にHUBにはリピーターハブとスイッチングハブがあります。
リピーターハブはクライアントPCのリクエストに対してすべての端末にデータを流し、その回答をするのはかくPCが判断します。スイッチングハブはリクエストに対してハブ自体がどの端末あてにデータを流すのかを判断しその端末にしかデータは流しません。
言い換えると、リピーターハブは会社で言う館内放送のような物で、誰かを呼び出したいのに会社内全部に放送してしまう方法。スイッチングハブは内線電話のような方法で用事のある人の内線電話に直接電話を掛けて呼び出す方法です。
リピーターの場合データの行き先の制御を行う必要がないのでハブ自体を安く簡単に作れますが、全端末にデータを同時に流しますから、ネットワーク自体の負荷があがり大規模なネットワークでは通信が遅くなります。一方スイッチングハブはハブ自体が宛先を制御しますからハブ自体の構造が複雑になり高価になりますが、必要な端末にしかデータを流しませんので、ネットワークの負荷は軽減されます。
以前はスイッチングハブは数万円~数十万円もしましたが近頃は数千円で買えるぐらいまで落ちてきましたので、スイッチングハブしか売っていないのです。
わざわざ同じぐらいの値段で機能の劣る製品を買う人はいないですからね。
ただ、貴方が言うルーターとPCを接続するだけならスイッチングハブはいりませんが・・・
1台だけなら全くいりませんし、今時ならルーターにハブ機能が内蔵されていますから通常4台程度はルーターだけで良い接続できます。ただ、ADSLのレンタルモデムのルータータイプの場合LANポートが1つの場合がありますので、この場合はスイッチングハブが必要です。

HUB(ハブ)の説明をしますと、
一般的にHUBにはリピーターハブとスイッチングハブがあります。
リピーターハブはクライアントPCのリクエストに対してすべての端末にデータを流し、その回答をするのはかくPCが判断します。スイッチングハブはリクエストに対してハブ自体がどの端末あてにデータを流すのかを判断しその端末にしかデータは流しません。
言い換えると、リピーターハブは会社で言う館内放送のような物で、誰かを呼び出したいのに会社内全部に放送してしまう方法。スイッチングハブは内線...続きを読む

QIPアドレスとMACアドレスを取得したい(C言語)

OSはLinuxで、コンパイラはgccです。
C言語でプログラムを作っていて、自分のIPアドレスとMACアドレスを取得しようと考えています。下のソースでIPアドレスは入手できたのですが、MACアドレスも取得しようとしたら、IPアドレスが上手く取得できなくなりました。ioctl(fd, SIOCGIFHWADDR, &ifr);で取得できるとおもうのですが、同時に取得しようとするとIPアドレスの表示が正しくされなくなっている状況です。

/* 自IPアドレスの取得 */
int fd;
struct ifreq ifr;
fd = socket(AF_INET, SOCK_STREAM, 0);
ifr.ifr_addr.sa_family = AF_INET;

/* eth0のIPアドレスの取得 */
strncpy(ifr.ifr_name, "eth0", IFNAMSIZ-1);
ioctl(fd, SIOCGIFADDR, &ifr);
/* MACアドレスの取得 */ ←上書きされている??
ioctl(fd, SIOCGIFHWADDR, &ifr);
close(fd);

どなかたご教授お願いいたします。

OSはLinuxで、コンパイラはgccです。
C言語でプログラムを作っていて、自分のIPアドレスとMACアドレスを取得しようと考えています。下のソースでIPアドレスは入手できたのですが、MACアドレスも取得しようとしたら、IPアドレスが上手く取得できなくなりました。ioctl(fd, SIOCGIFHWADDR, &ifr);で取得できるとおもうのですが、同時に取得しようとするとIPアドレスの表示が正しくされなくなっている状況です。

/* 自IPアドレスの取得 */
int fd;
struct ifreq ifr;
fd = socket(AF_INET, SOCK_STREAM,...続きを読む

Aベストアンサー

/usr/include/linux/if.h にある struct ifreq の定義を良く見て貰えば分かると思いますが、ifr_ifru は union です。で、その union の中に ifru_addr と ifru_hwaddr があり、これが ifr_name と ifr_hwaddr に #define で定義されています。つまり union なのでこれらは同じ領域を取ります。

ということで、IPアドレスを取得後に自分で確保した struct sockaddr_in の変数に内容をコピーしておいてそれからMacアドレスを取得するか、または最初から strut ifreq ifr1, ifr2; のように2つ変数を作っておいて別々に取得すればいいと思います。


人気Q&Aランキング