同一網段內的兩台主機通信是否需要路由器?

假設A、B兩台主機位於同一網段內,A想與B通信,A只知道B的IP地址,那麼A通過arp協議就可以獲得B的MAC地址,進行發送,這個過程題主應該理解的沒問題吧_(:з」∠)_
基於這個過程,有這樣幾個問題不明白:

1、這一過程是否完全和路由器無關?僅是二層的事情?
2、A是如何知道自己與B在同一網段內的?A自身進行判斷(同一網段的A就自己ARP定址,不是同一網段的就發給路由器)嗎?
3、如果是2中所提那樣,我們知道路由器的路由表還有一項是遇到同一網段內內的數據包無須轉發,直接交付?為什麼路由器會收到這種來自同一網段的包?因為同一網段的話A是可以自己獲得B的MAC地址,直接交付,無須通過路由器的?


答案一:同一網段A與B通信,不需要路由器介入。

A直接廣播ARP request 到廣播域,B處於同一廣播域,可以接收到ARP request,B用單播方式直接告訴A自己的MAC B 地址。A收到B的ARP reply,將 MAC B ----10.1.1.3 緩存在ARP Table,既然知道B的二層、三層地址,可以完成 Ethernet Frame 的封裝,從介面發送出去,可以長驅直入到達B,B也以同樣的原理髮回返程的Ethernet Frame。

答案二:A使用自己物理介面的網路掩碼255.255.255.0,與自己的IP 10.1.1.2 做 【按位與】操作,計算出自己網段地址為10.1.1.0,再用自己的掩碼和 B的IP 10.1.1.3 做【按位與】操作,計算出B的網段地址為10.1.1.0,由於A與B的網段地址完全相同,可以認為是同一網段。


答案三:路由器可能看到A與B的通信,也可能看不到A與B的通信,這取決於他們之間是交換機、還是HUB互聯。


1)A、B、路由器三者採用二層交換機互聯,如圖一所示:

A 的ARP request 到達 switch,switch 學習到A的 MAC A,並將A連接交換機的Port Number 和 MAC A 映射起來,我們稱之為MAC Address Table:

Port 2/2 ----- MAC A

當B的ARP Reply 到達switch,switch 也用類似的方法將B的 Port Number 和MAC B 映射起來,看起來如下圖

Port 2/3 ----- MAC B

當A發給B的 Ethernet Frame 到達switch,switch發現Frame "s Destination MAC = MAC B,查詢一下MAC Address Table,找到這個表相:

Port 2/3 ----- MAC B

於是就從 Port 2/3 發送出去,Port2/3 是直連B的,所以只有B才可以收到此 Frame,路由器無法收到。


2)A、B、路由器三者採用HUB互聯,如圖二所示:

A 與B之間的所有通信,包括ARP、A與B之間Frame 都被HUB以廣播方式,發給廣播域里每一個主機或路由器,所以路由器可以看到A與B的通信,路由器所要做的工作很簡單,默默地丟( silently discard)


3)A、B、路由器三者採用具有三層功能的switch互聯,如圖三所示:

switch 採用 SVI ( Software Virtual Interface ) 10.1.1.1 做A、B的預設網關。這種和圖一類似,三層switch 的SVI 介面不能接收到A與B之間的用戶數據流量。


-------------- 回復@AttufliX 評論---------------

VLAN,Virtual Local Area Network, 虛擬區域網。如果沒有VLAN,二層交換機所有的埠都在一個廣播域,網路里通過二層互聯的交換機全部處於一個廣播域;假設switch 有48 個埠,有100台switch,那將有4800個埠,如果都連上主機,意味著有4800 host 處於同一個廣播域,任何一個host 發廣播消息,如 ARP 請求,4800 host都會接收,只有一個host 會發 ARP reply,其它都會被丟棄。造成的後果就是網路很嘈雜,網路充斥著廣播消息,不僅浪費帶寬,還浪費host CPU 資源。

另外大家處在一個二層域,不利於安全控制;比如公司有很多部門,有HR,財務,研發等部門,財務部門不希望和其他部門處於一個廣播域,想有自己獨立的廣播域,如果用獨立的switch 只給財務部門用,用路由器把這個switch隔離起來也可以,但不夠靈活。財務部門可能工作在多個樓層,每個樓層財務人員可能只有幾個人,不能充分利用48口交換機埠。

於是就有了VLAN這個利器,可以在一台交換機上劃分多個VLAN,每個VLAN是一個獨立的廣播域,只有屬於這個VLAN的交換機埠才可以收到屬於這個VLAN的廣播。比如HR VLAN,Finance VLAN,DEV VLAN,Finance 員工被分到Finance VLAN,於是Finance部門就不會收到 其它兩個VLAN的廣播。

