<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # 練習 24:接口配置,`ifconfig`,`netstat`,`iproute2`,`ss`,`route` > 原文:[Exercise 24. Networking: interface configuration, ifconfig, netstat, iproute2, ss, route](https://archive.fo/JzBji) > 譯者:[飛龍](https://github.com/wizardforcel) > 協議:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/) > 自豪地采用[谷歌翻譯](https://translate.google.cn/) 這個練習對于你來說是一個很大的信息量,如果你不熟悉網絡,這就是一個傷害。如果你感到非常失落,請立即跳到“這樣做”的部分,并完成它。為了正確理解這部分,你至少應該非常熟悉網絡的以下基本概念: + [通信協議](http://en.wikipedia.org/wiki/Communications_protocol) - 通信協議,就是數字消息格式和規則的系統,用于在計算系統或在電子通訊中交換那些消息。 + [以太網](http://en.wikipedia.org/wiki/Ethernet) - 用于局域網(LAN)的計算機網絡技術族。 + [MAC 地址](http://en.wikipedia.org/wiki/MAC_address) - 分配給物理網段上通信的網絡接口的唯一標識符。例如:` 08:00:27:d4:45:68`。 + [TCP/IP](http://en.wikipedia.org/wiki/Internet_protocol_suite) - 互聯網協議套件是一組通信協議,用于互聯網和類似網絡,通常是廣域網最流行的協議棧。它通常被稱為 TCP/IP,由于其最重要的協議:傳輸控制協議(TCP)和互聯網協議(IP) + [IP](http://en.wikipedia.org/wiki/Internet_Protocol) - 互聯網協議(IP)是主要通信協議,用于跨互聯網絡中繼轉發數據報(也稱為網絡封包)。 + [IP 地址](http://en.wikipedia.org/wiki/IP_address) - 互聯網協議地址。示例:`10.0.2.15` + [端口](http://en.wikipedia.org/wiki/Port_(computer_networking)) - 應用特定或流程特定的軟件結構,在計算機的主機操作系統中用作通信端點。示例:`22` + [網絡套接字](http://en.wikipedia.org/wiki/Network_socket) - 跨計算機網絡的,進程間通信流的端點。今天,大多數計算機之間的通信基于互聯網協議;因此大多數網絡套接字都是互聯網套接字。 + 本地套接字地址 - 本地 IP 地址和端口號,例如:`10.0.2.15:22`。 + 遠程套接字地址 - 遠程 IP 地址和端口號,僅適用于已建立的 TCP 套接字。示例:`10.0.2.2:52173`。 + [套接字對](http://en.wikipedia.org/wiki/Network_socket%23Socket_pairs) - 溝通本地和遠程套接字,只有 TCP 協議。示例:`(10.0.2.15:22, 10.0.2.2:52173)`。 + [子網掩碼](http://en.wikipedia.org/wiki/Subnetwork) - 邏輯可見的 IP 網絡細分。示例:`/24`或另一個記號`255.255.255.0`。 + [路由](http://en.wikipedia.org/wiki/Routing) - 在網絡中選擇路徑,來發送網絡流量的過程。 + [默認網關](http://en.wikipedia.org/wiki/Default_gateway) - 在計算機網絡中,網關是一個 TCP/IP 網絡上的節點(路由器),作為另一個網絡的接入點。默認網關是計算機網絡上的節點,當 IP 地址與路由表中的任何其他路由不匹配時,網絡軟件使用它。示例:`10.0.2.2`。 + [廣播地址](http://en.wikipedia.org/wiki/Broadcast_address) - 邏輯地址,其中連接到多重訪問的網絡的設備能接收數據報。發給廣播地址的消息,通常會由所有附加到網絡的主機接收,而不是特定主機。示例:`10.0.2.255`。 + [ICMP](http://en.wikipedia.org/wiki/Internet_Control_Message_Protocol) - 互聯網消息控制協議,示例用法:`ping 10.0.2.2`。 + [TCP](http://en.wikipedia.org/wiki/Transmission_Control_Protocol) - 傳輸控制協議。在數據交換之前建立連接,因此設計上可靠。示例:SSH, HTTP。 + [UDP](http://en.wikipedia.org/wiki/User_Datagram_Protocol) - 用戶數據報協議。傳輸數據而不建立連接,因此設計上不可靠。示例:DNS。 如果你對某些概念不熟悉,不用擔心。 + 閱讀相應的維基百科文章,直到你至少充分理解(但是深入鉆研當然更好)。 + 觀看 <http://www.visualland.net.cn/> 的視頻: + 展開站點左側的 IP 地址樹節點,并通過它來以你的方式實現。 + 展開 TCP 樹節點并執行相同操作。 + 閱讀 [Linux 網絡概念介紹](http://www.iptables.org/documentation/HOWTO//networking-concepts-HOWTO-3.html%23ss3.1)。這本指南很好,因為它甚至承認 互聯網是為情欲而生的。 讓我們繼續。這是 Linux 網絡相關的命令列表: + `ifconfig` - 配置和查看網絡接口的狀態。 + `netstat` - 打印網絡連接,路由表,接口統計信息,偽裝連接和組播成員資格。 + `ip` - 顯示/操做路由,設備,策略和隧道。 + `ss` - 調查套接字的另一個實用程序。 現在讓我們來看看每個命令可以告訴我們什么信息。我們將從`ifconfig`開始。 ``` user1@vm1:~$ sudo ifconfig eth0 Link encap:Ethernet HWaddr 08:00:27:d4:45:68 # (1), (2), (3) inet addr:10.0.2.15 Bcast:10.0.2.255 Mask:255.255.255.0 # (4), (5), (6), (7) inet6 addr: fe80::a00:27ff:fed4:4568/64 Scope:Link # (8), (9), (10) UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 # (11), (12), (13), (14), (15), (16) RX packets:35033 errors:0 dropped:0 overruns:0 frame:0 # (17), (18), (19), (20), (21), (22) TX packets:28590 errors:0 dropped:0 overruns:0 carrier:0 # (23), (24), (25), (26), (27), (28) collisions:0 txqueuelen:1000 # (29), (30) RX bytes:6360747 (6.0 MiB) TX bytes:21721365 (20.7 MiB) # (31), (32) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:8 errors:0 dropped:0 overruns:0 frame:0 TX packets:8 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:560 (560.0 B) TX bytes:560 (560.0 B) ``` 我們可以看到`vm1`中有兩個網絡接口,`eth0`和`lo`。`lo`是一個回送 接口,用于連接同一臺機器上的客戶端-服務器程序。 讓我們看看我們在`eth0`上有哪些信息,它是一個 VirtualBox 的偽網絡接口: | 字段 | 描述 | 字段 | 描述 | | --- | --- | --- | --- | | (1) Link | 物理選項 | (17) RX | 接收(縮寫) | | (2) encap | 封裝類型 | (18) packets | 封包總數 | | (3) Hwaddr | MAC 地址 | (19) errors | 錯誤的數據包總數 | | (4) inet | 地址族(IPv4) | (20) dropped | 丟棄的封包(低系統內存?) | | (5) addr | IPv4 地址 | (21) overruns | 比處理速度快的封包 | | (6) Bcast | 廣播地址 | (22) frame | 接收的無效的幀 | | (7) Mask | 網絡掩碼 | (23) TX | 傳輸(縮寫) | | (8) inet6 | 地址族(IPv6) | (24) packets | 封包總數 | | (9) addr | IPv6 地址 | (25) errors | 錯誤的數據包總數 | | (10) Scope | 地址范圍(主機,鏈路,全局) | (26) dropped | 丟棄的封包(低系統內存?) | | (11) UP | 接口功能正常 | (27) overruns | 比處理速度快的封包(我不確定) | | (12) BROADCAST | 它可以一次性向所有主機發送流量 | (28) carrier | 鏈路載波丟失 | | (13) RUNNING | 它準備好接受數據(我不確定) | (29) collisions | 發生了包裝碰撞 | | (14) MULTICAST | 它可以發送和接收組播封包 | (30) txqueuelen | 傳出數據包的轉發隊列長度 | | (15) MTU | 其最大傳輸單位 | (31) RX bytes | 收到的字節總數 | | (16) Metric | 路由開銷(在 Linux 中未使用) | (32) TX bytes | 發送的字節總數 | 這確實很多。但是同樣,現在的重要字段是: + (5) `addr` - IPv4地址。 + (6) `Bcast` - 廣播地址。 + (7) `Mask ` - 網絡掩碼。 + (11) `UP` - 接口正常工作。 + (13) `RUNNING` - 準備好接受數據。 + (19) `errors` 和 (25) `errors` - 如果在這里有不為零的東西,我們就有問題了。 現在讓我們看看`netstat`能給我們看的東西。 ``` user1@vm1:~$ sudo netstat -ap Active Internet connections (servers and established) #(1) (2) (3) (4) (5) (6) (7) Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 *:sunrpc *:* LISTEN 580/portmap tcp 0 0 *:ssh *:* LISTEN 900/sshd tcp 0 0 localhost:smtp *:* LISTEN 1111/exim4 tcp 0 0 *:36286 *:* LISTEN 610/rpc.statd tcp 0 0 10.0.2.15:ssh 10.0.2.2:52191 ESTABLISHED 12023/sshd: user1 [ tcp 0 0 10.0.2.15:ssh 10.0.2.2:48663 ESTABLISHED 11792/sshd: user1 [ tcp6 0 0 [::]:ssh [::]:* LISTEN 900/sshd tcp6 0 0 ip6-localhost:smtp [::]:* LISTEN 1111/exim4 udp 0 0 *:bootpc *:* 843/dhclient udp 0 0 *:sunrpc *:* 580/portmap udp 0 0 *:52104 *:* 610/rpc.statd udp 0 0 *:786 *:* 610/rpc.statd #(8) (9) (10) (11) (12) (13) (14) (15) Active UNIX domain sockets (servers and established) Proto RefCnt Flags Type State I-Node PID/Program name Path unix 2 [ ACC ] STREAM LISTENING 3452 786/acpid /var/run/acpid.socket unix 6 [ ] DGRAM 3407 751/rsyslogd /dev/log unix 2 [ ] DGRAM 1940 214/udevd @/org/kernel/udev/udevd unix 2 [ ] DGRAM 88528 30939/sudo unix 3 [ ] STREAM CONNECTED 68565 12023/sshd: user1 [ unix 3 [ ] STREAM CONNECTED 68564 12026/1 unix 2 [ ] DGRAM 68563 12023/sshd: user1 [ unix 3 [ ] STREAM CONNECTED 66682 11792/sshd: user1 [ unix 3 [ ] STREAM CONNECTED 66681 11794/0 unix 2 [ ] DGRAM 66680 11792/sshd: user1 [ unix 2 [ ] DGRAM 3465 843/dhclient unix 2 [ ] DGRAM 3448 786/acpid unix 3 [ ] DGRAM 1945 214/udevd unix 3 [ ] DGRAM 1944 214/udevd ``` 我使用兩個參數來修改`netstat`輸出。`-a`參數告訴`netstat`來顯示所有的連接,包括建立的,例如你當前正在打字的`ssh`會話,以及監聽的,例如等待新的連接的`sshd`守護進程。`-p`告訴`netstat`來顯示哪個程序擁有每個連接。 | 活動互聯網連接(服務器和已建立) | | | --- | --- | | 字段 | 描述 | | (1) Proto | 套接字使用的協議(tcp,udp,raw) | | (2) Recv-Q | 連接到此套接字的用戶程序的未復制的字節數 | | (3) Send-Q | 遠程主機未確認的字節數 | | (4) Local Address | 套接字的本端的地址和端口號。 | | (5) Foreign Address | 套接字遠端的地址和端口號。 | | (6) State | `ESTABLISHED`, `SYN_SENT`, `SYN_RECV`, `FIN_WAIT1`, `FIN_WAIT2`, `TIME_WAIT`, `CLOSE`, `CLOSE_WAIT`, `LAST_ACK`, `LISTEN`, `CLOSING`, `UNKNOWN` | | (7) PID | 擁有套接字的進程的進程 ID(PID)和進程名稱的斜杠對。 | | 活動 UNIX 域套接字(服務器和已建立) | | 字段 | 描述 | | (8) Proto | 套接字使用的協議(通常為 unix)。 | | (9) RefCnt | 引用計數(即附加到此套接字的進程)。 | | (10) Flags | 顯示的標志是`SO_ACCEPTON`(顯示為`ACC`),`SO_WAITDATA`(`W`)或`SO_NOSPACE`(`N`)。 | | (11) Type | `SOCK_DGRAM`, `SOCK_STREAM`, `SOCK_RAW`, `SOCK_RDM`, `SOCK_SEQPACKET`, `SOCK_PACKET`, `UNKNOWN`. | | (12) State | `FREE`, `LISTENING`, `CONNECTING`, `CONNECTED`, `DISCONNECTING`, `(empty)`, `UNKNOWN`. | | (13) I-Node | 套接字文件的索引節點。 | | (14) PID | 打開套接字的進程的進程 ID(PID)和進程名稱。 | | (15) Path | 這是連接到套接字的對應進程的路徑名。 | 并非所有字段都是重要的。通常你只需要查看活動的互聯網連接(服務器和已建立) 部分,并使用以下字段: (1)`Proto` - 套接字使用的協議(tcp,udp,raw)。 (4)`Local Address` - 套接字本端的地址和端口號。 (5)`Foreign Address` - 套接字遠端的地址和端口號,僅用于套接字對。 (6)`State` - 現在你只應該知道兩個狀態:`LISTEN`和`ESTABLISHED`。前者意味著你可以連接到這個套接字,第后者的意思是這個套接字已經連接了,在這種情況下,`netstat`顯示你的套接字對。 `ip`是一個類似于`ifconfig`的,具有擴展功能的程序。它來自`iproute2`套件,用于在某一天替換`ifconfig`。示例輸出: ``` user1@vm1:~$ sudo ip addr show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever # (1) (2) (3) (4) (5) (6) (8) (9) 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 08:00:27:d4:45:68 brd ff:ff:ff:ff:ff:ff # (9), (10), (11) inet 10.0.2.15/24 brd 10.0.2.255 scope global eth0 # (12), (13), (14) inet6 fe80::a00:27ff:fed4:4568/64 scope link # (15), (16) valid_lft forever preferred_lft forever # (17), (18), (19) ``` 同樣,我們來看看我們在`eth0`上有什么信息: | 字段 | 描述 | | --- | --- | | (1) BROADCAST | 它可以一次性向所有主機發送流量 | | (2) MULTICAST | 它可以發送和接收組播數據包 | | (3) UP | 它是生效的,邏輯狀態 | | (4) LOWER_UP | 驅動器信號 L1 已開啟(自 Linux 2.6.17 起) | | (5) MTU | 最大傳輸單位 | | (6) qdisc | 排隊規則,基本上是流量調度策略 | | (8) State | 物理狀態(載體感覺?) | | (9) qlen | 傳出數據包的轉發隊列長度 | | (10) link | 物理選項 | | (11) ether | 封裝類型,MAC 地址 | | (12) brd | 數據鏈路層(物理)廣播地址 | | (13) inet | IPv4 地址族地址 | | (14) brd | IPv4 廣播 | | (15) scope | IPv4地址范圍(主機,鏈路,全局) | | (16) inet6 | IPv6 地址族地址 | | (17) scope | IPv6地址范圍(主機,鏈路,全局) | | (18) valid_lft | IPv6 源地址選擇策略 | | (19) preffered_lft | IPv6 源地址選擇策略 | 你已經知道哪些參數很重要(與`ifconfig`相同)。 `ss`基本上是具有擴展功能的當代`netstat`。這是它的示例輸出,其解釋為留作練習: ``` user1@vm1:~$ sudo ss -ap | cut -c1-200 State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:sunrpc *:* users:(("portmap",580,5)) LISTEN 0 128 :::ssh :::* users:(("sshd",900,4)) LISTEN 0 128 *:ssh *:* users:(("sshd",900,3)) LISTEN 0 20 ::1:smtp :::* users:(("exim4",1111,4)) LISTEN 0 20 127.0.0.1:smtp *:* users:(("exim4",1111,3)) LISTEN 0 128 *:36286 *:* users:(("rpc.statd",610,7)) ESTAB 0 0 10.0.2.15:ssh 10.0.2.2:52191 users:(("sshd",12023,3),("sshd",12026,3)) ESTAB 0 0 10.0.2.15:ssh 10.0.2.2:48663 users:(("sshd",11792,3),("sshd",11794,3)) ``` 這用于處理接口,連接和接口地址。但是網絡路由呢?你也可以使用幾個命令獲取它們的信息: ``` user1@vm1:~$ sudo route -n Kernel IP routing table # (1) (2) (3) (4) (5) (6) (7) (8) Destination Gateway Genmask Flags Metric Ref Use Iface 10.0.2.0 * 255.255.255.0 U 0 0 0 eth0 default 10.0.2.2 0.0.0.0 UG 0 0 0 eth0 user1@vm1:~$ sudo netstat -nr Kernel IP routing table # (9) Destination Gateway Genmask Flags MSS Window irtt Iface 10.0.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 0.0.0.0 10.0.2.2 0.0.0.0 UG 0 0 0 eth0 user1@vm1:~$ sudo ip route show # (10) (11) (12) (13) (14) 10.0.2.0/24 dev eth0 proto kernel scope link src 10.0.2.15 #(15) (16) default via 10.0.2.2 dev eth0 ``` 讓我們再一次看看字段: | 字段 | 描述 | | --- | --- | | (1) Destination | 目標網絡或目標主機。 | | (2) Gateway | 網關地址或`*`,如果沒有設置的話。 | | (3) Genmask | 目標網絡的掩碼;`255.255.255.255`為主機目標,`0.0.0.0`為默認路由。 | | (4) Flags | Up, Host, Gateway, Reinstate, Dynamically installed, Modified, Addrconf, Cache entry, ! reject. | | (5) Metric | 目標的“距離”(通常以跳數計算)。最近的內核不使用它,但路由守護進程可能需要它。 | | (6) Ref | 這個路由的引用次數(在 Linux 內核中未使用)。 | | (7) Use | 路由查詢次數。 | | (8) Iface | 用于這個路由的,發送封包的接口 | | (9) irtt | 初始 RTT(往返時間)。內核使用它來猜測最佳的 TCP 協議參數,而無需等待(可能很慢)的答案。 | | (10) Net/Mask | 目標網絡或目標主機。 | | (11) dev | 用于這個路由的,發送封包的接口 | | (12) proto | `man ip /RTPROTO`: redirect, kernel, boot, static, ra | | (13) scope | `man ip /SCOPE_WALUE`: global, site, link, host | | (14) src | 發送到路由前綴覆蓋的目標時,優先選擇的源地址。 | | (15) default | 默認網關地址 | | (15) dev | 用于這個路由的,發送封包的接口 | 目前的重要字段: + (1)`Destination` - 目標網絡或目標主機。 + (2)`Gateway` - 網關地址或`*`,如果沒有設置的話。默認值意味著,如果沒有明確指定的目標地址的網關,則將通過該網關發送數據包。 + (3)`Genmask` - 目標網絡的網絡掩碼;`255.255.255.255`為主機目標,`0.0.0.0`為默認路由。 + (8)`Iface` - 用于這個路由的,發送封包的接口。 `netstat`和`route`的哪個字段對應于`ip route show ·的哪個字段 ,再次留作一個練習。這真是太多了!深吸一口氣,讓我們轉到實踐。 現在你將學習如何創建偽接口,為其分配地址并更改其狀態。 ## 這樣做 ``` 1: sudo aptitude install uml-utilities 2: sudo tunctl -t tap0 -u user1 3: ls -al /sys/devices/virtual/net/tap0 4: sudo ifconfig tap0 10.1.1.1 netmask 255.255.255.0 5: sudo ifconfig 6: sudo route 7: ping 10.1.1.1 -c 2 8: sudo ifconfig tap0 down 9: ping 10.1.1.1 -c 2 10: sudo ifconfig tap0 up 11: sudo ip a a 10.2.2.2/24 brd + dev tap0 12: sudo ifconfig 13: sudo route 14: ip a s 15: ip r s 16: ping 10.2.2.2 -c 2 17: sudo ip link set dev tap0 down 18: ip a s 19: ip r s 20: ping 10.2.2.2 -c 2 21: sudo tunctl -d tap0 22: ip a s 23: ls -al /sys/devices/virtual/net/tap0 ``` ## 你會看到什么 ``` user1@vm1:~$ sudo aptitude install uml-utilities The following NEW packages will be installed: libfuse2{a} uml-utilities 0 packages upgraded, 2 newly installed, 0 to remove and 0 not upgraded. Need to get 0 B/205 kB of archives. After unpacking 737 kB will be used. Do you want to continue? [Y/n/?] Selecting previously deselected package libfuse2. (Reading database ... 39616 files and directories currently installed.) Unpacking libfuse2 (from .../libfuse2_2.8.4-1.1_amd64.deb) ... Selecting previously deselected package uml-utilities. Unpacking uml-utilities (from .../uml-utilities_20070815-1.1_amd64.deb) ... Processing triggers for man-db ... Setting up libfuse2 (2.8.4-1.1) ... Setting up uml-utilities (20070815-1.1) ... Starting User-mode networking switch: uml_switch. user1@vm1:~$ sudo tunctl -t tap0 -u user1 Set 'tap0' persistent and owned by uid 1000 user1@vm1:~$ ls -al /sys/devices/virtual/net/tap0 total 0 drwxr-xr-x 4 root root 0 Jul 11 05:33 . drwxr-xr-x 4 root root 0 Jul 11 05:33 .. -r--r--r-- 1 root root 4096 Jul 11 05:33 address -r--r--r-- 1 root root 4096 Jul 11 05:33 addr_len -r--r--r-- 1 root root 4096 Jul 11 05:33 broadcast -r--r--r-- 1 root root 4096 Jul 11 05:33 carrier -r--r--r-- 1 root root 4096 Jul 11 05:33 dev_id -r--r--r-- 1 root root 4096 Jul 11 05:33 dormant -r--r--r-- 1 root root 4096 Jul 11 05:33 duplex -r--r--r-- 1 root root 4096 Jul 11 05:33 features -rw-r--r-- 1 root root 4096 Jul 11 05:33 flags -r--r--r-- 1 root root 4096 Jul 11 05:33 group -rw-r--r-- 1 root root 4096 Jul 11 05:33 ifalias -r--r--r-- 1 root root 4096 Jul 11 05:33 ifindex -r--r--r-- 1 root root 4096 Jul 11 05:33 iflink -r--r--r-- 1 root root 4096 Jul 11 05:33 link_mode -rw-r--r-- 1 root root 4096 Jul 11 05:33 mtu -r--r--r-- 1 root root 4096 Jul 11 05:33 operstate -r--r--r-- 1 root root 4096 Jul 11 05:33 owner drwxr-xr-x 2 root root 0 Jul 11 05:33 power -r--r--r-- 1 root root 4096 Jul 11 05:33 speed drwxr-xr-x 2 root root 0 Jul 11 05:33 statistics lrwxrwxrwx 1 root root 0 Jul 11 05:33 subsystem -> ../../../../class/net -r--r--r-- 1 root root 4096 Jul 11 05:33 tun_flags -rw-r--r-- 1 root root 4096 Jul 11 05:33 tx_queue_len -r--r--r-- 1 root root 4096 Jul 11 05:33 type -rw-r--r-- 1 root root 4096 Jul 11 05:33 uevent user1@vm1:~$ sudo ifconfig tap0 10.1.1.1 netmask 255.255.255.0 user1@vm1:~$ sudo ifconfig eth0 Link encap:Ethernet HWaddr 08:00:27:d4:45:68 inet addr:10.0.2.15 Bcast:10.0.2.255 Mask:255.255.255.0 inet6 addr: fe80::a00:27ff:fed4:4568/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:64040 errors:0 dropped:0 overruns:0 frame:0 TX packets:44578 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:19663646 (18.7 MiB) TX bytes:25043918 (23.8 MiB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:76 errors:0 dropped:0 overruns:0 frame:0 TX packets:76 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:6272 (6.1 KiB) TX bytes:6272 (6.1 KiB) tap0 Link encap:Ethernet HWaddr ee:d8:2e:f6:bc:f1 inet addr:10.1.1.1 Bcast:10.1.1.255 Mask:255.255.255.0 inet6 addr: fe80::ecd8:2eff:fef6:bcf1/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:1 overruns:0 carrier:0 collisions:0 txqueuelen:500 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) user1@vm1:~$ sudo route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 10.0.2.0 * 255.255.255.0 U 0 0 0 eth0 10.1.1.0 * 255.255.255.0 U 0 0 0 tap0 default 10.0.2.2 0.0.0.0 UG 0 0 0 eth0 user1@vm1:~$ ping 10.1.1.1 -c 2 PING 10.1.1.1 (10.1.1.1) 56(84) bytes of data. 64 bytes from 10.1.1.1: icmp_req=1 ttl=64 time=0.070 ms 64 bytes from 10.1.1.1: icmp_req=2 ttl=64 time=0.027 ms --- 10.1.1.1 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1001ms rtt min/avg/max/mdev = 0.027/0.048/0.070/0.022 ms user1@vm1:~$ sudo ifconfig tap0 down user1@vm1:~$ ping 10.1.1.1 -c 2 PING 10.1.1.1 (10.1.1.1) 56(84) bytes of data. 64 bytes from 10.1.1.1: icmp_req=1 ttl=64 time=0.030 ms 64 bytes from 10.1.1.1: icmp_req=2 ttl=64 time=0.024 ms --- 10.1.1.1 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 999ms rtt min/avg/max/mdev = 0.024/0.027/0.030/0.003 ms user1@vm1:~$ sudo ifconfig tap0 up user1@vm1:~$ sudo ip a a 10.2.2.2/24 brd + dev tap0 user1@vm1:~$ sudo ifconfig eth0 Link encap:Ethernet HWaddr 08:00:27:d4:45:68 inet addr:10.0.2.15 Bcast:10.0.2.255 Mask:255.255.255.0 inet6 addr: fe80::a00:27ff:fed4:4568/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:64088 errors:0 dropped:0 overruns:0 frame:0 TX packets:44609 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:19667480 (18.7 MiB) TX bytes:25049771 (23.8 MiB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:84 errors:0 dropped:0 overruns:0 frame:0 TX packets:84 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:6944 (6.7 KiB) TX bytes:6944 (6.7 KiB) tap0 Link encap:Ethernet HWaddr ee:d8:2e:f6:bc:f1 inet addr:10.1.1.1 Bcast:10.1.1.255 Mask:255.255.255.0 inet6 addr: fe80::ecd8:2eff:fef6:bcf1/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:9 overruns:0 carrier:0 collisions:0 txqueuelen:500 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) user1@vm1:~$ sudo route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 10.2.2.0 * 255.255.255.0 U 0 0 0 tap0 10.0.2.0 * 255.255.255.0 U 0 0 0 eth0 10.1.1.0 * 255.255.255.0 U 0 0 0 tap0 default 10.0.2.2 0.0.0.0 UG 0 0 0 eth0 user1@vm1:~$ ip a s 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 08:00:27:d4:45:68 brd ff:ff:ff:ff:ff:ff inet 10.0.2.15/24 brd 10.0.2.255 scope global eth0 inet6 fe80::a00:27ff:fed4:4568/64 scope link valid_lft forever preferred_lft forever 12: tap0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 500 link/ether ee:d8:2e:f6:bc:f1 brd ff:ff:ff:ff:ff:ff inet 10.1.1.1/24 brd 10.1.1.255 scope global tap0 inet 10.2.2.2/24 brd 10.2.2.255 scope global tap0 inet6 fe80::ecd8:2eff:fef6:bcf1/64 scope link valid_lft forever preferred_lft forever user1@vm1:~$ ip r s 10.2.2.0/24 dev tap0 proto kernel scope link src 10.2.2.2 10.0.2.0/24 dev eth0 proto kernel scope link src 10.0.2.15 10.1.1.0/24 dev tap0 proto kernel scope link src 10.1.1.1 default via 10.0.2.2 dev eth0 user1@vm1:~$ ping 10.2.2.2 -c 2 PING 10.2.2.2 (10.2.2.2) 56(84) bytes of data. 64 bytes from 10.2.2.2: icmp_req=1 ttl=64 time=0.081 ms 64 bytes from 10.2.2.2: icmp_req=2 ttl=64 time=0.025 ms --- 10.2.2.2 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 999ms rtt min/avg/max/mdev = 0.025/0.053/0.081/0.028 ms user1@vm1:~$ sudo ip link set dev tap0 down user1@vm1:~$ ip a s 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 08:00:27:d4:45:68 brd ff:ff:ff:ff:ff:ff inet 10.0.2.15/24 brd 10.0.2.255 scope global eth0 inet6 fe80::a00:27ff:fed4:4568/64 scope link valid_lft forever preferred_lft forever 12: tap0: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN qlen 500 link/ether ee:d8:2e:f6:bc:f1 brd ff:ff:ff:ff:ff:ff inet 10.1.1.1/24 brd 10.1.1.255 scope global tap0 inet 10.2.2.2/24 brd 10.2.2.255 scope global tap0 user1@vm1:~$ ip r s 10.0.2.0/24 dev eth0 proto kernel scope link src 10.0.2.15 default via 10.0.2.2 dev eth0 user1@vm1:~$ ping 10.2.2.2 -c 2 PING 10.2.2.2 (10.2.2.2) 56(84) bytes of data. 64 bytes from 10.2.2.2: icmp_req=1 ttl=64 time=0.037 ms 64 bytes from 10.2.2.2: icmp_req=2 ttl=64 time=0.024 ms --- 10.2.2.2 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 999ms rtt min/avg/max/mdev = 0.024/0.030/0.037/0.008 ms user1@vm1:~$ sudo tunctl -d tap0 Set 'tap0' nonpersistent user1@vm1:~$ ip a s 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 08:00:27:d4:45:68 brd ff:ff:ff:ff:ff:ff inet 10.0.2.15/24 brd 10.0.2.255 scope global eth0 inet6 fe80::a00:27ff:fed4:4568/64 scope link valid_lft forever preferred_lft forever user1@vm1:~$ ls -al /sys/devices/virtual/net/tap0 ls: cannot access /sys/devices/virtual/net/tap0: No such file or directory user1@vm1:~$ ``` ## 解釋 1. 安裝使用偽(虛擬)接口的軟件包。 1. 創建偽接口`tap0`。 1. 打印為此接口創建的,虛擬目錄的內容,其中包含其設置和統計信息。 1. 將 IP 地址`10.1.1.1/24`添加到`tap0`。 1. 打印當前接口狀態。 1. 打印當前路由表條目。請注意,Linux 自動為`tap0`添加新路由。 1. 通過向其發送 ICMP 回顯請求數據包來測試`tap0`。 1. 將`tap0`設為`DOWN`狀態(停用)。 1. 通過再次發送 ICMP 回顯請求數據包來測試`tap0`。會有額外的附加題來解釋為什么這個仍然可以工作,盡管已經停用了。 1. 將`tap0`設為`UP`狀態(啟用)。 1. 向`tap0`添加額外的IP地址`10.2.2.2/24`。`ip aa`是`ip addr add`的縮寫版本。這個`+`的含義,你會在附加題中自己發現它。 1. 打印當前接口狀態。注意`ifconfig`無法列出使用`ip`工具添加的新 IP 地址。為什么?留作附加題。 1. 打印當前路由表。請注意,Linux 自動為`tap0`添加了一條路由。 1. 使用`ip`工具打印當前接口狀態。你可以在這里看到新添加的地址。 1. 使用`ip`工具打印我們的路由表。 1. 通過向其發送 ICMP 回顯請求報文,來測試`net tap0`的 IP 地址。 1. 將`tap0`設為`DOWN`狀態。 1. 打印當前接口狀態。 1. 打印當前路由表條目。請注意,`tap0`路由將自動刪除。 1. 通過向其發送 ICMP 回顯請求報文,來測試`net tap0`的 IP 地址。這個有用,為什么? 1. 刪除偽接口`tap0`。 1. 打印當前接口狀態。`tap0`不存在 1. 告訴我們,`tap0`虛擬目錄現在也沒有了。 ## 附加題 + 熟悉`man ifconfig`,`man ip`,`man netstat`,`man ss`。 + 當`tap0`處于關閉狀態時,為什么`ping`有用? + `brd +`的意思是什么? + 為什么`ifconfig`無法列出使用`ip`添加的新地址?
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看