網絡盛行的年代
嵌入式不再是孤立的設備
物聯網就是要萬物互聯
搞不懂網絡
怎麼成為合格的嵌入式工程師
Linux網絡很強大
從網絡工具到網絡協議
再到防火牆
不鑽研幾年
很難搞懂
網絡一直以來都是面試重點
作為應屆生
雖然不用精通
但起碼得了解
絕對是面試的加分項啊
01 ping
作用
ping [-aAbBdDfhLnOqrRUvV] [-c count] [-F flowlabel] [-i interval] [-I interface] [-l preload] [-m mark] [-M pmtudisc_option] [-N nodeinfo_option] [-w deadline] [-W timeout] [-p pattern] [-Q tos] [-s packetsize] [-S sndbuf] [-t ttl] [-T timestamp option] [hop ...] destination來源:man手冊
ping最常見的用法是:ping [選項] 地址。地址可以是 ip,也可以是域名或者主機名。
比如我們做如下測試:
選項
-c:訪問的次數
-d:使用Socket的SO_DEBUG功能;
-c<完成次數>:設置完成要求回應的次數;
-f:極限檢測;
-i<間隔秒數>:指定收發信息的間隔時間;
-L<網絡界面>:使用指定的網絡界面送出數據包;
-l<前置載入>:設置在送出要求信息之前,先行發出的數據包;
-n:只輸出數值;
-p<範本樣式>:設置填滿數據包的範本樣式;
-q:不顯示指令執行過程,開頭和結尾的相關信息除外;
-r:忽略普通的Routing Table,直接將數據包送到遠端主機上;
-R:記錄路由過程;
-s<數據包大小>:設置數據包的大小;
-v:詳細顯示指令的執行過程;
-t<存活數值>:設置存活數值TTL的大小。
做如下測試:
02 traceroute作用
traceroute命令用於追蹤數據包在網絡上傳輸時的全部路徑,它默認發送的數據包大小是40位元組。
通過 traceroute 我們可以知道信息從你的計算機到網際網路另一端的主機是走的什麼路徑。當然每次數據包由某一同樣的出發點(source)到達某一同樣的目的地(destination)走的路徑可能會不一樣,但基本上來說大部分時候所走的路由是相同的。
traceroute通過發送小的數據包到目的設備直到其返回,來測量其需要多長時間。一條路徑上的每個設備 traceroute 要測3次。輸出結果中包括每次測試的時間(ms)和設備的名稱(如有的話)及其 ip 地址。
traceroute [-46dFITUnreAV] [-f first_ttl] [-g gate,...] [-i device] [-m max_ttl] [-p port] [-s src_addr] [-q nqueries] [-N squeries] [-t tos] [-l flow_label] [-w waittime] [-z sendwait] [-UL] [-D] [-P proto] [--sport=port] [-M method] [-O mod_options] [--mtu] [--back] host [packet_len]來源:man手冊
選項
-d:使用Socket層級的排錯功能;
-f<存活時間>:設置第一個檢測數據包的存活數值TTL的大小;
-F:設置勿離斷位;
-g<網關>:設置來源路由網關,最多可設置8個;
-i<網絡界面>:使用指定的網絡界面送出數據包;
-l:使用ICMP回應取代UDP資料信息;
-m<存活數值>:設置檢測數據包的最大存活數值TTL的大小;
-n:直接使用IP位址而非主機名;
-p<通信埠>:設置UDP傳輸協議的通信埠;
-r:忽略普通的Routing Table,直接將數據包送到遠端主機上;
-s<來源地址>:設置本地主機送出數據包的TOS數值;
-v:詳細顯示指令的執行過程;
-w<超時秒數>:設置等待遠端主機回報的時間;
-x:開啟或關閉數據包的正確性檢驗。
我們做如下測試:
我們可以看到,數據編號從1開始,每個編號表示一跳,即一個網關。可以這麼理解,數據從我的電腦發出,先經過家裡的路由器,算一個網關;再經過小區所在的區域路由器,又是一個網關。一層一層往上發送數據,最終到達百度的伺服器。
每行有三組數據,因為探測包會向每個網關發送三次數據,得到三組返回的時間。有的行全部是星號,可能是因為防火牆的關係,屏蔽了ICMP的返回信息,所以看不到任何數據。
03 telnet
作用
telnet命令用於登錄遠程主機,對遠程主機進行管理。telnet 因為採用明文傳送報文,安全性不好,很多 Linux 伺服器都不開放 telnet 服務,而改用更安全的 ssh 方式了。
語法telnet [-468ELadr] [-S tos] [-b address] [-e escapechar] [-l user] [-n tracefile] [host [port]]-8:允許使用8位字符資料,包括輸入與輸出;
-a:嘗試自動登入遠端系統;
-b<主機別名>:使用別名指定遠端主機名稱;
-c:不讀取用戶專屬目錄裡的.telnetrc文件;
-d:啟動排錯模式;
-e<脫離字符>:設置脫離字符;
-E:濾除脫離字符;
-f:此參數的效果和指定」-F」參數相同;
-F:使用Kerberos V5認證時,加上此參數可把本地主機的認證數據上傳到遠端主機;
-k<域名>:使用Kerberos認證時,加上此參數讓遠端主機採用指定的領域名,而非該主機的域名;
-K:不自動登入遠端主機;
-l<用戶名稱>:指定要登入遠端主機的用戶名稱;
-L:允許輸出8位字符資料;
-n<記錄文件>:指定文件記錄相關信息;
-r:使用類似rlogin指令的用戶界面;
-S<服務類型>:設置telnet連線所需的ip TOS信息;
-x:假設主機有支持數據加密的功能,就使用它;
-X<認證形態>:關閉指定的認證形態。
netstat命令用於顯示與 IP、TCP、UDP 和 ICMP協議相關的統計數據,一般用於檢驗本機各埠的網絡連接情況。netstat 是在內核中訪問網絡及相關信息的程序,它能提供 TCP 連接,TCP 和 UDP 監聽,進程內存管理的相關報告。netstat [address_family_options] [--tcp|-t] [--udp|-u] [--raw|-w] [--listening|-l] [--all|-a] [--numeric|-n] [--numeric-hosts] [--numeric-ports] [--numeric-users] [--symbolic|-N] [--extend|-e[--extend|-e]] [--timers|-o] [--program|-p] [--verbose|-v] [--continuous|-c]
netstat {--route|-r} [address_family_options] [--extend|-e[--extend|-e]] [--verbose|-v] [--numeric|-n] [--numeric-hosts] [--numeric-ports] [--numeric-users] [--continuous|-c]
netstat {--interfaces|-i} [--all|-a] [--extend|-e[--extend|-e]] [--verbose|-v] [--program|-p] [--numeric|-n] [--numeric-hosts] [--numeric-ports] [--numeric-users] [--continuous|-c]
netstat {--groups|-g} [--numeric|-n] [--numeric-hosts] [--numeric-ports] [--numeric-users] [--continuous|-c]
netstat {--masquerade|-M} [--extend|-e] [--numeric|-n] [--numeric-hosts] [--numeric-ports] [--numeric-users] [--continuous|-c]
netstat {--statistics|-s} [--tcp|-t] [--udp|-u] [--raw|-w]
netstat {--version|-V}
netstat {--help|-h}
address_family_options:
[-4] [-6] [--protocol={inet,unix,ipx,ax25,netrom,ddp}[,...]] [--unix|-x] [--inet|--ip] [--ax25] [--ipx] [--netrom] [--ddp]來源:man手冊
選項
-a:顯示所有連線中的Socket;
-A<網絡類型>:列出該網絡類型連線中的相關地址;
-c:持續列出網絡狀態;
-C:顯示路由器配置的快取信息;
-e:顯示網絡其他相關信息;
-F:顯示FIB;
-g:顯示多重廣播功能群組組員名單;
-h:在線幫助;
-i:顯示網絡界面信息表單;
-l:顯示監控中的伺服器的Socket;
-M:顯示偽裝的網絡連線;
-n:直接使用ip地址,而不通過域名伺服器;
-N:顯示網絡硬體外圍設備的符號連接名稱;
-o:顯示計時器;
-p:顯示正在使用Socket的程序識別碼和程序名稱;
-r:顯示Routing Table;
-s:顯示網絡工作信息統計表;
-t:顯示TCP傳輸協議的連線狀況;
-u:顯示UDP傳輸協議的連線狀況;
-v:顯示指令執行過程;
-V:顯示版本信息;
-w:顯示RAW傳輸協議的連線狀況;
-x:此參數的效果和指定」-A unix」參數相同;
–ip:此參數的效果和指定」-A inet」參數相同
從整體上看,netstat的輸出結果可以分為兩個部分:
一個是Active Internet connections,稱為有源TCP連接,其中"Recv-Q"和"Send-Q"指的是接收隊列和發送隊列。這些數字一般都應該是0。如果不是則表示軟體包正在隊列中堆積。這種情況只能在非常少的情況見到。
另一個是Active UNIX domain sockets,稱為有源Unix域套接口(和網絡套接字一樣,但是只能用於本機通信,性能可以提高一倍)。Proto顯示連接使用的協議,RefCnt表示連接到本套接口上的進程號,Types顯示套接口的類型,State顯示套接口當前的狀態,Path表示連接到套接口的其它進程使用的路徑名。
LISTEN:偵聽來自遠方的TCP埠的連接請求;
SYN-SENT:在發送連接請求後等待匹配的連接請求(如果有大量這樣的狀態包,檢查是否中招了);
SYN-RECEIVED:在收到和發送一個連接請求後等待對方對連接請求的確認(如有大量此狀態,估計被flood攻擊了);
ESTABLISHED:代表一個打開的連接;
FIN-WAIT-1:等待遠程TCP連接中斷請求,或先前的連接中斷請求的確認;
FIN-WAIT-2:從遠程TCP等待連接中斷請求;
CLOSE-WAIT:等待從本地用戶發來的連接中斷請求;
CLOSING:等待遠程TCP對連接中斷的確認;
LAST-ACK:等待原來的發向遠程TCP的連接中斷請求的確認(不是什麼好東西,此項出現,檢查是否被攻擊);
TIME-WAIT:等待足夠的時間以確保遠程TCP接收到連接中斷請求的確認;
CLOSED:沒有任何連接狀態。
常見用法
05 ifconfig
ifconfig命令被用於配置和顯示Linux內核中網絡接口的網絡參數。用ifconfig命令配置的網卡信息,在網卡重啟後機器重啟後,配置就不存在。要想將上述的配置信息永遠的存的電腦裡,那就要修改網卡的配置文件了。
ifconfig [-v] [-a] [-s] [interface]ifconfig [-v] interface [aftype] options | address ...
顯示所有網卡信息
操作指定網卡
route命令用於顯示和操作 IP 路由表。
要實現兩個不同的子網之間的通信,需要一臺連接兩個網絡的路由器,或者同時位於兩個網絡的網關來實現。在Linux系統中,設置路由通常是為了解決以下問題:該 Linux 系統在一個區域網中,區域網中有一個網關,能夠讓 Linux 訪問 Internet,那麼就需要將網關的 IP 地址設置為 Linux 機器的默認路由。要注意的是,直接在命令行下執行 route 命令來添加路由,不會永久保存,當網卡重啟或者機器重啟之後,該路由就失效了;要想永久保存,可以保存到配置文件。
Linux 默認只支持一條默認路由,當重新啟動網口時,會把其他默認路由去掉,只剩下一條該網口生成的默認路由。當然可以通過 route 命令手動添加多條默認路由,如果多條路由一樣,則選擇最開始找到的路由(排在前面的路由)。
route [-CFvnee]
route [-v] [-A family] add [-net|-host] target [netmask Nm] [gw Gw] [metric N] [mss M] [window W] [irtt I] [reject] [mod] [dyn] [reinstate] [[dev] If]
route [-v] [-A family] del [-net|-host] target [gw Gw] [netmask Nm] [metric N] [[dev] If]
route [-V] [--version] [-h] [--help]查看路由信息
Destination:目標網絡或者目標主機。Destination為default(0.0.0.0)時,表示這是默認網關,所有數據都發到這個網關。
Gateway:網關地址。0.0.0.0 表示當前記錄對應的 Destination 跟本機在同一個網段,通信時不需要經過網關。
Genmask:Destination 欄位的網絡掩碼,Destination 是主機時需要設為 255.255.255.255,是默認路由時會設置為 0.0.0.0。
Flags:標記。U 該路由可以使用;G 該路由是到一個網關;R 恢復動態路由產生的表項;D 該路由是由改變路由(redirect)報文創建的;M 該路由已被改變路由報文修改;!這個路由將不會被接受。
Metric:路由距離,到達指定網絡所需的中轉數,是大型區域網和廣域網設置所必需的。
Ref:路由項引用次數 。
Use:此路由項被路由軟體查找的次數。
Iface:網卡名字,例如 eth0。
route del default gw 192.168.1.1添加默認網關
route add default gw 192.168.1.1brctl用於在 Linux 內核中設置、維護和檢查乙太網橋配置。
乙太網橋通常用於將不同的乙太網網絡連接在一起,因此這些乙太網將作為網絡的參與者出現。
連接的每個乙太網都對應網橋中的一個物理接口。這些單獨的乙太網被捆綁進一個更大的(「邏輯」)乙太網。
brctl addbr br0 brctl addif br0 eth0 ifconfig br0 192.168.1.1 brctl show brctl delif br0 eth0 brctl delbr br0 ARP是一個重要的 TCP/IP 協議,並且用於確定對應 IP 地址的網卡物理地址。使用 arp 命令,我們能夠查看本地計算機或另一臺計算機的 ARP 高速緩存中的當前內容。此外,使用 arp 命令,也可以用人工方式輸入靜態的網卡物理/IP位址對,我們可能會使用這種方式為預設網關和本地伺服器等常用主機進行這項操作,有助於減少網絡上的信息量。arp [-vn] [-H type] [-i if] [-a] [hostname]
arp [-v] [-i if] -d hostname [pub]
arp [-v] [-H type] [-i if] -s hostname hw_addr [temp]
arp [-v] [-H type] [-i if] -s hostname hw_addr [netmask nm] pub
arp [-v] [-H type] [-i if] -Ds hostname ifname [netmask nm] pub
arp [-vnD] [-H type] [-i if] -f [filename]-a<主機>:顯示arp緩衝區的所有條目;
-H<地址類型>:指定arp指令使用的地址類型;
-d<主機>:從arp緩衝區中刪除指定主機的arp條目;
-D:使用指定接口的硬體地址;
-e:以Linux的顯示風格顯示arp緩衝區中的條目;
-i<接口>:指定要操作arp緩衝區的網絡接口;
-s<主機><硬體地址>:設置指定主機的IP位址與MAC地址的靜態映射;
-n:以數字方式顯示arp緩衝區中的條目;
-v:顯示詳細的arp緩衝區條目,包括緩衝區條目的統計信息;
-f<文件>:設置主機的IP位址與MAC地址的靜態映射。
顯示arp緩衝區所有條目
清空arp緩衝區
host命令是常用的分析域名查詢工具,可以檢測域名系統工作是否正常。
host [-aCdlnrsTwv] [-c class] [-N ndots] [-R number] [-t type] [-W wait] [-m flag] [-4] [-6] [-v] [-V] {name} [server]常見用法
10 tcpdump
作用
tcpdump命令是一款抓取數據包的工具,它可以列印所有經過網絡接口的數據包的頭信息,也可以使用 -w 選項將數據包保存到文件中,方便以後分析。tcpdump [ -AbdDefhHIJKlLnNOpqStuUvxX# ] [ -B buffer_size ] [ -c count ] [ -C file_size ] [ -G rotate_seconds ] [ -F file ] [ -i interface ] [ -j tstamp_type ] [ -m module ] [ -M secret ] [ --number ] [ -Q in|out|inout ] [ -r file ] [ -V file ] [ -s snaplen ] [ -T type ] [ -w file ] [ -W filecount ] [ -E spi@ipaddr algo:secret,... ] [ -y datalinktype ] [ -z postrotate-command ] [ -Z user ] [ --time-stamp-precision=tstamp_precision ] [ --immediate-mode ] [ --version ] [ expression ]選項
-a:嘗試將網絡和廣播地址轉換成名稱;
-c<數據包數目>:收到指定的數據包數目後,就停止進行傾倒操作;
-d:把編譯過的數據包編碼轉換成可閱讀的格式,並傾倒到標準輸出;
-dd:把編譯過的數據包編碼轉換成C語言的格式,並傾倒到標準輸出;
-ddd:把編譯過的數據包編碼轉換成十進位數字的格式,並傾倒到標準輸出;
-e:在每列傾倒資料上顯示連接層級的文件頭;
-f:用數字顯示網際網絡地址;
-F<表達文件>:指定內含表達方式的文件;
-i<網絡界面>:使用指定的網絡截面送出數據包;
-l:使用標準輸出列的緩衝區;
-n:不把主機的網絡地址轉換成名字;
-N:不列出域名;
-O:不將數據包編碼最佳化;
-p:不讓網絡界面進入混雜模式;
-q :快速輸出,僅列出少數的傳輸協議信息;
-r<數據包文件>:從指定的文件讀取數據包數據;
-s<數據包大小>:設置每個數據包的大小;
-S:用絕對而非相對數值列出TCP關聯數;
-t:在每列傾倒資料上不顯示時間戳記;
-tt:在每列傾倒資料上顯示未經格式化的時間戳記;
-T<數據包類型>:強制將表達方式所指定的數據包轉譯成設置的數據包類型;
-v:詳細顯示指令執行過程;
-vv:更詳細顯示指令執行過程;
-x:用十六進位字碼列出數據包資料;
-w<數據包文件>:把數據包數據寫入指定的文件。
監聽eth0接口