加入收藏 | 设为首页 | 会员中心 | 我要投稿 淮北站长网 (https://www.0561zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

Linux内核--网络栈实现分析(二)--数据包的传递过程--转

发布时间:2021-01-24 09:17:01 所属栏目:Linux 来源:网络整理
导读:副标题#e# 转载地址 作者:闫明 本文分析基于Linux Kernel 1.2.13 注:标题中的”(上)“,”(下)“表示分析过程基于数据包的传递方向:”(上)“表示分析是从底层向上分析、”(下)“表示分析是从上向下分析。 ?上篇: 上一篇博文中我们从宏观上分析

<div class="dp-highlighter bg_cpp">
<div class="bar">
<div class="tools">
[cpp]?<a class="ViewSource" title="view plain" href="http://blog.csdn.net/geekcome/article/details/7545855"&gt;view plain<a class="CopyToClipboard" title="copy" href="http://blog.csdn.net/geekcome/article/details/7545855"&gt;copy

?
  1. ?
  2. ?
  3. ?
  4. ??
  5. ?ip_queue_xmit(?sock?*sk,??
  6. {??
  7. ????unsigned??*ptr;??
  8. ??????
  9. ?????
  10. ??
  11. ??
  12. ??
  13. ?
  14. ?
  15. ?
  16. ??
  17. ?????
  18. ??
  19. ????(free!=2)??
  20. id??????=?htons(ip_id_count++);??
  21. ??????
  22. ??
  23. ?????(sk?==?NULL)??
  24. ??
  25. free?=?free;??
  26. ??
  27. ?
  28. ?
  29. ??
  30. ??
  31. ?
  32. ??
  33. ??
  34. ?
  35. ??
  36. ?
  37. ??
  38. ??
  39. ?
  40. ?
  41. ??
  42. ????......................??
  43. ?
  44. ???????
  45. ????????.............................??
  46. ????????((dev->flags&IFF_BROADCAST)?&&?iph->daddr==dev->pa_brdaddr?&&?!(dev->flags&IFF_LOOPBACK))??
  47. ??????????
  48. flags?&?IFF_UP)??
  49. ????{??
  50. ?
  51. ??
  52. ?????????(sk?!=?NULL)??
  53. ????????????dev_queue_xmit(skb,?sk->priority);??
  54. ??????????
  55. ????????????dev_queue_xmit(skb,?SOPRI_NORMAL);??
  56. ????}??
  57. ????{??
  58. ?????????(free)??
  59. ????}??

四、驱动层(链路层)

在函数中,函数调用会调用具体设备的发送函数来发送数据包

dev->hard_start_xmit(skb,dev);

具体设备的发送函数在网络初始化的时候已经设置了。

这里以8390网卡为例来说明驱动层的工作原理,在net/drivers/8390.c中函数ethdev_init()函数中设置如下:

(编辑:淮北站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读