linux网络代码结构:四层
1、设备驱动,Linux/drivers/net/3c501.c
2、网络核心,linux/net/core/dev.c,struct net_device,
3、网络协议族,包括tcp/ip、ipx等协议,linux/net/ipv4
4、网络接口socket层,linux/net/socket.c

1->2: 第一层调用netif_rx()(net/core/dev.c 1214行) 通过*dev_base指向的设备链,把数据传递给第二层。

3->2: 网络接口核心层通过dev_queue_xmit()(net/core/dev.c,line975)这个函数向上层提供统一的发送接口,也就是说无论是IP,还是ARP协议,通过这个函数把要发送的数据传递给这一层,想发送数据的时候就调用这个函数就可以了。dev_queue_xmit()做的工作最后会落实到dev->hard_start_xmit(),而dev->hard_start_xmit()会调用实际的驱动程序来完成发送的任务。例如上面的例子中,调用dev->hard_start_xmit()实际就是调用了el_start_xmit()。 
2->3: IP协议接收数据是通过ip_rcv()函数的,而ARP协议是通过arp_rcv()的,网络接口核心层只要通过这个数组就可以把数据交给上层函数了。 
 通过dev_add_pack注册第三层接收消息的函数。
3->4: 在linux/net/ipv4/protocol.c,往数组inet_protos[MAX_INET_PROTOS] 里面添加协议是通过函数inet_add_protocol()实现的,删除协议是通过 inet_del_protocol()实现的。在linux/net/ipv4/protocol.c的上部,我们可以看到其它协议层的处理函数是tcp_v4_rcv(), igmp_rcv(), udp_rcv(), icmp_rcv()。
4->3: ???

IP层处理方式:
1、本地
2、转发
3、不可能

dev_add_pack()是注册ip层内容的,及网络核心层在什么条件下把消息发给网络协议层;
inet_add_protocol()是注册传输层的,包含tcp、icmp、igmp;
socket_register()是注册socket的。

linux网络代码结构相关推荐

  1. linux 网络 sk_buff结构

    一.简介 sk_buff的意思是socket buffer,这是Linux网络子系统中的核心数据结构. 定义在 <include/linux/skbuff.h> 中,它由许多变量组成,目标 ...

  2. 庖丁解牛linux内核,庖丁解牛Linux网络核心

    通过TCP协议进行C/S模式的网络通信 学习要由浅入深.由易到难,分析Linux内核中网络部分就要从内核对外提供的socket封装接口说起,典型以TCP协议C/S方式socket通信大致过程如图所示: ...

  3. Linux网络技术学习(一)—— sk_buff数据结构解析

    文章目录 Linux网络代码中结构体 套接字缓冲区:sk_buff数据结构 sk_buff数据结构定义文件位置 sk_buff数据结构分布 sk_buff数据结构在传输中的流程 网络选项以及内核结构 ...

  4. linux usbnet网络驱动,[技术资料]基于usb设备的linux网络驱动程序开发

    1 引言 做为开放源代码 (open source) 运动重要组成部分,linux操作系统吸引了数以万计的程序员共同开发.由于linux比较完整的继承了各种unix版本的稳定和高效,并且克服和改进了传 ...

  5. Linux下网络相关结构体 struct servent

    Linux下网络相关结构体 struct servent 参考书籍:<UNIX环境高级编程> 参考链接: http://www.cnblogs.com/benxintuzi/p/45898 ...

  6. muduo网络库:18---muduo简介之(muduo库的由来、编译安装、目录结构、代码结构、线程模型)

    一.由来 2010年3月陈硕先生写了一篇<学之者生,用之者死--ACE历史与简评>(文章参阅:https://blog.csdn.net/Solstice/article/details/ ...

  7. [Linux网络编程学习笔记]套接字地址结构

    好久没有看那Linux网络编程这本书了,今天看到了重点部分-TCP套接字.下面先来看看套接字的地址结构 Linux系统的套接字可以支持多种协议,每种不同的协议都是用不同的地址结构.在头文件<li ...

  8. Linux网络编程组播测试代码

    Linux网络编程组播测试代码 (转载) 组播客户端代码如下: #include <sys/types.h> #include <sys/socket.h> #include ...

  9. 移动设备网络代码,整理成GO结构体

    移动设备网络代码,整理成GO结构体: struct 如下: type MNCDescription struct {MMC string //移动设备网络代码 (Mobile Network Code ...

最新文章

  1. Maven 学习Tips
  2. 噪声对于训练神经网络的重要性
  3. leetcode 718. Maximum Length of Repeated Subarray | 718. 最长重复子数组(动态规划)
  4. Google Guava v07范例
  5. contentType类型,ajax内容类型
  6. Mysql 数据库 主从数据库 (主从)(主主)
  7. Ubuntu下bin文件的安装
  8. 笔记本单/双网卡如何同时上内外网
  9. Stata+PSM:倾向得分匹配分析简介
  10. 全国计算机等级考试二级教程--python语言程序设计(2018年版)第七章:数据组织的维度
  11. JVM学习笔记(4)-运行时数据区详解之程序计数器与虚拟机栈
  12. 使用 FFmpeg 删除导出视频字幕文件
  13. win7TTS修复,使用C#SpeechSynthesizer 类
  14. golang并发编程之Ticker
  15. requests.exceptions.ConnectionError:HTTPSConnectionPool(host
  16. 严重: Servlet.service() for servlet [springmvc] in context with path [] threw exception [Request proce
  17. 学习人工智能需要参加哪些课程或培训,如何选择?
  18. php自定义微博尾巴,怎么自定义微博小尾巴 (无需工具)
  19. 理工英语单词汇总与复习
  20. ChIPseeker入门到精通

热门文章

  1. 分类图片展示php源码,HTML5+jQuery插件Quicksand实现超酷的星际争霸2兵种分类展示效果(附demo源码下载)...
  2. 星载计算机西北工业大学,星载计算机SRAM加固可靠性的研究与设计
  3. linux如何控制ftp不能get,ftp get/push连接到linux时,都是使用的linux命令
  4. eureka 集群失败的原因_对于注册中心,ZooKeeper、Eureka哪个更合适?
  5. linux的码是什么东西,在Linux内核中的UD2操作码的目的是什么?
  6. linux redis 监控工具,Redis服务器监控工具redis-live
  7. 爬虫3 requests基础之下载图片用content(二进制内容)
  8. 关于本次课堂代码的练习
  9. 《Android进阶之光》--事件总线
  10. java 中JFinal getModel方法和数据库使用出现问题解决办法