《tcp/ip具体解释卷2:实现》笔记--接口层

zhchoutai zhchoutai     2022-08-27     687

关键词:

接口层包含在本地网上发送和接收分组的硬件与软件。

我们用设备驱动程序来表示与硬件及网络接口通信的软件,网络接口是指在一个特定网络上硬件与设备驱动器之间的接口。

Net/3接口层试图在网络协议和连接到一个系统的网络设备的驱动器间提供一个与硬件无关的编程接口。这个接口层为全部的

设备提供下面支持。

1.一套精心定义的接口函数。

2.一套标准的统计与控制标志。

3.一个与设备无关的存储协议地址的方法。

4.一个标准的输出分组的排队方法。

这个不要求接口层提供可靠地分组传输,仅须要提供最大努力的服务。

更高协议层必须弥补这样的可靠性缺陷。


ifnet结构

结构ifnet结构中包括全部接口的通用信息。在系统初始化期间。分配为每一个网络设备分配一个独立的ifnet结构,每一个ifnet结构

有一个列表。它包括这个设备一个或多个协议地址。下图说明了一个接口和它地址之前的关系。

技术分享

上图的接口显示了3个存放在ifaddr结构中的协议地址。

尽管一些网络接口,比如slip,仅支持一个协议,而其它接口。如

以太网,支持多个协议并须要多个地址。

比如。一个系统可能使用一个以太网接口同一时候同于Internet和OSI两个协议。一个

类型字段标识每一个以太网帧的内容,而且由于Internet和OSI协议使用不同的编址方式。以太网接口必须有一个Internet地址

和一个OSI地址。

下图是包括在结构ifnet中的实现信息。

技术分享


ifnet结构中的下一部分显示在下图,它用来描写叙述接口的硬件特征。

技术分享


接口统计信息由下图中下一组ifnet接口成员来收集。它们被增加来支持接口的标准SNMP MIB-II变量

技术分享


结构ifnet的下一部分,显示在下图,它包括指向标准接口层函数的指针,他们把设备专用的细节从网络层分离出来。每一个接口

实现这些适用于特定设备的函数。

技术分享

以后会分析以太网、环回接口的设备专用函数,内核通过ifnet接口中的这些指针直接调用它们,比如,ifp指向一个ifnet结构。

(*if->if_start)(ifp)

调用这个接口的设备驱动程序的if_start函数。


结构ifnet的最后一个成员是接口的输出队列。

技术分享

队列作为一个mbuf链的链表来实现。


ifaddr结构

每一个接口维护一个ifaddr结构的链表,由于一些数据链路。如以太网,支持多于一个的协议。一个单独的ifaddr结构描写叙述每一个

分配给接口的地址,通常每一个协议一个地址。支持多地址的还有一个原因是非常多协议。包含TCP/IP,支持为每一个物理接口指派

多个地址。

技术分享

ifnet和ifaddr的关系例如以下:

技术分享


sockaddr结构

一个接口的编址信息不只包括一个主机地址,在通用的sockeaddr结构中维护主机地址、广播地址和网络掩码。

通过使用

一个通用的结构,将硬件与协议专用的地址细节相对于接口层隐藏起来。下图说明了这些结构的组织。

技术分享

sa_len指示地址的长度。sa_family指示地址的类型。sa_data。包括一个协议相关格式的地址。


ifnet和ifaddr的专用化

结构ifnet和ifaddr包括适用于全部网络接口和协议地址的通用信息。为了容纳其它设备和协议专用信息,每一个设备定义了而且

每一个协议分配了一个专用化版本号的ifnet和ifaddr结构。这些专用化的结构总是包括一个ifnet或ifaddr结构作为它们的第一个成员,

这样无需考虑其它专用信息就能訪问这些公共信息。

下图是专用化ifnet结构的组织。

技术分享

每一个设备的结构以一个ifnet開始,接下来诠释设备相关的数据。环回接口仅仅声明了一个ifnet,由于它不要求不论什么设备相关的

数据。

每一个协议把每一个接口的地址信息存储在一个专用化的ifaddr结构列表中。以太网协议使用一个in_ifaddr结构。而OSI协议使用

