文档章节

TCP/IP协议详解第2卷 第3章 接口层

卜星星
 卜星星
发布于 2015/03/02 08:45
字数 760
阅读 60
收藏 2
点赞 0
评论 0

        这章就是从ifnet来说起的,每个网络设备都有一个自己的ifnet结构,这个结构里有ifaddr链表,也就是每个接口的

所有地址,可以是一个,也可以是多个形成的链表。然后下面有一个ifqueue这就是指向mbuf链表的;然后还有很多

处理函数指针,来初始化接口、发送分组等功能。

struct ifnet {
    /* 这是记录接口类型的,这里的接口类型就是以太网/或者
     * SLIP或者环回接口 */
 char *if_name;  /* name, e.g. ``en'' or ``lo'' */
    /* 这是要形成ifnet结构链表的,因为每个接口都有自己的ifnet结构,
     * 比如有两个以太网卡,就有两个这个结构,用这个指针连起来*/
 struct ifnet *if_next;  /* all struct ifnets are chained */
    /* 然后每个接口可以有多个地址可能,比如以太网的,
     * 我们可以设置多个IP地址给它,形成一个链 */
 struct ifaddr *if_addrlist; /* linked list of addresses per if */
    /* 这个还不知道具体是什么,但是混杂看侦听个数,让我想起libpcap库
     * 设置混杂模式了*/
        int if_pcount;  /* number of promiscuous listeners */
        /* 包过滤使用,以后再看看 */
 caddr_t if_bpf;   /* packet filter structure */
    /* 这个和下面那个差不多不过它不管什么接口类型了,都统一编号了
     * 所以编号是唯一的*/
 u_short if_index;  /* numeric abbreviation for this if  */
    /*前面有这个接口的类型了,万一要是这种接口有多个,
     * 然后它再标识为0/1/...*/
 short if_unit;  /* sub-unit for lower level driver */
    /*这个记录时间但具体细节不清楚*/
 short if_timer;  /* time 'til if_watchdog called */
    /* 这个接口的状态和属性,比如工没工作,能干什么 */
 short if_flags;  /* up/down, broadcast, etc. */
 struct if_data {
/* generic interface information */
  u_char ifi_type; /* ethernet, tokenring, etc */
  u_char ifi_addrlen; /* media address length */
  u_char ifi_hdrlen; /* media header length */
  u_long ifi_mtu; /* maximum transmission unit */
  u_long ifi_metric; /* routing metric (external only) */
  u_long ifi_baudrate; /* linespeed */
/* volatile statistics */
  u_long ifi_ipackets; /* packets received on interface */
  u_long ifi_ierrors; /* input errors on interface */
  u_long ifi_opackets; /* packets sent on interface */
  u_long ifi_oerrors; /* output errors on interface */
  u_long ifi_collisions; /* collisions on csma interfaces */
  u_long ifi_ibytes; /* total number of octets received */
  u_long ifi_obytes; /* total number of octets sent */
  u_long ifi_imcasts; /* packets received via multicast */
  u_long ifi_omcasts; /* packets sent via multicast */
  u_long ifi_iqdrops; /* dropped on input, this interface */
  u_long ifi_noproto; /* destined for unsupported protocol */
  struct timeval ifi_lastchange;/* last updated */
 } if_data;
/* procedure handles */
/* 这是初始化等处理函数,这些函数就是我们访问网络设备驱动程序 */ 
 int (*if_init)  /* init routine */
  __P((int));
 int (*if_output)  /* output routine (enqueue) */
  __P((struct ifnet *, struct mbuf *, struct sockaddr *,
       struct rtentry *));
 int (*if_start)  /* initiate output routine */
  __P((struct ifnet *));
 int (*if_done)  /* output complete routine */
  __P((struct ifnet *)); /* (XXX not used; fake prototype) */
 int (*if_ioctl)  /* ioctl routine */
  __P((struct ifnet *, u_long, caddr_t));
 int (*if_reset) 
  __P((int));  /* new autoconfig will permit removal */
 int (*if_watchdog)  /* timer routine */
  __P((int)); 
/* 这就是指向mbuf链表的结构 */
 struct ifqueue {
  struct mbuf *ifq_head;
  struct mbuf *ifq_tail;
  int ifq_len;
  int ifq_maxlen;
  int ifq_drops;
 } if_snd;   /* output queue */
};

