關於CSMA/CD的問題?
乙太網採用CSMA/CD 機制,這種衝突檢測方法保證了只能有一個站點在匯流排上傳輸。如果有兩個站點試圖同時訪問匯流排並傳輸數據,這就意味著「衝突」發生了,兩站點都將被告知出錯。然後它們都被拒發,並等待一段時間以備重發。
這裡的站點是什麼,匯流排又是什麼
這種情況會發生在集線器上?
我之所以認為會發生在集線器上,是覺得集線器就是把兩條網線合成一條網線。還有就是它是如何通過什麼進行判斷碰撞衝突的。大神們求解。
題目中「如果有兩個站點試圖同時訪問匯流排並傳輸數據,這就意味著「衝突」發生了,兩站點都將被告知出錯。然後它們都被拒發,並等待一段時間以備重發。」這句話表述存在一點小問題,正確理解為「當兩個Station打算同時發送數據的時候,會發生衝突,此時,兩個設備分別檢測衝突,檢測到衝突的節點會發送Jam信號(一個衝突加強序列)告知其他的節點,並且本地停止發送。等待Backoff時間後,重新嘗試傳輸。」。註:不是集線器發現衝突,而是終端發現衝突。
CSMA/CD最初的場景沒有明確提到集線器,實際上就是一個公共介質(物理上公共的),Ethernet的命名就是承載Ether的介質(這裡Ether是借用曾經被認為是承載電磁波的介質的概念),net就是線纜,所以Ethernet,就成承載Ether的線纜,換言之就是根公共的物理介質。
然後討論兩個問題,1)衝突檢測的方式是什麼,2)為什麼將衝突檢測方式命名為載波檢測,而不直接命名為電壓檢測,載波檢測這個命名容易導致理解的誤差,如果是電壓檢測的話,那麼直接命名為電壓檢測就好了,為啥米要命名為載波檢測。
這兩個問題在《Ethernet: The Definitive Guide》一書都有明確說明。
- For "衝突檢測的方式是什麼", 該書第411頁(原版)。衝突檢測的方式是通過DC信號等級(即電壓)的變化(由於Ethernet直接是基帶傳輸,所以直接可以根據DC電壓判斷)
- For 「為什麼將衝突檢測方式命名為載波檢測,而不直接命名為電壓檢測」,這個是個歷史遺留問題,也就是說這個命名是參考在CSMA/CD之前的研究時,採用的命名了。該書第32頁(原版),實際上這裡是繼承了AM or FM裡面調製信號的說法,即檢測特定頻段有沒有攜帶信號,這個命名另外一個方面是為了通用性(即CSMA/CA和CSMA/CD在不同的介質下,但是都是遵從CSMA這種機制)。不過可能理解一開始就沒那麼直接了。
10月18日更新
匯流排型拓撲結構是這樣的:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
90年代的區域網,用的是匯流排型網路。當年的網卡是這樣的
接頭是這樣的
網線是這樣的
我們用t型接頭從匯流排上連接電腦
現在解釋csma/cd,網卡載波偵聽匯流排狀況,若匯流排空閑,向匯流排發送數據。若匯流排繁忙,則休息一個隨機時間重新偵聽。
後來網路進化成了星型結構,利用集線器將匯流排縮小成了一個點
再後來交換機與網卡全雙工通信,不用載波偵聽,直接把數據發向對方即可,從而有了快速乙太網和10g乙太網
每個發送端都在往匯流排上發數據,發數據實際上就是把匯流排上把電壓抬高降低。如果同時兩個點都在改電壓,會檢測到匯流排上的信號不符合規範(時間寬度電壓高低),所以就是衝突了
看一下這個文章的說明。
CSMA/CD 協議 - 程序園
這種問題,自己google一下就好了。另外現在CSMA/CD已經很少用了,除非網口工作在半雙工模式下。沒必要在這個協議上耗費太多精力。
集線器是把所以埠做一個物理連接,所以一個埠發送的數據各個埠都能夠收到。
衝突檢測的方法是:每個網卡發送跟接收是在同時進行的,當自己發送的數據跟接收到的數據不一致的時候,那就說明別人也在發送。
站點你可以理解為有權利發信號電平的設備。
不但集線器會衝突,交換機也會,交換機在發multicast和broadcast的時候就會衝突,而集線器是只要發包就會衝突
推薦閱讀:
※tcp首部只有埠號沒有ip地址,那麼網路層怎麼知道目的ip地址的呢?
※SCTP同時具有TCP和UDP的優點,但是為什麼應用不廣?
※如何正確關閉 tcp 連接?
※同一網段內的兩台主機通信是否需要路由器?
※假設網路中出現了一個全是FFFF的IP數據包,那這個數據包將會如何被處理?