Linux C語言 取得MTU 最大傳輸單元

2021-08-22 08:55:55 字數 3158 閱讀 1396

參照這篇部落格:

* 檢視主機當前網絡卡,哪塊在使用.

ifconfig

lo0: flags=8049mtu 16384

options=3inet6 ::1 prefixlen 128

inet 127.0.0.1 netmask 0xff000000

inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1

nd6 options=1gif0: flags=8010mtu 1280

stf0: flags=0<> mtu 1280

en0: flags=8863mtu 1500

ether a4:5e:60:d6:57:17

inet6 fe80::a65e:60ff:fed6:5717%en0 prefixlen 64 scopeid 0x4

inet 192.168.16.103 netmask 0xffffff00 broadcast 192.168.16.255

nd6 options=1media: autoselect

status: active

en1: flags=963mtu 1500

options=60ether 4a:00:01:33:73:10

media: autoselect status: inactive

en2: flags=963mtu 1500

options=60ether 4a:00:01:33:73:11

media: autoselect status: inactive

p2p0: flags=8843mtu 2304

ether 06:5e:60:d6:57:17

media: autoselect

status: inactive

awdl0: flags=8943mtu 1484

ether 7a:00:b6:6c:ea:a0

inet6 fe80::7800:b6ff:fe6c:eaa0%awdl0 prefixlen 64 scopeid 0x8

nd6 options=1media: autoselect

status: active

bridge0: flags=8822

mtu 1500

options=63ether a6:5e:60:6d:62:00

configuration:

id 0:0:0:0:0:0 priority 0 hellotime 0 fwddelay 0

maxage 0 holdcnt 0 proto stp maxaddr 100 timeout 1200

root id 0:0:0:0:0:0 priority 0 ifcost 0 port 0

ipfilter disabled flags 0x2

member: en1 flags=3ifmaxaddr 0 port 5 priority 0 path cost 0

member: en2 flags=3ifmaxaddr 0 port 6 priority 0 path cost 0

media: status: inactive

ifconfig 輸出

ifconfig en0
en0: flags=8863mtu 1500

ether a4:5e:60:d6:57:17

inet6 fe80::a65e:60ff:fed6:5717%en0 prefixlen 64 scopeid 0x4

inet 192.168.16.103 netmask 0xffffff00 broadcast 192.168.16.255

nd6 options=1media: autoselect

status: active

可以看到en0網絡卡有有效的ip位址net 192.168.16.103, 說明這塊網絡卡在使用, linux環境通常是eth0.

* 建立檔案main.c

#include #include #include #include #include #include #include #include int get_mtu(const char *nic) 

close(fd);

return ifr.ifr_mtu;

}int main(int argc, const char * argv)

* 編譯執行

1500

program ended with exit code: 0

得出mtu為1500

* 一些函式原型

#include

int socket(int domain, int type, int protocol);

socket.h

* types

#define sock_stream 1 /* stream socket */

#define sock_dgram 2 /* datagram socket */

#define sock_raw 3 /* raw-protocol inte***ce */

* [xsi] structure used by kernel to store most addresses.

struct sockaddr ifr_ifru;

#define

ifr_addr

ifr_ifru.ifru_addr /* address */

#define

ifr_dstaddr

ifr_ifru.ifru_dstaddr /* other end of p-to-p link */

#define

ifr_broadaddr

ifr_ifru.ifru_broadaddr /* broadcast address */

ioctl -- control device

synopsis

#include

int ioctl(int fildes, unsigned long request, ...);

MTU 最大傳輸單元

maximum transmission unit mtu 最大傳輸單元 pppoe的最大接收單元為1492,乙太網最大載荷為1500 octets,pppoe頭為6 octets,ppp協議id為2 octets,所以ppp的mtu最大不能超過1492 ppoe協議要求所有客戶機上的mtu值不超過...

最大傳輸單元MTU

維基百科,自由的百科全書 本條目沒有列出任何參考或 2015年2月25日 維基百科所有的內容都應該可供查證。請協助新增來自可靠 的引用以改善這篇條目。無法查證的內容可能被提出異議而移除。最大傳輸單元 英語 maximum transmission unit 縮寫mtu 是指一種通訊協議的某一層上面所...

關於最大傳輸單元(MTU)的整理

mtu設定不當,可能會導致許多網路問題,如某些網路應用無法使用,某些 無法訪問等。下面是在網上搜尋整理的關於mtu設定的東西,某些可能未作驗證,僅供參考。1.如何確定網路mtu 某些isp接入的mtu可能會比常規使用的mtu小,這時如果設定了過大的mtu,就可能會導致很多服務無法使用的問題。可以通過...