مقالات

ipv4 – چرا باید ماسک زیر شبکه را در یک رابط مشخص کنم؟


من به شدت با پاسخ or1on در اینجا موافقم. یادم رفت همین آزمایش را انجام دادم. به نظر من مهم نیست که این رابط چه مقدار ماسک زیر شبکه داشته باشد. هسته فقط با جدول مسیرها مشورت می کند تا مشخص کند آیا IP دیگری از طریق دروازه، پیوند یا هیچکدام قابل دسترسی است یا خیر.

شاید دلیل تنظیم همزمان IP و netmask روی اینترفیس فقط راهی برای تنظیم ورودی مسیر باشد. بعد از آن فقط جدول مسیریابی اهمیت دارد.

من با پاسخ های بیشتر برمی گردم.

به هر حال، من فکر می کنم جدول مسیریابی یونیکس معادل جدول فورواردینگ در زمینه سوئیچ ها است. چه جالب!


به روز رسانی 2025-11-19 Ok… بنا به نظر آدریان. من در هسته (6.17) حفاری کردم تا ببینم چه اتفاقی می افتد

زمانی که شما آدرس آی پی اضافه کنید /

dev , a netlink message of type RTM_NEWADDR is sent to the kernel. This message is routed to net/ipv4/devinet.c:inet_rtm_newaddr() where the family type (AF_INET/AF_INET6), ip addr, mask (include/uapi/linux/if_addr.h:struct ifaddrmsg:ifa_prefixlen) etc will be set on the interface (recorded as struct net_device in kernel)

inet_rtm_newaddr subsequently calls __inet_insert_ifa which in turn calls fib_add_ifaddr. Here another netlink message of type RTM_NEWROUTE is generated, which takes the following and some other fields

  • ifa->ifa_mask
  • ifa->ifa_address & ifa->ifa_mask

and it is eventually sent to net/ipv4/fib_tire.c:fib_table_insert()

This is how adding an IP/prefixlen to an interface affects the linux route table. /proc/net/fib_trie will reflect the action fib_table_insert() afterwards.

For those interested in the entire chain from adding an IP/prefix to inserting a route entry, here’s the kernel stack trace

#0  fib_table_insert (net=0xffffffff83c9cf80 , tb=0xffff888101727280, cfg=0xffffc90002c837e0, extack=0x0)
    at net/ipv4/fib_trie.c:1196
#1  0xffffffff821c3e44 in fib_magic (cmd=cmd@entry=24, type=type@entry=2, dst=dst@entry=3154225344, dst_len=dst_len@entry=32, 
    ifa=ifa@entry=0xffff888101586700, rt_priority=rt_priority@entry=0) at net/ipv4/fib_frontend.c:1133
#2  0xffffffff821c5933 in fib_add_ifaddr (ifa=0xffff8881000adc80) at net/ipv4/fib_frontend.c:1155
#3  0xffffffff821c61ba in fib_inetaddr_event (this=, event=, ptr=)
    at net/ipv4/fib_frontend.c:1469
#4  0xffffffff813801cd in notifier_call_chain (nl=nl@entry=0xffffffff83061f68 , val=val@entry=1, 
    v=v@entry=0xffff8881000adc80, nr_to_call=nr_to_call@entry=-1, nr_calls=nr_calls@entry=0x0) at kernel/notifier.c:85
#5  0xffffffff813803f2 in blocking_notifier_call_chain (nh=nh@entry=0xffffffff83061f40 , val=val@entry=1, 
    v=v@entry=0xffff8881000adc80) at kernel/notifier.c:380
#6  0xffffffff821b66bb in __inet_insert_ifa (ifa=0xffff8881000adc80, nlh=nlh@entry=0xffff8881002ff9c0, portid=522, 
    extack=extack@entry=0xffffc90002c83b08) at net/ipv4/devinet.c:566
#7  0xffffffff821b7681 in inet_rtm_newaddr (skb=skb@entry=0xffff888106681200, nlh=nlh@entry=0xffff8881002ff9c0, 
    extack=extack@entry=0xffffc90002c83b08) at net/ipv4/devinet.c:1001
#8  0xffffffff820ae7a9 in rtnetlink_rcv_msg (skb=0xffff888106681200, nlh=0xffff8881002ff9c0, extack=0xffffc90002c83b08)
    at net/core/rtnetlink.c:6943
#9  0xffffffff82129b8c in netlink_rcv_skb (skb=0xffff888106681200, cb=0xffffffff820ae460 )
    at net/netlink/af_netlink.c:2552
#10 0xffffffff821292e8 in netlink_unicast_kernel (sk=0xffff888100bd1800, skb=0xffff888106681200, ssk=0xffffffff83c9cf80 )
    at net/netlink/af_netlink.c:1320
#11 netlink_unicast (ssk=ssk@entry=0xffff888106734000, skb=skb@entry=0xffff888106681200, portid=portid@entry=0, nonblock=)
    at net/netlink/af_netlink.c:1346
#12 0xffffffff8212963d in netlink_sendmsg (sock=, msg=0xffffc90002c83e68, len=)
    at net/netlink/af_netlink.c:1896
#13 0xffffffff8205f862 in sock_sendmsg_nosec (sock=0xffff888100496b40, msg=0xffffc90002c83e68) at net/socket.c:714
#14 __sock_sendmsg (sock=0xffff888100496b40, msg=0xffffc90002c83e68) at net/socket.c:729
#15 ____sys_sendmsg (sock=sock@entry=0xffff888100496b40, msg_sys=msg_sys@entry=0xffffc90002c83e68, flags=flags@entry=0, 
    used_address=used_address@entry=0x0, allowed_msghdr_flags=allowed_msghdr_flags@entry=0) at net/socket.c:2614
#16 0xffffffff8205ff39 in ___sys_sendmsg (sock=0xffff888100496b40, msg=msg@entry=0x7fffbc4d09b0, msg_sys=msg_sys@entry=0xffffc90002c83e68, 
    flags=flags@entry=0, used_address=used_address@entry=0x0, allowed_msghdr_flags=allowed_msghdr_flags@entry=0) at net/socket.c:2668
#17 0xffffffff82062d9a in __sys_sendmsg (fd=, msg=0x7fffbc4d09b0, flags=0, forbid_cmsg_compat=)
    at net/socket.c:2700
#18 0xffffffff8233a711 in do_syscall_x64 (regs=0xffffc90002c83f48, nr=) at arch/x86/entry/syscall_64.c:63
#19 do_syscall_64 (regs=0xffffc90002c83f48, nr=) at arch/x86/entry/syscall_64.c:94
#20 0xffffffff8100012f in entry_SYSCALL_64 () at arch/x86/entry/entry_64.S:121


Source link

نوشته های مشابه

دیدگاهتان را بنویسید

دکمه بازگشت به بالا