一个iso_ifaddr结构。另外,当接口被初始化时,内核为每一个接口分配一个链路层地址。它在内核中标识这个接口。

下图是一个

包括链路层地址、internet地址和OSI地址的接口地址列表。

技术分享

内核通过分配一个iifaddr结构和两个sockaddr_dl结构(一个是链路层地址本身,一个是地址掩码)来构造一个链路层地址。

结构sockaddr_dl可被OSI、ARP和路由算法訪问。

下图是一个初始化后的以太网sockaddr_dl.

技术分享

第一个sockaddr_dl初始化各中值。

第二个是一个比特掩码,用来选择出如今第一个结构中的文本内容。上图为le0.


网络初始化概述

全部我们说明的结构在内核初始化时分配和互相链接起来的。

有些设备,比如slip和环回接口,全然用软件来实现。这些伪设

备用存储在全局pdevinit数组中的一个pdevinit结构来表示,在内核配置期间构造了这个数组。

技术分享

以下概要地说明下以太网的初始化过程:

作为cpu_startup的一部分,内核查找不论什么连接的网络设备。

这个过程的细节超出了本书的范围,一旦一个设备被识别。一个

设备专用的初始化函数就被调用(LANCE以太网设备为leattach函数)。以下的操作被运行:

1.创建le_softc结构

技术分享技术分享

2.从设备复制硬件地址到结构中。

3.初始化ifnet结构。设置ifnet的例如以下成员:if_unit,if_name,if_mtu。if_init,if_reset,if_ioctl,if_output。if_start,if_flags。


if_attach函数

对接口进行初始化后,都须要调用if_attach函数来完毕接口ifnet结构的初始化。并把这个结构插入到先前配置的接口列表
中。在if_attach中,内核也为每一个接口初始化并分配一个链路层地址。下图说明了由if_attach构造的数据结构。
技术分享
在上图中。if_attach被调用了三次。每次调用时,它向ifnet列表中加入一个新的ifnet结构。

为这个接口创建一个链路层ifaddr

结构,而且初始化ifnet_addrs数组中的一项。
if_attach更新两个全局变量,第一个是if_index,它存放系统中最后一个接口的索引。

第二个是ifnet_addrs。它指向一个

ifaddr指针的数组。这个数组的每项都指向一个接口的链路层地址。这个数组提供对系统中每一个接口的链路层地址的高速
訪问。

技术分享





























《tcp/ip具体解释卷2:实现》笔记--选路请求和选路消息

内核的各种协议并不直接使用前面提供的函数来訪问选路树,而是调用几个函数:rtalloc和rtallocl是完毕路由表查询的两个函数;rtrequest函数用于加入和删除路由表项;另外大多数接口在接口连接或断开时都会调用函数rtinit。选路... 查看详情

《tcp/ip具体解释》读书笔记(21章)-tcp的超时与重传

TCP提供可靠的运输层。它使用的方法之中的一个就是确认从还有一端收到的数据。但数据和确认都有可能会丢失。TCP通过在发送时设置一个定时器来解决这样的问题。假设当定时器溢出时还没有收到确认,它就重传该数据。对于... 查看详情

tcp/ip具体解释学习笔记--tcp数据流

1.TCP的交互数据流(1)基本概念所谓交互数据流,其对TCP而言,就是他们所产生的大多数的TCP报文段中所包括的数据不超过10个字节。比如聊天等telnet的软件的TCP数据流就属于TCP交互数据流(2)经受时延的确认TCP收到数据时并不会立... 查看详情

tcp/ip具体解释--tcp的分段和ip的分片

写在前面:   分组能够发生在运输层和网络层。运输层中的TCP会分段,网络层中的IP会分片。IP层的分片很多其它的是为运输层的UDP服务的,因为TCP自己会避免IP的分片,所以使用TCP传输在IP层都不会发生分片的现象。... 查看详情

tcp/ip详解,卷1:协议

...。它是一个真正的开放系统,因为协议族的定义及其多种实现可以不用花钱或花很少的钱就可以公开地得到。它成为被称作“全球互联网”或“因特网(Internet)”的基础,该广域网(WAN)已包含超过100万台遍布世界各地的计算机... 查看详情

tcp/ip详解卷1:协议—概述

