ifconfig查詢結果解析
# 設置網卡最大傳輸單元
ifconfig eth0 mtu 1500
ethtool ens33 # 查看網卡是千兆還萬兆網卡
# 編輯網卡的傳輸單元:
ifconfig ens33 mtu 9000 # 命令行
或者:
編輯/etc/rc.d/rc.loacal文件
ifconfig ens33 mtu 9000
chmod +x /etc/rc.d/rc.local
ifconfig eth0 promisc # 開啟混雜模式 在局域網內發送的數據包發現目標主機不是自己,會將這個包丟掉,但是開啟混雜模式,不管局域網內發的數據包是不是自己主機的,都會接收。通常在抓包的時候可以開啟
ifconfig eth0 -promisc # 關閉混雜模式
ifconfig ens33 multicast
ifconfig ens33 -multicast #
ifconfig eth0 allmulti # 開啟
ifconfig eth0 -allmulti # 關閉
# 添加、刪除ipv6地址
ifconfig eth0 add 3ffe:3240:800
ifconfig eth0 del 3ffe:3240:800
解決網卡丟包問題
CRC:
CRC即循環冗余校驗碼(Cyclic Redundancy Check):是數據通信領域中最常用的一種查錯校驗碼,其特征是信息字段和校驗字段的長度可以任意選定。循環冗余檢查(CRC)是一種數據傳輸檢錯功能,對數據進行多項式計算,並將得到的結果附在幀的后面,接收設備也執行類似的算法,以保證數據傳輸的正確性和完整性
# 網卡工作原理
網卡發包:
1.ip包+14個字節的mac頭變成數據幀frame
2.frame拷貝到網卡芯片內部的緩沖區,由網卡處理
3.網卡芯片為frame添加頭部同步信息和CRC校驗,此時才是真正可以發送的packet,然后發送該packet
網卡收包:
1.網絡包packet到達網卡,網卡先檢查包packet的CRC校驗,保證其完整性和正確性,然后去掉他的頭得到frame
2.網卡將frame拷貝到網卡內部的FIFO緩沖區
3.網卡驅動程序產生硬件中斷,把frame從網卡拷貝到內存中,接下來就交給內核處理
網卡丟包:
內核通常需要快速的拷貝網絡數據包到系統內存
因為網卡上接收網絡數據包的緩存大小固定,而且相比系統內存也要小得多。
所以上述拷貝動作一旦被延遲,必然造成網卡FIFO緩存溢出,進入的數據包沾滿了網卡的緩存,后續的包只能被丟棄,這也應該就是ifcofing里的oberrun的來源。
ethtool -g ens33 # 查看收發包緩沖區大小
ethtool -G ens33 rx 2048 # 設定收發包緩沖區的大小
mii-tool ens33
ens33: negotiated 1000baseT-FD flow-control, link ok
丟包問題解決:
# 丟包排查
網卡工作在數據鏈路層,數據量鏈路層會做一些校驗,封裝成幀,我們可以查看校驗是否出錯,確定傳輸是否存在問題,然后從軟件層面,是否因為緩沖區太小丟包。
#1.先查看硬件情況
一台機器經常收到丟包的報警,先看看最底層的有沒有問題:
#1.1 查看工作模式是否正常
ethtool ens33 | egrep 'Speed|Duplex'
Speed:100Mb/s
Duplex:Full
#1.2查看CRC校驗是否正常
ethtool -S ens33 | grep crc # crc錯誤值大通常是因為服務器外部的網絡環境有問題導致的
rx_crc-errors:0
-------Speed,Duplex,CRC之類的都沒問題,基本可以排除物理層面的干擾--------
路由管理
一台Linux主機能夠被當成路由器用的三大前提:
1.至少由兩塊網卡分別連接兩個不同的網段
2.開啟路由轉發功能
echo 1> /proc/sys/net/ipv4/ip_forward
3.在Linux主機上添加正確的路由規則/策略
route
其他主機若想要撒謊給你書Linux主機幫自己轉發數據包,必須將自己的gw指定成上述linux主機的ip
網關/路由
Linux上分為3中路由:
主機路由:掩碼位32位,Destination精確到某一台主機,所以主機路由是直接指明到某台主機怎么走,主機路由也就是所謂的靜態路由
網絡路由:掩碼小於32位,Destination精確到某一個網段的主機,所以網絡路由知名到某類網絡怎么走
默認路由:掩碼通常位0,不走主機路由的和網絡路由的、全部都走默認路由。操作系統上設置的默認路由一般也成為網關。
路由時卻分優先級的:若Linux上到某主機由多條路由可以選擇,這時候會挑選優先級高的路由
大前提:
主機范圍越小、越精確、優先級越高,而縮小主機范圍的恰恰就是子網掩碼,掩碼越長范圍越小,越精確、優先級越高
優先級區分:
# 1.在Linux中,路由條目的優先級確定方式是先匹配掩碼位長度,掩碼越長的優先級越高
也就是說,掩碼為長的路由條目優先級一定比掩碼位短的優先級高,所以主機路由的優先級最高,然后是直連網絡(即同網段)的路由(也算是網絡路由)次之,再是網絡路由,最后才是默認路由即網關。
# 2.若路由條目的掩碼長度相同,則比較節點之間的管理距離(比如metric),管理距離短的 生效。
eg:在本機上查看到的路由表如下:
route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 100 0 0 ens33
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
192.168.1.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
對於Flags列,如果沒有安裝路由軟件,則只可能出現下面的3中值:
U(route is up)
H (target is a host)
G (use gateway,也即是設置了下一跳的路由條目)
Iface 從那塊網卡出去
若要管理路由表,則使用add或del選項。
route [add/del] [-host/-net/default] [address[/mask]] [netmask] [gw] [dev]
選項說明:
add/del:增加或刪除路由條目
-net:增加或刪除的是一條網絡路由
-host:增加或刪除的是一條主機路由
default:增加或刪除的是一條默認路由
netmask:明確使用netmask關鍵字指定掩碼,要可以不使用該選項直接在地址上使用cidr格式的掩碼,即IP/MASK.
gw:指定嚇一跳的地址,要求嚇一跳地址必須是能到達的,且一般是和本網段直連的接口。
dev:強制將路由條目關聯到指定的接口上。一般內核會自動判斷路由條目應該關聯到哪個網絡接口。
# route 命令添加的多少臨時生效
(1)添加和刪除默認路由
route add default gw 192.168.100.10
route add -net 0.0.0.0/0 gw 網關地址 # 同上
route del default
route del default gw 192.168.100.10 # 若有多條默認路由,則再加上gw即可唯一刪除指定條目
因為默認路由的目的地是0.0.0.0,所以操作默認路由也可以使用0.0.0.0替代default關鍵字,但這樣就麻煩的多了,還是用default會簡單一點。
(2)添加和刪除網絡路由
route add -net 172.16.10.0/24 gw 192.168.100.70
route add -net 172.16.10.0 netmask 255.255.255.0 gw 192.168.100.70
若是在不知道嚇一跳是誰,那么指定本機接口也是可以的。
route add -net 172.16.10.0/24 dev eth0
route add -net 2.2.2.0/24 dev ens33
route add -net 0.0.0.0/0 gw 192.168.1.1
route del 2.2.2.0/24
刪除路由可以直接在增加路由的語句上將add改為del關鍵字。如:
(2)添加和刪除主機路由
route add -host 1.1.1.10/32 dev ens33
route del -host 1.1.1.10/32 # 不需要指定網卡設別
配置永久路由
根據接口創建路由配置文件/etc/sysconfig/network-scripts/route-ethX,要從哪個皆苦出去X就是幾。
路由配置文件的配置格式非常簡單,每一行一個路由條目,先是要到達的目標,然后是via關鍵字,最后是嚇一跳地址。喲啊求下一跳必須能到達,且一般都和ethX同網段。
格式:
DEST via nexthop
例如eth0網卡的IP地址是192.168.10.123,要通過網卡eth0出去到達10.0.0.10,那么下一跳的地址要和eth0的地址在同網段,如192.168.10.222.
10.0.0.0 via 192.168.10.222
添加主機路由、默認路由、網段路由示例如下,其中dev是可以省略的,因為沒有任何用處,配置在哪個eth文件中就會從哪個接口出去。
# 默認路由
default via 192.168.100.1
1.1.
0.0.0.0/0 via 192.168.100.1
# 網段路由
192.168.10.0/24 via 192.168.100.1
# 主機路由
192.168.100.52/32 via 192.168.100.33 dev eth1
配置完成后,重啟network服務即可立即生效。
route-ethX文件的還有另外一種永久路由的配置寫法,但上面的方法更簡單快捷,所以此處就不多說
配置永久路由時,需要注意幾點:
(1)route-ethX的對應網卡配置文件ifcfg-ethX必須存在,否則路由無效(注意:對於虛擬機,通常新添加的網卡都沒有對應的ifcfg-ethX文件,但ifconfig卻能找到該網卡)
(2)如果在文件中配置永久默認路由,則必須保證所有使用了DHCP服務的網卡配置文件ifcfg-ethX中的DEFROUTE指令設置為“no”,表示DHCP不設置默認路由。
(3)如果route-ethX文件中配置永久路由,且該網卡使用了DHCP服務分配地址,則必須保證該網卡的ifcfg-ethX文件中的PEERROUTES指令設置為“no”,表示DHCP設置的路由允許被覆蓋。
setenforce 0 # 關閉防火牆
iptables _F # 清空路由表
詳見此文:路由詳解