有两个全局变量:ifnet和ifnet_addrs

ifnet来指向ifnet链表

ifnet_addrs是指针数组,来存储指向ifaddr的指针

ifattach来完成接口的ifnet结构的初始化,就在相应接口的attach函数中调用。如loopattach











© 著作权归作者所有

共有 人打赏支持
卜星星
粉丝 25
博文 110
码字总数 68736
作品 0
海淀
程序员
《TCP/IP详解.卷1:协议》读书笔记

从大学的时候就听余老师介绍过stevens这三卷书,还听说最后一卷没写完作者就去世了,工作后也一直听人谈起, 但还是没去真正读它。最近因为工作上很多涉及到网络,捉包,各种tcpdump的使用,...

suit ⋅ 2014/10/21 ⋅ 0

TCP/IP详解卷一概述

第1章 概述 1.1 引言 很多不同的厂家生产各种型号的计算机,它们运行完全不同的操作系统,但TCP/IP协议族允许它们互相进行通信。这一点很让人感到吃惊,因为它的作用已远远超出了起初的设想。...

Junin ⋅ 2012/07/31 ⋅ 0

WEB性能优化(一)

又上chinaunix了,老看帖子太没意思,整理出来一个东西,给大家看看,大家有兴趣多讨论讨论 。 要说web还是先从TCP/IP协议说起来的好(要丢也丢好的鸡单嘛,不要丢烂的),关于这方面的知识大 ...

JavaGG ⋅ 2009/05/06 ⋅ 1

TCP/IP详解(一)

TCP/IP详解(一) 1 概述 1.1 引言 很多不同的厂家生产各种型号的计算机,它们运行完全不同的操作系统,但TCP/IP协议组件允许它们互相进行通信。这一点很让人感到吃惊,因为它的作用已远远超...

红薯 ⋅ 2009/05/05 ⋅ 2

《TCP IP详解卷1:协议 》原书第2版下载

本书是《TCP/IP详解》第1卷的第2版,主要讲述TCP/IP协议,结合大量实例讲述TCP/IP协议族的定义原因,以及在各种不同的操作系统中的应用及工作方式。第2版在保留Stevens卓越的知识体系和写作风...

ddddd8 ⋅ 2017/12/15 ⋅ 0

APR协议分组格式的字段解释

在看《TCP/IP详解 卷1》的第四章APR协议的时候,看到APR请求和应答分组格式里的字段如下图: 其中前两个字段和倒数第4个字段,倒数第2个字段有什么区别吗? 这本书里的解释我没有看明白,解释...

xinspace ⋅ 2013/04/10 ⋅ 1

网络编程懒人入门(四):快速理解TCP和UDP的差异

原作者:MeloDev,本文由即时通讯网重新修订发布,感谢原作者的无私分享。 1、前言 对于即时通讯开者新手来说,在开始着手编写IM或消息推送系统的代码前,最头疼的问题莫过于到底该选TCP还是...

JackJiang2011 ⋅ 2017/10/27 ⋅ 0

程序员的自我修养(2)——计算机网络

几乎所有的计算机程序,都会牵涉到网络通信。因此,了解计算机基础网络知识,对每一个程序员来说都是异常重要的。 本文在介绍一些基础网络知识的同时,给出了一些高质量的系列文章链接,以方...

Jerikc ⋅ 2014/12/02 ⋅ 0

Linux网络编程书籍

计算机网络知识 讲述计算机网络的最经典的当属Andrew S.Tanenbaum的《计算机网络》第五版,这本书难易适中。 目前已经是第五版,本书作者80年代就开发出MINIX,是一个用于操作系统教学的类U...