配置了VLAN的switch,通常會動態生成一個SVI介面,Software Virtual Interface,這是一個軟體虛擬介面,你可以把它看做位於switch 上的一個 host,它有自己的三層IP,也有自己的MAC,也有自己的埠號(內部埠號),SVI 既然屬於VLAN這個廣播域,可以收到ARP,可以做這個VLAN的預設網關。

家庭網關,俗稱無線路由器,它的WAN口通常用來PPPoE 撥號,運營商可以動態分配一個公網IP,綁定在此WAN口;通常還有4個LAN口,這4個LAN就是一個小 switch,同樣也有一個SVI介面,SVI介面的IP就是無線路由器的預設網關,比如 192.168.1.1 或10.1.1.1 , 同樣SVI也有自己的MAC地址。

家庭網關還有DHCP 功能,可以給電腦或手機動態分配IP地址 + 預設網關 + DNS server,再次提醒,預設網關就是SVI的IP地址。

家庭網關 還具有NAT功能,私網和公網的轉換,具體含義可以參考我別的文章,不再闡述。

家庭網關,還具有無線AP功能,可以驗證用戶,綁定用戶,分配IP地址,加密/解密 用戶數據流量。

普通的無線路由器沒有VLAN的設置,如果想弄,cisco 無線路由器應該有這些功能,可以分 Man VLAN , Woman VLAN ,這樣男人打遊戲,女人看視頻,互不干擾。


問題1:如果同時滿足物理鏈路連通+網段配置相同的條件的話,那麼兩台主機通信可以直接用一根網線直接通信。

問題2:因為A-B之間通信需要對方的IP地址,在主機A上實際上有一張路由表,Windows主機可以在命令行里用route print命令列印本機的路由表,如果A要訪問的目的地址在A所在的網段內,直接發ARP請求,收到回應以後直接與對方通信。

這個過程可以不經過路由器。

問題3:實際上這種內網通信,中間有沒有路由器是沒關係的,有交換機就可以了。題主因為你沒見過真正的「路由器」,把那種家用的上網的「路由器」和真正意義上的「路由器」弄混了。

家用的路由器實際上是路由器+交換機,路由器對內連接的這些口,都屬於交換機的部分,因為這些對內的口都是同一個網段的。交換機作為一個二層設備,當然能收到A發送給B的內容,因為這是交換機的功能。

企業級的路由器,一個口只能屬於一個網段(除了SVI之類的介面),家用設備都是路由器+交換機+撥號設備+無線AP的組合。

因為A B 路由器都在同一個廣播域上,乙太網又是廣播網路,如果A B 路由器之間用Hub之類的鏈接的話,那麼路由器是有可能收到A-B之間的通信的,只不過通信都被路由器忽略了。


1、這一過程是否完全和路由器無關?僅是二層的事情?
是的, 和路由器卵關係都沒有。
你應該去看一下路由器與交換機的定義(教科書上的定義就好)
以下為夾帶私貨, 希望能幫助你理解二層網路(OSI中的物理層與數據鏈路層, TCP/IP中的網路介面層)

先忘掉三層(網路層), 忘掉IP地址之類亂七八糟的。 我們一步一步來看計算機網路。

在交換機出現之前, 一堆計算機要進行數據交互, 也就是通信, 最簡單的方式是「共享信道」
所謂共享信道, 是這樣演化的
當我們需要兩台計算機之間通信的時候, 顯然, 我們需要用一根線把它們連起來

【主機A】&<---------&>【主機B】

當我們需要三台及三台以上的計算機之間兩兩能通信的時候, 最廉價的布線方式是這樣的

【主機A】 【主機B】 【主機C】
^ ^ ^
| | |
_________________________________ (匯流排型布局)

或者是下面這種

【主機A】--------【主機B】
| |
【主機D】--------【主機C】 (環型布局)

(星形布局選擇性不講, 已經類似於交換機網路了)
環型布局已經被歷史證明是個SB主意了。
於是, 匯流排型布局流行起來了, 它的優點與缺點如下:

優點:
1: 省線, 便宜
2: 不像環型布局, 某一兩台主機掛掉不會導致整個網路掛掉
缺點:
1:匯流排掛了網路就掛了, 不過這可以接受, 不算是一個致命缺點。
2:網路規模不能太大, 主機數量不能太多, 否則大家的數據都擠在一條線上, 通信效率很低下。

再捋一下:
在匯流排型網路中, 主機之間要兩兩通信, 需要做什麼?

1: 每個主機需要有一個「身份證號」
2: 每個主機需要知道其它主機的「身份證號」
3: 所有數據都擁擠在同一條物理線路上穿梭,
而對於數字電信號來說, 在物理介質上同一時刻只能有一種狀態,
也就是說, 匯流排是一座獨木橋, 如果穿梭流動的數據是卡車的話
同一微觀時刻, 匯流排上只能跑一輛車, 那麼如何解決宏觀上大家都要飆車的問題?

答案如下:

