﻿# 如何在 Windows 與 Linux 變更 Ethernet 網卡速度與雙工設定

最近買了一台國產的網管型 Switch ( 不是 D-Link )，使用與測試了幾個月都沒啥問題，由於我們於 IDC 的機房臨時需要一台網管型 Switch 支援，所以公司的 IT 人員就帶進機房安裝，結果卻發現我們機房裡有兩台比較老的伺服器網路線接上了 Switch 卻沒燈號反應，從伺服器上也是**未連接網路線**的狀態，還好這鬼打牆的問題我之前有聽人家說過，但沒有親身遇到過，人說夜路走多總會遇到鬼，這狀況還是讓我遇到了，最後是變更網卡速度與雙工設定才解決。

**問題描述**

我們有 2 伺服器已經穩定運作 11 年，主機是比較舊沒錯，但從未遇到有 Switch 認不到該伺服器的問題，最近買了台 NSH-2926 24-port Gigabit Ethernet Switch 卻發現連接網路線後彼此找不到對方的情況，也就是線接上後 Switch 的燈號並沒有亮起（代表未連接），而主機上也顯示**網路未連接**的訊息。

換了幾台無論是網管型或一般的 Switch 都沒有匹配的問題，但就只有這台有這問題，而且測了兩台相同型號的 Switch 都一樣，應該是整個系列都一樣。打電話去原廠技術支援中心，原廠說他們也不知道為什麼會這樣，叫我們找代理商處理。打給代理商後，他們說買了超過鑑賞期無法退貨，最多只能減價收購，然後技術問題請找原廠，我們也沒遇過這個問題！ [WTF](http://en.wikipedia.org/wiki/WTF) ~~~~~~

**解決辦法**

我多年前「曾經」聽朋友說過這情況，他說透過手動設定 Switch 上的 Link Speed 與 Duplex 可以解決，我自己是沒有遇過，但這次遇到了接網路線後卻顯示沒有連接的狀況讓我聯想起這個情境，所以就手動調整看看，結果發現單只切換 Switch 上的 Link Speed 與 Duplex 是不夠的，包括主機網卡設定的 Link Speed 與 Duplex 也要一併設定，兩邊才會通！

經測試後發現只有設定為10Mbps / FullDuplex 才能讓兩個端點連通，而我公司這兩台伺服器一台是 Linux、一台是 Windows，所以所幸都將設定過程記錄一下供參考。

**§ 調整 Windows 網卡連接速度設定 ( Link Speed ) 與 雙工設定 ( Duplex ) 的方式**

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/a5f8c3f02456225b9b88-image_1321.png)

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/b5074ecbeb0c5f6842c5-image_1322.png)

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/67a106207613971996c2-image_1323.png) 

**§ 調整 Linux 網卡連接速度設定 ( Link Speed ) 與 雙工設定 ( Duplex ) 的方式**

在 Linux 底下通常都會內建 **[ethtool](https://man7.org/linux/man-pages/man8/ethtool.8.html)** 工具，如果沒有的話也可以另外安裝，在 Ubuntu 下的安裝指令：

```
apt-get install ethtool
```

我們主要有兩個任務必須達成：

1.  關閉網路介面的自動 **Auto-Negotiation** 設定
2.  重新指定網路介面的連接速度

在設定之前，我們先查詢系統裡有幾張網路介面，透過 **ifconfig** 即可查出，如下圖示你可以發現有兩張網路介面，一個是 eth0，另一個是 eth1：

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/d56735eb2dfad09bc466-image_1324.png)

接著就可以用 **[ethtool](https://man7.org/linux/man-pages/man8/ethtool.8.html)** 工具查詢該網路介面的相關參數設定，如下圖是一般網卡在預設情況下的參數，通常 Auto-negotiation 都會開啟，而網路速度通常會依據自動協商與 Switch 匹配的結果呈現，但在我們這次遇到的情況卻是自動協商失敗，以致於兩邊網路完全不通。

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/d26955a45209dcc92b1b-image_1325.png)

接著我們下兩個指令解決此問題：

1\. **關閉**網路介面的自動 **Auto-Negotiation** 設定

```
ethtool -s eth0 autoneg offethtool -s eth1 autoneg off
```

2\. 重新指定網路介面的連接速度為 10Mb/s 與 Full Duplex，其語法如下：

```
ethtool -s eth0 speed 10 duplex fullethtool -s eth1 speed 10 duplex full
```

我們再來看看設定後的結果如下：

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/0da629e08379c5a1074e-image_1326.png)

設定完後約 5 秒左右，Switch 上連接該伺服器的連接埠燈號就會神奇的亮起！

**請注意**：Switch 這端也要一併關閉自動協商(Auto-Negotiation)設定，並指定連接速度為 10Mbps 與 Full Duplex (全雙工) 才行喔！

**相關連結**

-   [How to change Ethernet network card speed and duplex settings in ubuntu](http://www.ubuntugeek.com/how-to-change-ethernet-network-card-speed-and-duplex-settings-in-ubuntu.html)
-   [利用 ethtool 對網卡限速](http://weicheng331.blogspot.com/2010/07/ethtool.html)
-   [ethtool 使用實例](http://blog.linux.org.tw/~jserv/archives/001885.html)