krircc ⋅ 2015/04/01 ⋅ 0

主流的七层网络协议

参考:http://www.2cto.com/net/201310/252965.html OSI七层与TCP/IP五层网络架构详解 OSI和TCP/IP是很基础但又非常重要的网络基础知识,理解得透彻对运维工程师来说非常有帮助。今天偶又复习...

noteman ⋅ 2016/08/30 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

linux 安装docker

通过以下命令下载安装docker wget -qO- https://get.docker.com | sh 执行以上命令后输出以下内容说明安装成功,注意红框中的内容,docker安装成功后默认只有root能使用,红框中给出的提示是...

haoyuehong ⋅ 2分钟前 ⋅ 0

482. License Key Formatting - LeetCode

Question 482. License Key Formatting Solution 思路:字符串转化为char数组,从后遍历,如果是大写字母就转化为小写字母,如果是-就忽略,如果遍历了k个字符(排除-)就追加一个-。 Java实现...

yysue ⋅ 21分钟前 ⋅ 0

聊聊spring cloud gateway的LoadBalancerClientFilter

序 本文主要研究一下spring cloud gateway的LoadBalancerClientFilter GatewayLoadBalancerClientAutoConfiguration spring-cloud-gateway-core-2.0.0.RELEASE-sources.jar!/org/springfram......

go4it ⋅ 45分钟前 ⋅ 0

详解:Nginx反代实现Kibana登录认证功能

Kibana 5.5 版后,已不支持认证功能,也就是说,直接打开页面就能管理,想想都不安全,不过官方提供了 X-Pack 认证,但有时间限制。毕竟X-Pack是商业版。 下面我将操作如何使用Nginx反向代理...

问题终结者 ⋅ 52分钟前 ⋅ 0

002、nginx配置虚拟主机

一、nginx配置虚拟主机可分为三种方式,分别为: 1、基于域名的虚拟主机,通过域名来区分虚拟主机——应用:外部网站 2、基于端口的虚拟主机,通过端口来区分虚拟主机——应用:公司内部网站...

北岩 ⋅ 55分钟前 ⋅ 0

shell脚本之死循环写法

最近在学习写shell脚本,在练习if while等流程控制时,突然它们的死循环写法是怎么样的?经过百度与亲测记录如下: for死循环 #! /bin/bashfor ((;;));do date sleep 1d...

hensemlee ⋅ 57分钟前 ⋅ 0

苹果的ARKit2.0有多可怕,看了就知道

序言 ARKit主要由三部分组成: 跟踪(Tracking) 跟踪是ARKit的核心组件之一,其提供了设备在物理世界中的位置与方向信息,并对物体进行跟踪,如人脸。 2.场景理解(Scene Understanding) 场...

_小迷糊 ⋅ 58分钟前 ⋅ 0

5.1 vim介绍 5.2 vim移动光标 5.3 ,5.4vim一般模式下移动光标,复制粘贴

vim命令 vim是vi的一个升级版;vim可以显示文字的颜色 安装vim这一个包vim-enhanced 如果不知道安装包,可以使用 命令下面命令来查看vim命令是那个包安装的。 [root@linux-128 ~]# yum prov...

Linux_老吴 ⋅ 今天 ⋅ 0

vim一般模式

vim 是什么 vim是什么 ? 在之前接触Linux,编辑网卡配置文件的时候我们用过了vi ,vim简单说就是vi的升级版,它跟vi一样是Linux系统中的一个文本编辑工具。 如果系统中没有vim ,需要安装一...

李超小牛子 ⋅ 今天 ⋅ 0

docker实战

构建企业级Docker虚拟化平台实战 重点剖析虚拟化和云计算概念; 分析Docker虚拟化的概念和原理; 从0开始实战Docker虚拟化平台; 基于Docker构建Nginx WEB服务器和CentOS虚拟机; 基于开源监...

寰宇01 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部