第七章 域和协议

原创 2016年08月31日 16:16:22

一、本章通过讲解Internet协议在系统初始化期间构造的数据结构,来为下文中讲解IP协议的各种操作提供了知识背景。文中会首先介绍协议域(同一个域下的各个协议在一个协议域中,但不一定在一层中,如IP协议和TCP协议都在Internet协议域中,但是他们不在一层)和一个叫做protosw的结构
二、系统在初始化阶段,建立起来的数据结构的总示意图在第154页的图7-16,图中用一个domains头指针将各个协议域用链表连接起来,每一个协议域(domain结构)有自己的一个protosw结构的数组,该数组中的每个元素表示该协议域内的一种协议。在数据结构的构造上,协议域有指针指向protosw结构的数组头部和尾部,protosw结构的数组有指针指向协议域地址。
三、协议域domain结构的功能:设置协议族的标识(如AF_INET等),设置域名称,对协议域的各种操作或者控制函数指针(根据协议域的不同,函数指针指向的函数会不同)
四、protosw结构的功能:该结构将一个协议域中的所有协议中的这个结构都组织到一个数组中。数组中的每一个元素表示该协议域下的一种协议。在protosw结构中,除了一些标识协议的常量,也有一些函数指针,这些函数指针负责对协议的各种操作(在图7-11中描述了协议的五个主要的入口点),当然函数指针里面也有初始化函数的函数指针。
五、系统初始化期间,内核调用domaininit函数来把domain结构和protosw结构连接到相应的地方(把他们搞成一个链表,如二中所述)
六、文中以IP协议的domain和protosw结构为例讲解了一下,比较好理解。
七、文中介绍了三个函数:

  • 1.pffindproto函数(有三个参数,源码没有看,不知道找的机制具体是什么):通过协议编号(如IPPROTO_TCP)查找protosw结构的数组中的一个元素(即协议)
  • 2.pffindtype函数(有两个参数,源码没有看,不知道找的机制具体是什么):通过类型(如SOCK_STREAM)查找protosw结构的数组中的一个元素(即协议)
  • 3.pfctlinput函数:该函数给每个域中的每个协议发送一个控制请求。在可能影响每个协议的事件发生时,该函数被调用。如接口被关闭,路由表发生改变等(但是如接口被关闭的情况,这一块跟前面章节中的那些ifnet,ip编址这些有什么样的联系,本章没有解释,估计是在pfctlinput函数里面调用的各个协议的函数指针及其参数里会与介绍)
版权声明:本文为博主原创文章,未经博主允许不得转载。

USB3.0规范中译本 第七章 链路层(1)

本文为CoryXie原创译文,转载及有任何问题请联系cory.xie#gmail.com。 链路层具有维持链路连接性的责任,从而确保在两个链路伙伴之间的成功数据传输。基于包(packets)和链...
  • bcs_01
  • bcs_01
  • 2016年10月31日 10:34
  • 1020

Unix域协议简介

前言 已经不记得什么时候第一次接触Unix Domain Socket(下文简称UDS),在我印象中,所谓UDS基本等同于本地环回接口(lo)上的TCP或者UDP,而事实上UDS所用的API也确...
  • cszhouwei
  • cszhouwei
  • 2014年07月11日 21:43
  • 1901

Unix域协议--Linux本地IPC

Unix domain socket 或者 IPC socket是一种终端,可以使同一台操作系统上的两个或多个进程进行数据通信。与管道相比,Unix domain sockets 既可以使用字节流,又...
  • iamoyjj
  • iamoyjj
  • 2017年05月09日 07:50
  • 362

Socket编程实践(13) --UNIX域协议

UNIX域协议   UNIX域套接字与TCP相比, 在同一台主机上, UNIX域套接字更有效率, 几乎是TCP的两倍(由于UNIX域套接字不需要经过网络协议栈,不需要打包/拆包,计算校验和,维护序号和...
  • hanqing280441589
  • hanqing280441589
  • 2015年03月14日 20:56
  • 3248

解析“大安全”时代:网络安全超越网络本身

为何网络化生存已经变成现实的今天,互联网安全形势变得如此严峻?对此周鸿祎认为,最根本的原因是一切皆可编程,万物都要连接,有连接就有漏洞,有漏洞就会产生威胁。 未来网络战时时处处都在“不宣而战”,...
  • ufent2017
  • ufent2017
  • 2017年12月08日 11:48
  • 7

java使用域账号登陆,ldap协议

我们在进行内部管理系统时,往往需要根据电脑域的账号来进行登陆控制。java在使用域账号登陆的时是使用到javax.naming.*来进行的,使用ldap协议。具体代码如下:public static ...
  • hua245942641
  • hua245942641
  • 2015年11月16日 11:54
  • 1022

深入理解计算机系统(第二版) 家庭作业 第七章

7.6 符号 swap.o 条目 符号类型 定义符号的模块 所属的节 buf Yes extern ...
  • zhanyu1990
  • zhanyu1990
  • 2013年08月24日 13:24
  • 2822

C++ Primer Plus第六版 第七章 编程练习答案

/***************************************************************************************************...
  • zhaoshu01234
  • zhaoshu01234
  • 2014年07月19日 20:34
  • 4943

flask web开发第七章如何创建项目中的数据库

很简单 1. $ python manage.py db init 2. $ python manage.py shell >>> db.create_all() 完成----...
  • clean_water
  • clean_water
  • 2016年12月27日 19:27
  • 504

《python核心编程第二版》第七章练习解析

1.字典方法。哪些字典方法可以把两个字典合并到一起? 有个update()方法,不过如果key相同的话,会用后者的key-value覆盖前者的 2.略 3.字典和列表的方法。 (a) 建一...
  • u013938528
  • u013938528
  • 2015年05月01日 10:49
  • 835
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:第七章 域和协议
举报原因:
原因补充:

(最多只允许输入30个字)