电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本
换一换
首页 金锄头文库 > 资源分类 > DOCX文档下载
分享到微信 分享到微博 分享到QQ空间

SKB路由缓存与SOCK路由缓存交互知识讲解

  • 资源ID:62154592       资源大小:25.68KB        全文页数:4页
  • 资源格式: DOCX        下载积分:0金贝
快捷下载 游客一键下载
账号登录下载
微信登录下载
三方登录下载: 微信开放平台登录   支付宝登录   QQ登录  
二维码
微信扫一扫登录
下载资源需要0金贝
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
如填写123,账号就是123,密码也是123。
验证码:   换一换

 
账号:
密码:
验证码:   换一换
  忘记密码?
    
1、金锄头文库是“C2C”交易模式,即卖家上传的文档直接由买家下载,本站只是中间服务平台,本站所有文档下载所得的收益全部归上传人(卖家)所有,作为网络服务商,若您的权利被侵害请及时联系右侧客服;
2、如你看到网页展示的文档有jinchutou.com水印,是因预览和防盗链等技术需要对部份页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有jinchutou.com水印标识,下载后原文更清晰;
3、所有的PPT和DOC文档都被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;下载前须认真查看,确认无误后再购买;
4、文档大部份都是可以预览的,金锄头文库作为内容存储提供商,无法对各卖家所售文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;
5、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据;
6、如果您还有什么不清楚的或需要我们协助,可以点击右侧栏的客服。
下载须知 | 常见问题汇总

SKB路由缓存与SOCK路由缓存交互知识讲解

SKB路由缓存与SOCK路由缓存交互知识讲解skb结构体中的成员_skb_refdst与sock结构体中成员sk_rx_dst(缓存入口路由)和sk_dst_cache(缓存出口路由)成员之间的交互操作。SOCK入口路由与SKB路由缓存内核在接收流程中,调用early_demux函数提前在IP层做established状态的sock查找,并负责将sock结构体成员sk_rx_dst的路由缓存赋值给skb成员_skb_refdst,对于UDP协议,先判断DST_NOCACHE标志,如果成立,增加dst引用计数,设置skb的dst;否则,调用skb_dst_set_noref直接进行设置。?12345678910111213141516void udp_v4_early_demux(struct sk_buff *skb)    dst = READ_ONCE(sk->sk_rx_dst);     if (dst)        dst = dst_check(dst, 0);    if (dst)         /* DST_NOCACHE can not be used without taking a reference */        if (dst->flags & DST_NOCACHE)             if (likely(atomic_inc_not_zero(&dst->_refcnt)                skb_dst_set(skb, dst);         else             skb_dst_set_noref(skb, dst);            对于TCP协议,直接调用skb_dst_set_noref函数,将sock结构体成员sk_rx_dst缓存到skb结构体中。乐淘棋牌http:/www.letaoqpyx.com?123456789101112void tcp_v4_early_demux(struct sk_buff *skb)    if (sk->sk_state != TCP_TIME_WAIT)         struct dst_entry *dst = sk->sk_rx_dst;         if (dst)            dst = dst_check(dst, 0);        if (dst &&            inet_sk(sk)->rx_dst_ifindex = skb->skb_iif)            skb_dst_set_noref(skb, dst);    同样都为early_demux函数,都是从sk->sk_rx_dst获取路由缓存,tcp和udp的存在明显差别。TCP直接赋值,UDP需要先判断DST_NOCACHE标志。此情况是由UDP与TCP在sock中缓存dst时的处理不同造成的,TCP预先调用了dst_hold_safe函数,进行了DST_NOCACHE标志的判断处理,如未缓存则增加了引用计数。然而,UDP在缓存路由dst时,使用xchg函数,未判断也未增加引用计数,所以需要在后续判断处理。?12345678910111213141516171819202122232425static inline bool dst_hold_safe(struct dst_entry *dst)    if (dst->flags & DST_NOCACHE)        return atomic_inc_not_zero(&dst->_refcnt);    dst_hold(dst); void inet_sk_rx_dst_set(struct sock *sk, const struct sk_buff *skb)    struct dst_entry *dst = skb_dst(skb);     if (dst && dst_hold_safe(dst)         sk->sk_rx_dst = dst;        inet_sk(sk)->rx_dst_ifindex = skb->skb_iif;     static void udp_sk_rx_dst_set(struct sock *sk, struct dst_entry *dst)    struct dst_entry *old;     dst_hold(dst);    old = xchg(&sk->sk_rx_dst, dst);    dst_release(old);SOCK出口路由与SKB路由缓存对于UDP协议客户端,其在connect时(UDP客户端connect不同于TCP,仅绑定通信端地址),查询路由,缓存到sock结构体的sk_dst_cache中。?12345int ip4_datagram_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len)    rt = ip_route_connect(.);    sk_dst_set(sk, &rt->dst);之后,发送UDP数据包时,检查sock结构体中的出口路由是否有效,有效的话可不用再次查询路由表,在函数ip_make_skb中直接使用rt,并且调用skb_dst_set赋值给skb的_skb_refdst结构体,以便在发送过程中使用。对于UDP服务端,在首次发包检测到rt为空时,查询路由表得到出口路由,缓存在sock结构中,之后发包时rt有效,省去再次查询。?12345678910111213141516171819struct sk_buff *_ip_make_skb(.)    skb_dst_set(skb, &rt->dst); int udp_sendmsg(.)    if (connected)        rt = (struct rtable *)sk_dst_check(sk, 0);    if (rt = NULL)         rt = ip_route_output_flow(net, fl4, sk);        if (connected)            sk_dst_set(sk, dst_clone(&rt->dst);         skb = ip_make_skb(sk, fl4, getfrag, msg->msg_iov, ulen,            sizeof(struct udphdr), &ipc, &rt,            msg->msg_flags);IP层发送数据包时(调用ip_queue_xmit),检测sock结构中出口路由缓存,如果有效,设置到skb结构体中。否则重新进行出口路由查找。移动电玩城http:/www.44226.net?123456789int ip_queue_xmit(struct sk_buff *skb, struct flowi *fl)    rt = (struct rtable *)_sk_dst_check(sk, 0);    if (rt = NULL)         rt = ip_route_output_ports(.);        sk_setup_caps(sk, &rt->dst);        skb_dst_set_noref(skb, &rt->dst);内核版本linux-3.10.0

注意事项

本文(SKB路由缓存与SOCK路由缓存交互知识讲解)为本站会员(m****)主动上传,金锄头文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即阅读金锄头文库的“版权提示”【网址:https://www.jinchutou.com/h-59.html】,按提示上传提交保证函及证明材料,经审查核实后我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。

分享当前资源【SKB路由缓存与SOCK路由缓存交互知识讲解】到朋友圈,您即可以免费下载此资源!
微信扫一扫分享到朋友圈
二维码
操作提示:任选上面一个二维码,打开微信,点击“发现”使用“扫一扫”,即可将选择的网页分享到朋友圈
您可能感兴趣的------------------------------------------------------------------------------------------------------



关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.