1: 身份證號就是MAC address, 你可以簡單的理解為是網卡的物理地址(其實不是)
{//括弧內的內容看不明白不要看
MAC ADDR == media access control (layer) address 介質(媒體)訪問控制子層地址
OSI協議在數據鏈路層劃分了兩個子層, 一個LLC, 一個MAC
MAC地址其實是其數據鏈路層中MAC層的地址
另外一個層叫LLC, logical link control, 邏輯鏈路控制子層
OSI的設想是好的, 在MAC子層, 可以有多種不同的協議, 比如可以有以太, 可以有其它
然後在LLC把這些不同的地址抽象為一個統一的邏輯形式, 提供給第三層(網路層)
然而並沒有什麼卵用, 學院派的天真想法被乙太網的事實壟斷打臉打的有點疼
MAC子層都他媽的乙太網一家獨大了, 要LLC有卵用?
所以, 如今的所有網路實現, 都不再提LLC了, 謝希仁第六版的教科書都是一筆帶過了
而如今大家說的MAC地址, 其實是乙太網MAC地址, 48位6位元組
}
2: 每個主機通過ARP協議得知其它主機的MAC地址, ARP協議是個很蛋疼的東西
它和三層地址(網路層地址)有關係, 但它本身是個2.5層的協議,這裡先不說
3: 通過載波偵聽多路訪問(CSMA)協議, 來處理大家都要在獨木橋上飆車的宏觀需求
CSMA的細節不表, 請看書, 或看百科

如果我們用另外一種方式來解決問題2, 而不使用ARP協議的話,比如下面這種:

每個主機在開機的時候, 在獨木橋上廣播自己的MAC地址:
「各單位注意, 趙日天上線, 趙日天上線」
「注意啦注意啦, 我李殺神上線了!!」
「我王誅魔也上線啦」
其它主機聽到之後都記在自己的小本上
比如劉斬仙聽到上面三個貨逼逼之後, 就在自己的小本上記著:
「目前上線的傻逼有:李殺神, 王誅魔, 趙日天」
每個主機在關機之前, 也都在獨木橋上廣播自己的下線消息, 比如
「趙日天身體被掏空, 需要休息, 拜拜」
劉斬仙聽到趙日天身體不適的消息後, 在自己的小本本上劃掉了趙日天的名字

其實已經實現了這個匯流排網路中主機之間兩兩通信的需求
比如趙日天要向劉斬仙表白

1: 趙日天首先查看自己的小本本, 是否記錄著劉斬仙目前在線
2: 如果在線, 就寫一封信, 如下:
發件人:趙日天
收件人:劉斬仙
內容:我愛你很久了, 以前我覺得自己不是QQ會員配不上你, 但現在我決定勇敢向你表白
希望你能接受我的愛!摸摸大!
3: 把這封信通過硬體驅動(網卡驅動)轉換成電信號, 在CSMA偵聽出空白期的時候
發送到電線(獨木橋)上
4: 李殺神, 王誅魔等人感受到電線上的騷動, 指使網卡驅動將電信號翻譯成人話並查看
但網卡驅動隨後發現趙日天愛的並不是自己,於是網卡驅動憤怒的扔掉了信。
而劉斬仙的發現收件人就是自己, 於是劉的網卡驅動將信件明文送給了劉。
(然而劉可能並沒有回應)

也就是說, 單獨要完成區域網中主機間的互相通信, 其實並不需要用到網路層

那麼什麼是交換機呢?
通過上面趙日天給劉斬仙表白的案例, 你看到了匯流排型區域網CSMA解決方案最大的壞處

1: 如果線上有很多人說話, 或者李殺神和王誅魔不停的在聊天的話, 趙日天很難把信發出去
畢竟獨木橋
2: 趙日天的信每個人都能看到。。大家只是遵守職業操守看到收件人不是自己而直接扔掉了。
假如李殺神並不扔掉信, 並且假裝自己是劉斬仙給趙日天撰寫了一個拒絕表白的回信。
趙日天收到信後將無法判斷是真是假, 只能當成真的處理。
(這樣就收不到劉斬仙親自撰寫的拒絕信了)

所以交換機出現了, 布局變成了如下這樣

【交 換 機】
( 介面1 介面2 介面3 介面4)
| | | |
| | | |
| | | |
【趙日天】 【李殺神】 【王誅魔】 【劉斬仙】

從此, 大家要發的信, 統一給交換機, 然後由交換機直接轉交給收件人
新的問題產生:

既然交換機是類似於【郵箱+郵遞員】的存在, 那麼交換機是如何知道哪個介面上連著的是誰呢?
也就是說, 交換機需要一張記錄著「介面號」與「MAC地址」的對照表
這張表如何建立呢?

答案其實很簡單