...用分别为:、1.链路层,也称作数据链路层或网络接口层,通常包括操作系统在的设备驱动程序和计算机中对应的网络接口卡,它们一起处理与电缆(或其他任何传输媒介&#x 查看详情

《tcp/ip具体解释》读书笔记(20章)-tcp的成块数据流

眼下建立在TCP协议上的网络协议特别多,有telnet。ssh,有ftp。有http等等。这些协议又能够依据数据吞吐量来大致分成两大类:(1)交互数据类型,比如telnet,ssh。这样的类型的协议在大多数情况下仅仅是做小流量的数据交换,比... 查看详情

tcp/ip协议

...现相邻计算机节点之间比特流的透明传输,尽可能屏蔽掉具体传输介质与物理设备的差异。使其上面的数据链路层不必考虑网络的具体传输介质是什么。  透明传输的意义就是:不管传的是什么,所采用的设备只是起一个通道... 查看详情

tcp/ip具体解释--icmp报文分析

一.概述:1.   ICMP同意主机或路由报告差错情况和提供有关异常情况。ICMP是因特网的标准协议,但ICMP不是高层协议,而是IP层的协议。通常ICMP报文被IP层或更高层协议(TCP或UDP)使用。一些ICMP报文把差错报文返回给用... 查看详情

《tcp/ip具体解释》读书笔记(22章)-tcp的坚持定时器

TCP通过让接收方指明希望从发送方接收的数据字节数(即窗体大小)来进行流量控制。假设窗体大小为0会发生什么情况呢?这将有效阻止发送方传送数据,直到窗体变为非0为止。ACK的传输并不可靠,也就是说,TCP不正确ACK报文... 查看详情

tcp/ip具体解释学习笔记——地址解析协议arp

一概述我们知道,IP协议是用来在不同的物理网络之间数据传输的。要在不同的网络之间数据传输,至少须要将IP协议所用的地址转换成特定网络所使用的物理地址。一般来说。就是将IPv4地址转换为mac地址。要想与一个特定的设... 查看详情

《tcp/ip具体解释》读书笔记(19章)-tcp的交互数据流

在TCP进行传输数据时。能够分为成块数据流和交互数据流两种。假设按字节计算。成块数据与交互数据的比例约为90%和10%,TCP须要同一时候处理这两类数据,且处理的算法不同。书籍本章中以Rlogin应用为例观察交互数据的传输过... 查看详情

tcp/ip详解卷1:协议—概述

...用分别为:、1.链路层,也称作数据链路层或网络接口层,通常包括操作系统在的设备驱动程序和计算机中对应的网络接口卡,它们一起处理与电缆(或其他任何传输媒介)的物理接口细节,其协议包... 查看详情

socket(代码片段)

...只是一个协议栈,就像操作系统的运行机制一样,必须要具体实现,同时还要提供对外的操作接口。这个就像操作系统会提供标准的编程接口,比如win32编程接口一样。TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Sock... 查看详情

tcp/ip协议分层模型

...过IP,相互通信的主机之间不论经过怎样的底层链路都能实现通信  分组交换  查看详情

tcp-ip详解卷2:实现pdf下载

...载了):http://putpan.com/fs/byi8beens3hu9e904/《TCP/IP详解·卷2:实现》完整而详细地介绍了TCP/IP协议是如何实现的。书中给出了约500个图例,15000行实际操作的C代码,采用举例教学的方法帮助你掌 查看详情

第2章internet地址结构[tcp/ip详解卷1:协议]

...络中使用的设备也需要IP地址。在任何情况下,IP路由器实现的转发程序使用IP地址来识别流量去向,IP地址也表示流量来源。成组的IP地址被分配给用户和组织,这些拥有者再将它们分配给设备,这通常根据某些“编号方案”进... 查看详情

tcp/ip具体解释学习笔记--tcp的坚持和保活定时器

TCP的坚持定时器1.基本概念TCP的接收方指名希望从发送方接收的数据字节(窗体大小)来进行流量控制,假设窗体大小为0。那么放送方就会阻止发送数据,直到接收方发来一个已跟新窗体大小的ACK为止,那么假设接收方发送的这... 查看详情