协议栈的部分笔记

ARP条目的类型:

/* ARP Flag values. */
#define ATF_COM     0x02        /* completed entry (ha valid)   */
#define ATF_PERM    0x04        /* permanent entry      */
#define ATF_PUBL    0x08        /* publish entry        */
#define ATF_USETRAILERS 0x10        /* has requested trailers   */
#define ATF_NETMASK     0x20            /* want to use a netmask (only
                       for proxy entries) */
#define ATF_DONTPUB 0x40        /* don't answer this addresses  */

什么时候会发送ARP查询,目的IP和你网卡知道的IP在同一网段的才会发送ARP请求,比如,网卡IP为192.168.1.102,那ping 192.168.1.0的IP会发送ARP请求MAC地址。如果网卡IP为192.168.1.102,网关设置为192.168.10.1,那ping 192.168.1.0和192.168.10.0两个网段才会发送ARP请求,ping其他网段的IP都直接发送ICMP包。
所以我们说ARP是邻居协议,不存在被转发的情况。
————
struct sk_buff是socket buffer结构,
sk_buff的head和end指向给数据预分配的内存的起始和结束位置,data和tail指向实际已填充的数据起始和结束位置。
skb_realloc_headroom(struct sk_buff *skb, unsigned int headroom)函数用于在skb的head和data之间多分配点儿空间, data的内容整体后移,headroom是多分配的长度。。

ip_route_input()负责选择路由:

ip_route_input()
    if (在路由缓存rt_hash_table里找到) //匹配srcip/dstip/in_if/out_if/net_ns/tos类型(如IPTOS_LOWDELAY)等。
       skb_dst_set(skb, &rth->u.dst);
    else
        ip_route_input_slow() //从路由表fib中去找
            if (res.type == RTN_LOCAL) //本地
                rth->u.dst.input= ip_local_deliver;
            else //转发
                ip_mkroute_input()
                    -> __mkroute_input()
                        rth->u.dst.inpu
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值