交換機通過被動學習來建立對照表中的表項
1: 當第一次, 趙日天給劉斬仙寫表白信的時候
趙日天通過介面1, 把信遞給了交換機
這時, 交換機得知了如下信息:
通過查看信的內容, 交換機得知該信的發件人是趙日天
同時交換機自己也知道該信是從介面1接收來的
於是, 第一條表項建立了:
趙日天 &<--------&> 介面1
2: 但這時, 交換機並不知道劉斬仙位於哪個介面上!
怎麼投遞呢?
給除過趙日天的所有人都投遞!!!!
3: 之後劉斬仙給趙日天回信的時候, 通過介面4把回信遞給交換機
運用第一步中的原理, 交換機就可以學到
劉斬仙 &<--------&> 介面4

交換機就是這樣, 簡單的就能學到所有人的位置

交換機的出現,有以下優點:

1: 解決了共享信道(匯流排型區域網)中的介質爭用問題
大家不再用擠獨木橋啦!!!所以大家的帶寬都上升了!!
這就是教科書中所說的「交換機讓解決了區域網大家都處於同一個衝突域中的問題」
衝突域, 其實就是二層廣播域, 即MAC層上的廣播問題
匯流排型布局的時候, 廣播是無可奈何的選擇
(前提條件是交換機的性能足夠, 信件過多時交換機會扔掉它處理不過來的信件哦!)
2: 基本上解決了信件被其它人偷看的問題, 但並沒有完全解決,
因為第一封信總會被交換機廣播出去

交換機沒有解決的問題有:

教科書中所說的「大家還是處於同一個廣播域」
這裡的廣播域指的是三層網路中的「廣播域」, 即IP層的廣播域
即主機發送IP廣播報文的時候, 交換機還是要老老實實的給所有人廣播
不過這一節我們先不講三層網路, 下個問題再講

2、A是如何知道自己與B在同一網段內的?A自身進行判斷(同一網段的A就自己RAP定址,不是同一網段的就發給路由器)嗎?
首先, 那叫ARP協議。。不是RAP協議。。其次, 沒人把ARP協議所做的動作稱謂「定址」, 這很不清真, 很不專業。

練習題:

定址是什麼意思?32位匯流排定址空間是多大?什麼是匯流排?

A通過B的IP地址就能直接判斷出B與自己是否在同一網段中。

通過上一講, 你明白了什麼叫交換機, 什麼叫二層網路(鏈路層網路, MAC層網路)
這一講,你需要明白什麼是三層地址(IP地址), 什麼是網段, 什麼是路由器

通過單純的二層網路, 你可以把北京怡紅院股份有限公司財務科辦公室中的16台電腦連接起來兩兩通信, 16個會計可以互相通過網路聊天了。
但財務科的同志需要和東莞業務部的姑娘們對賬, 這時你又要如何做呢?

這個時候, 區域網就不夠用啦!你就需要用到廣域網!!
你平常在家看草榴社區就是通過廣域網在通信!!

這個網路的歷史是這樣的
剛開始, 大家搞出了區域網, 很開心。
慢慢的, 很多科研院所學術機構都搞出了自己的區域網。
慢慢的, 有人就說, 我們現在搞了這麼多區域網了, 我們這些區域網之間能不能互通一下。
這樣, 我們學校的學生就可以抄你們學校學生的畢業論文了, 吼不吼啊!?
大家說吼!

然後問題就出現了:

大家區域網的搞法都不一樣
你用乙太網, 你的二層網路地址是48位6位元組
我用日天網, 我的二層網路地址是32位4位元組
所以,日天網中的二層幀, 直接傳遞給你乙太網, 你乙太網是認不出來的!

怎麼辦呢?
計算機學科中, 面對所有疑難問題, 都有一個終極糊屎大法:抽象一層, 封裝一下, 透明一丟丟
於是, 就糊出了三層網路, 也就是OSI中的「網路層」, TCP/IP中的「IP層」
這個第三層的糊法還分兩步:

假如怡紅院用的是以太區域網, 天上人間用的是日天網
1: 首先, 要有一種設備, 能轉換日天幀與以太幀
這種設備就叫路由器, 是的, 有點顛覆你的認知
路由器的出現就是為了互聯異構網路的!它的初衷重點並不是路由!!而是互聯異構!
組網是下面這樣
【日天網】 &<---&>【路由器】&<----&>【乙太網】
路由器的左介面, 使用的是日天網卡, 路由器的右介面, 使用的是乙太網卡
在日天網與乙太網的眼中, 路由器只是一台普通的主機罷了。
日天網看不見路由器的右介面, 乙太網也不知道路由器的左介面。
2: 大家要互相通信, 就要商量出一個統一的地址協議, 也就是新的身份證。
這樣在發信的時候, 日天網中的用戶就不需要知道乙太網的MAC地址長什麼樣
而乙太網的用戶也不需要知道日天網中的MAC地址長什麼樣。
大家都按統一規範來。
比如:
在中國, 大家的名字都是漢字, 姓在前, 名在後
在英國, 大家的名字都是英文, 名在前, 中間名在中間, 姓在後
為也方便兩車交流, 蛤蛤與女王商量了一下
中英統一名稱規範:兩國人民除了自己原來的姓名之外, 每個人再取一個姓名
新的姓名統一都是20個數字、字母與下劃線的組合!
這樣, 張狗蛋(標準名12345678901234567890)給
John Knownothing Snow(標準名98765431209876543210)寫信的時候
就可以直接把標準名貼在信封上了!而不需要管對方的本名是什麼!
3: 從此, 網路中的報文就變成下面這樣的:
【二層收件人】【二層發件人】【三層收件人】【三層發件人】【數據】
至於為什麼把二層幀頭包裹在三層通用報文頭的外面, 看下面的例子:
4: 假如,日天網的A給乙太網的B發信息的時候, 流程如下:
1: A構造了一份報文,如下:
[三層地址B][三層地址A][我愛你, 么么噠]
加上了日天網的幀頭, 最終如下:
[日天地址?][日天地址A][三層地址B][三層地址A][我愛你, 么么噠]
這TM尷尬了!!在日天網中, 所有的報文都要有日天收件人與日天發件人
但這裡, 日天收件人填誰?
寫B嗎?B是乙太網的啊!沒有日天地址啊!!!
那寫誰?
顯然要寫路由器左介面的日天地址啊!所以幀是這樣的:
[日天地址路由器][日天地址A][三層地址B][三層地址A][我愛你, 么么噠]
2: 這時, 由於寫上了路由器的地址, 所以上面那個幀會被送給路由器
路由器收到這個幀後, 第一步先看三層收件人的地址是啥
路由器看到了收件人的三層地址是B
於是去查自己的「路由表」, 得知B是一個乙太網中的主機
於是, 第二步, 對這個幀進行改造, 改造成如下這樣:
[以太地址B][以太地址路由器][三層地址B][三層地址A][我愛你, 么么噠]
路由器把一個日天幀改造成了乙太網幀
並且在以太收件人那裡寫上了B的以太地址, 在以太發件人那裡寫上了自己的以太地址
3: 之後, B就收到了這封信, 開始解幀頭
[三層地址B][三層地址A][我愛你, 么么噠]
再解三層頭
[我愛你, 么么噠]
這樣就得到了A發送的實質性數據

上面的三層糊法中, 有幾個關鍵點沒有說:

1: A是如何判斷B與自己不在同一個區域網的?
2: 當判斷出B與自己不在同一個區域網時, A如何得知誰是路由器?要發給哪台路由器?
3: A是如何得知路由器的二層地址的?路由器是如何得知B的二層地址的?

答案如下:

1: 直接看IP地址就可以判斷(三層地址)
這是由IP地址的編址規範決定的
IP地址由兩部分組成:網段號, 主機號
同一區域網的主機必須位於同一網段下, 即同一區域網中所有主機的網段號必須相同!
這是規範!!!這是規定!!
因此, 當A看到B的網段號和自己不一樣時, 就直接能斷定B和自己不在同一區域網中。
那麼, A知道不知道B和自己分別處於兩個不同類型的區域網呢?
答案是: 不知道!!!A壓根就不知道!!
且網段號並不是教科書中講的A B C D四類IP地址
現實中A B C D等編址類型很少用到了
大家都直接用地址+掩碼來確定網段號了
比如:1.1.1.1, 掩碼255.255.0.0(或表示為16),
那麼網段號是1.1.0.0, 主機號是0.0.1.1

2: 當判斷出B與自己不在同一個區域網時, A就知道自己已經搞不定這個幀了
這個幀一定要交給某個路由器去轉交
這個路由器就是「網關」
其實就是「路由表項」
記住: 主機中的路由表項「下一跳」所指向的IP地址, 就是網關的IP地址!!
關, 英文為gate, 其實是門的意思
表意為, 一個要送給別人家的數據。 那麼這個數據就一定要跨越一扇門!!這就是你家的門!
而這個組網中的路由器, 直連著一個區域網, 也被稱為網關路由器!!

在每個處於廣域網三層以上的設備上(主機與路由器, 不包括交換機),都有路由表存在。
路由表中存儲的是「網段」與「IP地址」的對應關係, 如:
1.1.0.0/16 &<-----&> 1.1.1.233
這條表項的意思是, 當你構造出一個目的地址網段號為1.1.0.0的IP報文時
請你把這個報文送給IP地址為1.1.1.233的路由器, 讓路由器幫你轉交給收件人。
目的地址為1.1.2.123的報文, 將構造成幀傳遞給1.1.1.233這個路由器
目的地址為1.1.4.111的報文, 也將構造成幀傳遞給1.1.1.233這個路由器

(這段解釋的不太好,我反覆寫了三次都不太好,我再舉例子說明一下)

