文档章节

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

卜星星
 卜星星
发布于 2015/03/02 08:45
字数 760
阅读 62
收藏 2

        这章就是从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











© 著作权归作者所有

共有 人打赏支持
卜星星
粉丝 27
博文 111
码字总数 68736
作品 0
海淀
程序员
私信 提问
《TCP/IP详解 卷1:协议》第3章 IP:网际协议

3.1 引言 IP是TCP/IP协议族中最为核心的协议。所有的TCP、UDP、ICMP及IGMP数据都以IP数据报格式传输(见图1-4)。许多刚开始接触TCP/IP的人对IP提供不可靠、无连接的数据报传送服务感到很奇怪...

开元中国2015
11/14
0
0
《TCP/IP详解 卷1:协议》系列分享专栏

《TCP/IP详解卷1:协议》是一本详细的TCP/IP协议指南,计算机网络历久不衰的经典著作之一。 作者理论联系实际,使读者可以轻松掌握TCP/IP的知识。阅读对象为计算机专业学生、教师以及研究网络...

开元中国2015
11/15
0
0
《TCP/IP详解.卷1:协议》读书笔记

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

suit
2014/10/21
0
0
读书:TCP-IP详解卷1:协议

第一章:概述 链网传音 路由器参与的层次(路由器有lan和wan) 网络层和运输层之间的区别是最为关键的:网络层( I P)提供点到点的服务, 而运输层(T C P和U D P)提供端到端的服务。 第3...

努力一点点坚持一点点
09/04
0
0
TCP/IP详解卷一概述

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

Junin
2012/07/31
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring Cloud Consul综合整理

部分资料来自 该项目通过自动配置和Spring环境以及其他Spring编程模型习惯用法提供了Spring Boot应用程序的Consul集成。 通过一些简单的注释,您可以快速启用和配置应用程序内的通用模式,并...

Gm_ning
7分钟前
0
0
Springboot 2.0 - 集成redis

最近在入门SpringBoot,然后在感慨 SpringBoot较于Spring真的方便多时,顺便记录下自己在集成redis时的一些想法。 从springboot官网查看redis的依赖包 <dependency>           ...

别打我会飞
8分钟前
0
0
支付宝APP支付申请配置过程详解

第一步:你需要申请一个支付宝商家账户账号,登陆之后进入产品中心,进行APP支付产品接入,填写相关资料,等待审核。 第二步:进行APP支付申请信息完善 第三步:进入蚂蚁金服开放平台进行开发...

Code辉
12分钟前
0
0
避免过度同步(67)

过度使用同步会导致性能低下、死锁或其他不确定问题 在一个同步方法或代码块中,不要放弃对客户端的控制 即:在一个同步区域内部,不要调用被覆盖方法,或者是传入对象提供的方法 这些外来方...

Java搬砖工程师
12分钟前
0
0
Java获取文件类型/扩展名

import java.io.IOException;import java.io.InputStream;import java.net.URL;import java.util.HashMap;import java.util.Map;public class FileTypeUtils { private fi......

Hzhodor
16分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部