我們假設A設備的IP地址為1.1.1.111, B設備的IP地址為2.2.2.222
路由器左介面地址為1.1.1.233, 右介面地址為2.2.2.233, 如下圖

A 路由器 B
[1.1.1.111]&<---&>[1.1.1.233 2.2.2.233]&<------&>[2.2.2.222]

IP地址掩碼都是24位, 即A的網段號為1.1.1.0, 主機號111,
B的網段號為2.2.2.0, 主機號為222

當A要發一個數據給B時, 它要構造一下如下的IP報文
[src=1.1.1.111][dst=2.2.2.222][content]
在構造這個報文的時候, A就知道, 2.2.2.222與自己不在同一個區域網中
需要把這個報文給某個網關, 即網關路由器
所以A要去查自己的路由表, 假設A的路由表中有以下兩項(十分簡化, 實際情況並不如此)

目的地址/掩碼 下一跳 出介面
1.1.1.0/24 直連 /
2.2.2.0/24 1.1.1.233 右方介面
0.0.0.0 1.1.1.233 右方介面

通過查看路由表, A知道,
對於網段2.2.2.0/24的目的地址, 要先送給IP地址為1.1.1.233的路由器
且B也符合這個表項, 於是A就準備把這個報文送給路由器, 於是就要構造幀
[macsrc=MAC_A][macdst=?][src=1.1.1.111][dst=2.2.2.222][content]
那麼路由器的二層地址(MAC地址)是多少呢?這個是第三個問題的條案
總之, 這個幀送給了路由器
路由器收到之後, 先把幀頭去掉,還原成IP報文
[src=1.1.1.111][dst=2.2.2.222][content]
之後根據目的IP地址查看自己的路由表項, 可能有一個表項如下:

目的地址/掩碼 下一跳 出介面
2.2.2.0/24 直連 右方介面
於是路由器又重新把這個報文組裝成幀, 如下:
[macsrc=MAC_ROUTE_RIGHT][macdst=?][src=1.1.1.111][dst=2.2.2.222][content]

總之, 最終送給了B

(這道題答的不太好, 希望你能理解)

3: 通過ARP協議獲取同一網段中其它主機的二層地址(MAC地址)

4: 實質上的組網應該是下圖這樣:
5: 注意:
對於路由器而言, 其1.1.1.233介面與2.2.2.233介面都是擁有自己的MAC地址的, 即二層地址
並不是整個路由器有一個MAC地址, 而是一個三層介面就有一個MAC地址!
謹記:路由器解決的最重要的問題其實是異構網路互聯!!
假期B所處的區域網並不是乙太網, 而是另一種二層網路,
那麼2.2.2.233介面的二層地址就是那種特殊網路中的二層地址!

所以, 如果上面你都明白了, 你就應該得出如下結論:

1: 當A與B處於同一個網段時, A與B之間通信其實邏輯上並不需要IP層插手
但即便是這樣, A給B發送數據, 依然要先封裝成IP報文, 再封裝成二層幀
B收到幀後, 還是要先去掉幀頭, 再去掉IP頭, 才能看到數據
之所以這樣脫褲子放屁, 其實是為了網路通信的統一性。

對於傳輸層來講(TCP/UDP協議), 傳輸層看不見二層地址,傳輸層認為地址就是IP地址
傳輸層認為其下是IP層, 再下沒了!基上是應用層, 再上沒了!

應用層認為其下是傳輸層, 再下沒了!!!

所以, 必須使用IP地址!!!至於IP地址在尋路的過程中如何站站換幀頭
對於IP層以上的層次來說, 並不關心, 它們甚至不知道IP層以下還有層!!!

當然, 你自己可以編寫一種特殊的, 只適用於區域網中的通信軟體
直接就把數據封裝在乙太網幀中, 不加IP層頭, 甚至不加傳輸層頭, 可以的!沒問題!!

顯然, 同區域網通信, 與路由器沒關係, 沒卵關係!!!

但是!!與路由表項是有關係的!為什麼呢?
你憑什麼說B和你是同一個區域網的?--&>我查自己的路由表,看到「直連」了

2: 三層及三層以上的設備都有路由表, 即主機有路由表, 路由器也有路由表

來一道練習題:

路由器的介面必須有IP地址, 但交換機的介面並不需要MAC地址, 請問這是為什麼?
(答案在最後)

3、如果是2中所提那樣,我們知道路由器的路由表還有一項是遇到同一網段內內的數據包無須轉發,直接交付?為什麼路由器會收到這種來自同一網段的包?因為同一網段的話A是可以自己獲得B的MAC地址,直接交付,無須通過路由器的?
是的, 你說的沒錯。
路由器的IP地址為1.1.1.233/24的介面, 一般情況下是不應該收到目的IP處於1.1.1.0/24網段的IP報文的。。

除非 。。。。。

路由器本身還是個主機。。。
在這種情況下, 路由器會收到目的IP為1.1.1.233/24, 也就是目的地址為介面自己的IP報文。。
這種情況下,你難道還讓它轉發嗎?不。。直接交付, 交付給自己!

首先, 教科書上的路由器, 似乎只有網路層與之下的層次, 但這實質上是不對的, 是脫離實際的。

真正的實際使用的路由器, 其實就是一台*nix主機。 以思科與華三的設備來說, 搭載的就是*nix操作系統改造版。

實際情況中的網路設備其實相當複雜, 交換機與路由器的界限其實很模糊, 大多數設備既能以交換機的身份工作, 也能以路由器的身份工作, 甚至能一半的介面用來做交換機, 一半的介面用來做路由器。

這種情況下, 網路設備的真機可能處於一個全年365天24小時開關空調的機房, 密密麻麻線纜一大堆, 它本身是一台計算機, 但並沒有配備顯示器。。
這種情況下, 網路管理員需要對這台網路設備進行配置, 需要把某個三層口改為二層口, 我需要開啟ARP防洪泛功能, 這種情況下, 怎麼做?
telnet或ssh遠程登錄。。

telnet和ssh是什麼?應用層協議。。下面是什麼?TCP/UDP, 再下面是什麼?IP。。。

所以嘍。。網路設備自己也是要收發報文的嘍。。。


:

聲明:
1: 能力一般, 水平有限, 有錯誤請指正
2: 答案不可全信, 可作為參考
3: 點贊


主機比你想的蠢一點。
我們通常理解的主機與路由器區別在哪裡?就是主機沒有存放路由表的功能,所以我們要給他設置默認網關,主機所有通信的二層mac地址都是指向網關的mac地址,所以默認網關很重要。找不到網關的mac地址怎麼辦?發arp查詢。作為主機,他能做的就這麼多了。
再來談你的問題,只說路由器這裡。hub,交換機看車小胖的回答,不重複了。
1.如果從第一個包算起,那麼有arp報文,arp協議是連結二層與三層的協議,不能算是完全無關。
2.A不管B是不是和自己一個網段的,只要你發包,二三層源目地址都是(MAC A,網關mac,IP A,IP B),至於有沒有存儲重定向B的MAC,要看路由器有沒有重定向過去。
3.icpm重定向使得路由器不要再處理這些本不需要經過自己的報文,節省了自身的資源。


竟然有20多個回答,大家好熱心。

這裡的核心問題,在於L2廣播域和網段間的對應關係。如果一個網路配置合理,網段和廣播域一致,那麼每個同網段的主機廣播arp請求就能讓所有同網段主機聽到並回答,所以接下來單播就可以成功了。

是不是同網段,通過子網前綴判斷實現,子網前綴則通過子網掩碼獲得。這裡沒有直接寫「同網段只要掩碼算一下就可以了」,是因為子網規劃一定要要合理。不然192.168.0.3%24和192.168.1.3%16怎麼辦。

出現通信兩端子網掩碼長度不一樣的時候,就會發現a把b當朋友而b不把a當朋友。這時就要靠arp proxy解決。這個東東說起來簡單配起來煩,能不用還是別用。如果有vlan攪合進來,就更煩了。煩在第一,出了不通很難調試;第二,冷不丁配出個環路你吃不了兜著走。

再重複一遍:廣播域是arp能執行的基礎。網段和廣播域匹配非常重要。只要廣播域能達,路由器就不需要了,因為吼一嗓子就能聽見還要找快遞么。你找快遞要吼,快遞轉發還要吼,一嗓子能解決的問題,還是不要勞煩快遞哥還要多吼一次啦。

例外就是不對稱掩碼長度,arp proxy,需要l3交換機


你好像不知道arp是什麼東西,了解下網路封包和基本通信過程就沒有這些問題,二層,三層能理的很清


手機簡單回答一下。

不需要路由器,通信通過OSI二層尋路。
也就是說,沒有IP層的東西,自然也就不需要路由器。

完全根據對方電腦的MAC地址進行尋路,你要問同一網段計算機如何發現對方主機?

很簡單,全網廣播一下,利用ARP獲取對方MAC,就可以通信了。


說得簡單一點,兩台電腦不經路由通信有兩方法:
交換機,通過自己手動填入IP和掩碼,讓兩電腦通信。(不需要網關,IP做辨識定位,掩碼區分網段)
網線直連,其中一台做DHCP伺服器(就是電腦自己做路由功能)。


不需要。
如果兩台主機在同一個網段,如果源主機發送數據包給目的主機,IP層在內存中有一個路由表,當IP從某個上層收到這份數據報時,它搜索路由表,如果發現目的IP地址在一個直接相連的網路上,就用ARP協議獲取目的主機的MAC地址,然後在鏈路層作為數據幀被送到目的主機。


1、和路由器無關,電腦也不會把數據包發到路由器上;
2、我個人覺得,你應該是有些過程不太清楚,我看上面已經有人說了,我簡單說下
A在首次發數據包給B時,首先判斷B的IP是否與自己在同一個網段,如果在同一網段,就發arp獲取B的mac地址,然後發包;如果判斷B的IP與自己不在同一網段,則向網關請求ARP,得到網關的MAC地址後,發包給網關,網關負責轉發。這裡的網關通常會是三層交換機或路由器。
那麼A如何判斷B的IP是否和自己同一網段?
首先,A會把B的IP地址與自己的網段做對比,如果在就屬於同一網段,直接發arp找B的mac地址後封裝數據包發給B;如果不在就屬於不同網段,需要發包到網關。
至於A怎麼知道自己的網段應該清楚吧?把IP和掩碼與運算把。
3、不是路由器處理不處理,而是同一網段的數據包不會發給網關處理。


1、這一過程是否完全和路由器無關?僅是二層的事情?
【回答】不一定,你說AB在同網段,如果只是物理上在同一個區域網,在三層(IP層)也可能屬於不同網段。只有在三層也是同網段,才與路由器無關。否則,需要路由器做三層轉發。
2、A是如何知道自己與B在同一網段內的?A自身進行判斷(同一網段的A就自己RAP定址,不是同一網段的就發給路由器)嗎?
【回答】三層配置除了IP地址還有一個子網掩碼(比如255.255.255.0),掩碼為1的位表示是子網ID,為0的位表示是主機ID。在上面那個掩碼下,192.168.1.1和192.168.1.2在同一個三層網段里。而192.168.1.1和192.168.0.1就不在一個三層網段里。A通過自己和B的IP和掩碼,就知道是否在同一個三層網段里。同網段就直接發送,沒有MAC地址就通過ARP獲得。不同網段就發給本機路由指向的路由器。
3、如果是2中所提那樣,我們知道路由器的路由表還有一項是遇到同一網段內內的數據包無須轉發,直接交付?為什麼路由器會收到這種來自同一網段的包?因為同一網段的話A是可以自己獲得B的MAC地址,直接交付,無須通過路由器的?
【回答】如上,同三層網段數據包不會發給路由器。路由器在物理介面上可以有多個虛擬介面來對應不同的三層網段。所以AB主機即使在物理上屬於同一個區域網,邏輯上,卻只能通過路由器的虛擬介面轉發來實現通信。


首先,路由器下面是否有交換機?A,B是否在同一交換機下?在同一交換機下,同一網段沒有作隔離是不用通過路由器,至於同一網段的判斷是由發起通信的主機判斷的


Mark


不需要,改網卡IP和子網掩碼還有網關就可以互相傳輸數據文件什麼的。


不需要的。但是最好不要用直通的網線 就是普通的那種。
網卡連網卡,同層設備最好使用交叉線連接


不需要路由,A:廣播,B單播


地址不跨段的不需要路由。


數據包交換過程你還是想的太複雜了,如果到達二層可以使用MAC來通信則是同網段不需要三層來通信。忽略Router來看HUB或者Swithch也是可以使二者通信的。


手機碼字,簡答。

1,是。
2,每個IP地址都對應一個子網掩碼,和IP地址進行【與】運算就知道網路位長度,可換算出網路地址,從而知道是否在同一網段。
3,不知道你提到的【路由表中的如果同一網段直接交付】是具體在哪裡看到的。就問題而言,同一網段是不經過路由器的,不同的網段交給網關,通過路由器的路由表進行轉發。


來個簡潔的 通過mac地址通信 不需要路由器


同一網段內,本來就是可以直接通信的,不需要路由器進行轉發


路由器工作在第三層,而不是三層協議需要路由器


嚴格遵循問題來回答
1、一般來說,和路由器無關,如果兩台電腦不是直接接在路由器上的話(該接在交換機或是hub上對吧)
2、A電腦不知道B和自己是不是存在於同一網段的,也不需要知道。也就是說,A要和B發起通訊,先是ARP定址,後續的包交換是交換機和路由器的事,電腦不參與不知道。說簡單一點,電腦發一個包出去到它連接的埠,後續他就不管了也管不著。
3、想清楚了問題2也許你就沒有問題3啦
如果交換機地址表有對應地址條目,定址就能完成也就直接轉包了
如果交換機地址表對應地址條目介面(或者說下一跳)是路由器,就轉到路由器
如果交換機上面還是交換機上面還是交換機呢,其實根本就看哪一級交換機的地址表的下一跳是哪的問題了......
不知道有沒有說清楚,不對我再改就是了


推薦閱讀:

假設網路中出現了一個全是FFFF的IP數據包,那這個數據包將會如何被處理?
Websocket需要像TCP Socket那樣進行邏輯數據包的分包與合包嗎?

TAG:路由器 | 區域網 | 計算機網路 | TCPIP | 網路工程 |