网络路由知识大全

一、

如果ping域名的时候出现ping:unknown host xxx.xxx
在这里插入图片描述
但是ping IP地址的时候可以通的话
在这里插入图片描述
可知是dns服务器没有配置好,查看一下配置文件/etc/resolv.conf,里面是否有nameserver xxx.xxx.xxx.xxx,比如使用dns服务器 nameserver 8.8.8.8,如果有,修改一个可用的dns服务器,如8.8.8.8或者114.114.114.114,保存退出即可!

当然,如果连ip都ping 8.8.8.8都ping不通的话,那么就说明网络配置有问题:可以这样解决:
1,首先查看ifconfig是否有内网ip地址,如果没有,那么配置一下
ifconfig eth0 192.168.1.100 up,
可以同时配置好掩码:
在这里插入图片描述
另外使用route命令查看一下当前的默认网关,如果没有,也配置一个,
route add default gw 192.168.1.1,
配置好这两个以后,就可以正常的ping通网络了,如果还不能ping www.baidu.com,那么就要去查看dns服务器啦
但是这种添加网关的方法只是一次性的。
重启虚拟机后又没有默认网关了。

第二种方法:
设置网关
vi /etc/sysconfig/network-scripts/ifcfg-eth0
添加
GATEWAY=192.168.1.1
然后重新启动网络服务:
service network restart
确保可用DNS解析
[root@localhost Desktop]# grep hosts /etc/nsswitch.conf
输出
hosts: files dns
该文件/etc/nsswith.conf是SUN公司开发的一种扩展name server switch。用于设置文件读取的顺序,如是先读取/etc/hosts文件,还是先查找DNS服务器。
hosts: files dns 指定先查找/etc/hosts文件,如果失败,则到DNS服务器查找与域名相对应的主机信息。
4)测试DNS
ping www.baidu.com
上面这种方法我不知道是否可以,因为我执行service network restart
会报错network: unrecognized service
且ping www.baidu.com还是不通
所以,以上两种方法我觉得都不行。

第三种方法:
编辑/etc/network/interfaces 的文件,
#gedit /etc/network/interfaces
在 auto lo
iface lo inet loopback
的后面加上:
auto eth0
iface eth0 inet static
address 192.168.1.252
netmask 255.255.255.0
gateway 192.168.1.1
broadcast 192.168.1.255
然后保存退出,重启 networking:
#/etc/init.d/networking restart

broadcast广播的意思嘛
在IP地址中,如果最后一个数字是255,则一定是一个广播地址。
可以测试将虚拟机重启,再ping www.baidu.com,依然可以ping通

建议使用第三种方法。

DNSmasq主用适用于NAT的家庭网络,用modem,cable modem,ADSL设备连接到因特网,对于那些需求低资源消耗且配置方便简单的小型网络(最多可支持1000台主机)是一个很好的选择。

1、bridge模式,网关DHCP不给客户端分配IP地址,客户端报文从WAN口出去,IP不变、MAC不变;
2、route模式,网关DHCP给客户端分配IP地址,客户端报文从WAN口出去,IP变、MAC变;
3、route模式+NAT关闭,网关DHCP给客户端分配IP地址,客户端报文从WAN口出去,IP不变、MAC变;
4,NAT只能处理IP呢,路由模式下,数据包经过NAT的规则链,NAT使能时则进行源IP转换,NAT关闭时不进行源IP转换。
5,桥接模式下,数据包压根儿就不经过NAT的规则链,类似于交换机,IP、MAC都不变。
6,NAT关闭直接切bridge模式,dhcp server还是保持打开就行了,即ip和mac都不变,dhcp正常。
7,DHCP的地址是广播,不转发

1、注意设置本地git的crlf属性值,避免shell脚本执行失败。
git config --global core.autocrlf false
2、lsof | wc -l
3、cross path
/opt/***/sysroots/x86_64-oesdk-linux/usr/bin/arm-oe-linux-gnueabi/arm-oe-linux-gnueabi-gcc
4、find . -name “openssl”
在编译链的根目录下搜openssl的目录
5、查找version
grep -rin “version” ./
6、find . -name stdbool.h
./usr/lib/arm-oe-linux-gnueabi/gcc/arm-oe-linux-gnueabi/4.9.3/include/stdbool.h

知识点

1)什么是链接?
链接是指两个设备之间的连接。它包括用于一个设备能够与另一个设备通信的电缆类型和协议。
2)OSI 参考模型的层次是什么?
有 7 个 OSI 层:物理层,数据链路层,网络层,传输层,会话层,表示层和应用层。
3)什么是骨干网?
骨干网络是集中的基础设施,旨在将不同的路由和数据分发到各种网络。它还处理带宽管理和各种通道。
4)什么是 LAN?
LAN 是局域网的缩写。它是指计算机与位于小物理位置的其他网络设备之间的连接。
5)什么是节点?
节点是指连接发生的点。它可以是作为网络一部分的计算机或设备。为了形成网络连接,需要两个或更多个节点。
6)什么是路由器?
路由器可以连接两个或更多网段。这些是在其路由表中存储信息的智能网络设备,例如路径,跳数等。有了这个信息,他们就可以确定数据传输的最佳路径。路由器在 OSI 网络层运行。
7)什么是点对点链接?
它是指网络上两台计算机之间的直接连接。除了将电缆连接到两台计算机的 NIC卡之外,点对点连接不需要任何其他网络设备。
8)什么是匿名 FTP?
匿名 FTP 是授予用户访问公共服务器中的文件的一种方式。允许访问这些服务器中的数据的用户不需要识别自己,而是以匿名访客身份登录。
9)什么是子网掩码?
子网掩码与 IP 地址组合,以识别两个部分:扩展网络地址和主机地址。像 IP 地址一样,子网掩码由 32 位组成。
10)UTP 电缆允许的最大长度是多少?
UTP 电缆的单段具有 90 到 100 米的允许长度。这种限制可以通过使用中继器和开关来克服
11)什么是数据封装?
数据封装是在通过网络传输信息之前将信息分解成更小的可管理块的过程。在这个过程中,源和目标地址与奇偶校验一起附加到标题中。
12)描述网络拓扑
网络拓扑是指计算机网络的布局。它显示了设备和电缆的物理布局,以及它们如何连接到彼此。
13)什么是 VPN?
VPN 意味着虚拟专用网络,这种技术允许通过网络(如 Internet)创建安全通道。
例如,VPN 允许您建立到远程服务器的安全拨号连接。
14)简要描述 NAT。
NAT 是网络地址转换。这是一种协议,为公共网络上的多台计算机提供一种方式来共享到 Internet 的单一连接。
15)OSI 参考模型下网络层的工作是什么?
网络层负责数据路由,分组交换和网络拥塞控制。路由器在此层下运行。
16)网络拓扑如何影响您在建立网络时的决策?
网络拓扑决定了互连设备必须使用什么媒介。它还作为适用于设置的材料,连接器和终端的基础。
17)什么是 RIP?
RIP,路由信息协议的简称由路由器用于将数据从一个网络发送到另一个网络。
它通过将其路由表广播到网络中的所有其他路由器来有效地管理路由数据。它以跳数为单位确定网络距离。
18)什么是不同的方式来保护计算机网络?
有几种方法可以做到这一点。在所有计算机上安装可靠和更新的防病毒程序。确保防火墙的设置和配置正确。用户认证也将有很大的帮助。所有这些组合将构成一个高度安全的网络。
19)什么是 NIC?
NIC 是网络接口卡(网卡)的缩写。这是连接到 PC 以连接到网络沈北。每个 NIC都有自己的 MAC 地址,用于标识网络上的 PC。
20)什么是 WAN?
WAN 代表广域网。它是地理上分散的计算机和设备的互连。它连接位于不同地区和国家/地区的网络。
21)OSI 物理层的重要性是什么?
物理层进行从数据位到电信号的转换,反之亦然。这是网络设备和电缆类型的考虑和设置。
22)TCP/IP 下有多少层?
有四层:网络层,互联网层,传输层和应用层。
23)什么是代理服务器,它们如何保护计算机网络?
代理服务器主要防止外部用户识别内部网络的 IP 地址。不知道正确的 IP 地址,甚至无法识别网络的物理位置。代理服务器可以使外部用户几乎看不到网络。
24)OSI 会话层的功能是什么?
该层为网络上的两个设备提供协议和方法,通过举行会话来相互通信。这包括设置会话,管理会话期间的信息交换以及终止会话时的解除过程。
25)实施容错系统的重要性是什么?有限吗?
容错系统确保持续的数据可用性。这是通过消除单点故障来实现的。但是,在某些情况下,这种类型的系统将无法保护数据,例如意外删除。
26)10Base-T 是什么意思?
10 是指数据传输速率,在这种情况下是 10Mbps。“Base”是指基带。T 表示双绞线,这是用于该网络的电缆。
27)什么是私有 IP 地址?
专用 IP 地址被分配用于内部网。这些地址用于内部网络,不能在外部公共网络上路由。这些确保内部网络之间不存在任何冲突,同时私有 IP 地址的范围同样可重复使用于多个内部网络,因为它们不会“看到”彼此。
28)什么是 NOS?
NOS 或网络操作系统是专门的软件,其主要任务是向计算机提供网络连接,以便能够与其他计算机和连接的设备进行通信。
29)什么是 DoS?
DoS 或拒绝服务攻击是试图阻止用户访问互联网或任何其他网络服务。这种攻击可能有不同的形式,由一群永久者组成。这样做的一个常见方法是使系统服务器过载,使其无法再处理合法流量,并将被强制重置。
30)什么是 OSI,它在电脑网络中扮演什么角色?
OSI(开放系统互连)作为数据通信的参考模型。它由 7 层组成,每层定义了网络设备如何相互连接和通信的特定方面。一层可以处理所使用的物理介质,而另一层则指示如何通过网络实际传输数据。
31)电缆被屏蔽并具有双绞线的目的是什么?
其主要目的是防止串扰。串扰是电磁干扰或噪声,可能影响通过电缆传输的数据。
32)地址共享的优点是什么?
通过使用地址转换而不是路由,地址共享提供了固有的安全性优势。这是因为互联网上的主机只能看到提供地址转换的计算机上的外部接口的公共 IP 地址,而不是内部网络上的私有 IP 地址。
33)什么是 MAC 地址?
MAC 或媒介访问控制,可以唯一地标识网络上的设备。它也被称为物理地址或以太网地址。MAC 地址由 6 个字节组成。
34)在 OSI 参考模型方面,TCP/IP 应用层的等同层或多层是什么?
TCP/IP 应用层实际上在 OSI 模型上具有三个对等体:会话层,表示层和应用层。
35)如何识别给定 IP 地址的 IP 类?
通过查看任何给定 IP 地址的第一个八位字节,您可以识别它是 A 类,B 类还是 C类。如果第一个八位字节以 0 位开头,则该地址为 Class A.如果以位 10 开头,则该地址为 B 类地址。如果从 110 开始,那么它是 C 类网络。
36)OSPF 的主要目的是什么?
OSPF 或开放最短路径优先,是使用路由表确定数据交换的最佳路径的链路状态路由协议。
37)什么是防火墙?
防火墙用于保护内部网络免受外部攻击。这些外部威胁可能是黑客谁想要窃取数据或计算机病毒,可以立即消除数据。它还可以防止来自外部网络的其他用户访问专用网络。
38)描述星形拓扑
星形拓扑由连接到节点的中央集线器组成。这是最简单的设置和维护之一。
39)什么是网关?
网关提供两个或多个网段之间的连接。它通常是运行网关软件并提供翻译服务的计算机。该翻译是允许不同系统在网络上通信的关键。
40)星型拓扑的缺点是什么?
星形拓扑的一个主要缺点是,一旦中央集线器或交换机被损坏,整个网络就变得不可用了。
41)什么是 SLIP?
SLIP 或串行线路接口协议实际上是在 UNIX 早期开发的旧协议。这是用于远程访问的协议之一。
42)给出一些私有网络地址的例子。
10.0.0.0,子网掩码为 255.0.0.0
172.16.0.0,子网掩码为 255.240.0.0
192.168.0.0,子网掩码为 255.255.0.0
43)什么是 tracert?
Tracert 是一个 Windows 实用程序,可用于跟踪从路由器到目标网络的数据采集的路由。它还显示了在整个传输路由期间采用的跳数。
44)网络管理员的功能是什么?
网络管理员有许多责任,可以总结为 3 个关键功能:安装网络,配置网络设置以及网络的维护/故障排除。
45)描述对等网络的一个缺点。
当您正在访问由网络上的某个工作站共享的资源时,该工作站的性能会降低。
46)什么是混合网络?
混合网络是利用客户端 - 服务器和对等体系结构的网络设置。
47)什么是 DHCP?
DHCP 是动态主机配置协议的缩写。其主要任务是自动为网络上的设备分配 IP 地址。它首先检查任何设备尚未占用的下一个可用地址,然后将其分配给网络设备。
48)ARP 的主要工作是什么?
ARP 或地址解析协议的主要任务是将已知的 IP 地址映射到 MAC 层地址。
49)什么是 TCP/IP?
TCP/IP 是传输控制协议/互联网协议的缩写。这是一组协议层,旨在在不同类型的计算机网络(也称为异构网络)上进行数据交换。
50)如何使用路由器管理网络?
路由器内置了控制台,可让您配置不同的设置,如安全和数据记录。您可以为计算机分配限制,例如允许访问的资源,或者可以浏览互联网的某一天的特定时间。
您甚至可以对整个网络中看不到的网站施加限制。
51)当您希望在不同平台(如 UNIX 系统和 Windows 服务器之间)传输文件时,可以应用什么协议?
使用 FTP(文件传输协议)在这些不同的服务器之间进行文件传输。这是可能的,因为 FTP 是平台无关的。
52)默认网关的使用是什么?
默认网关提供了本地网络连接到外部网络的方法。用于连接外部网络的默认网关通常是外部路由器端口的地址。
53)保护网络的一种方法是使用密码。什么可以被认为是好的密码?
良好的密码不仅由字母组成,还包括字母和数字的组合。结合大小写字母的密码比使用所有大写字母或全部小写字母的密码有利。密码必须不能被黑客很容易猜到,比如日期,姓名,收藏夹等等。
54)UTP 电缆的正确终止率是多少?
非屏蔽双绞线网线的正常终止是 100 欧姆。
55)什么是 netstat?
Netstat 是一个命令行实用程序。它提供有关连接当前 TCP/IP 设置的有用信息。
56)C 类网络中的网络 ID 数量是多少?
对于 C 类网络,可用的网络 ID 位数为 21。可能的网络 ID 数目为 2,提高到 21或 2,097,152。每个网络 ID 的主机 ID 数量为 2,增加到 8 减去 2,或 254。
57)使用长于规定长度的电缆时会发生什么?
电缆太长会导致信号丢失。这意味着数据传输和接收将受到影响,因为信号长度下降。
58)什么常见的软件问题可能导致网络缺陷?
软件相关问题可以是以下任何一种或其组合:

  • 客户端服务器问题
  • 应用程序冲突
  • 配置错误
  • 协议不匹配
  • 安全问题
  • 用户政策和权利问题
    59)什么是 ICMP?
    ICMP 是 Internet 控制消息协议。它为 TCP/IP 协议栈内的协议提供消息传递和通信。这也是管理由 PING 等网络工具使用的错误信息的协议。
    60)什么是 Ping?
    Ping 是一个实用程序,允许您检查网络上的网络设备之间的连接。您可以使用其IP 地址或设备名称(如计算机名称)ping 设备。
    61)什么是点对点(P2P)?
    对等是不在服务器上回复的网络。该网络上的所有 PC 都是单独的工作站。
    62)什么是 DNS?
    DNS 是域名系统。该网络服务的主要功能是为 TCP/IP 地址解析提供主机名。
    63)光纤与其他介质有什么优势?
    光纤的一个主要优点是不太容易受到电气干扰。它还支持更高的带宽,意味着可以发送和接收更多的数据。长距离信号降级也非常小。
    64)集线器和交换机有什么区别?
    集线器充当多端口中继器。然而,随着越来越多的设备连接到它,它将无法有效地管理通过它的流量。交换机提供了一个更好的替代方案,可以提高性能,特别是在所有端口上预期有高流量时。
    65)Windows RRAS 服务支持的不同网络协议是什么?
    支持三种主要的网络协议:NetBEUI,TCP/IP 和 IPX。
    66)A,B 和 C 类网络中的最大网络和主机是什么?
    对于 A 类,有 126 个可能的网络和 16,777,214 个主机
    对于 B 类,有 16,384 个可能的网络和 65,534 个主机
    对于 C 类,有 2,097,152 个可能的网络和 254 个主机
    67)直通电缆的标准颜色顺序是什么?
    橙色/白色,橙色,绿色/白色,蓝色,蓝色/白色,绿色,棕色/白色,棕色。
    68)什么协议落在 TCP/IP 协议栈的应用层之下?
    以下是 TCP/IP 应用层协议:FTP,TFTP,Telnet 和 SMTP。
    69)您需要连接两台电脑进行文件共享。是否可以这样做,而不使用集线器或路由器?
    是的,您可以使用一根电缆将两台计算机连接在一起。在这种情况下可以使用交叉型电缆。在这种设置中,一条电缆的数据传输引脚连接到另一条电缆的数据接收引脚,反之亦然。
    70)什么是 ipconfig?
    Ipconfig 是一个常用于识别网络上计算机的地址信息的实用程序。它可以显示物理地址以及 IP 地址。
    71)直通和交叉电缆有什么区别?
    直通电缆用于将计算机连接到交换机,集线器或路由器。交叉电缆用于将两个类似设备连接在一起,如 PC 到 PC 或集线器到集线器。
    72)什么是客户端/服务器?
    客户端/服务器是一种类型的网络,其中一个或多个计算机充当服务器。服务器提供集中的资源库,如打印机和文件。客户端是指访问服务器的工作站。
    73)描述网络。
    网络是指用于数据通信的计算机和外围设备之间的互连。可以使用有线电缆或通过无线链路进行网络连接。
    74)将 NIC 卡从一台 PC 移动到另一台 PC 时,MAC 地址是否也被转移?
    是的,那是因为 MAC 地址是硬连线到 NIC 电路,而不是 PC。这也意味着当 NIC卡被另一个替换时,PC 可以具有不同的 MAC 地址。
    75)解释聚类支持
    群集支持是指网络操作系统在容错组中连接多台服务器的能力。这样做的主要目的是在一台服务器发生故障的情况下,集群中的下一个服务器将继续进行所有处理。
    76)在包含两个服务器和二十个工作站的网络中,安装防病毒程序的最佳位置是哪里?
    必须在所有服务器和工作站上安装防病毒程序,以确保保护。这是因为个人用户可以访问任何工作站,并在插入可移动硬盘驱动器或闪存驱动器时引入计算机病毒。
    77)描述以太网。
    以太网是当今使用的流行网络技术之一。它是在 20 世纪 70 年代初开发的,并且基于 IEEE 中规定的规范。以太网在局域网中使用。
    78)实现环形拓扑有什么缺点?
    如果网络上的一个工作站发生故障,可能会导致整个网络丢失。另一个缺点是,当需要在网络的特定部分进行调整和重新配置时,整个网络也必须被暂时关闭。
    79)CSMA/CD 和 CSMA/CA 有什么区别?
    CSMA/CD 或碰撞检测,每当碰撞发生时重新发送数据帧。CSMA/CA 或碰撞避免,将首先在数据传输之前广播意图发送。
    80)什么是 SMTP?
    SMTP 是简单邮件传输协议的缩写。该协议处理所有内部邮件,并在 TCP/IP 协议栈上提供必要的邮件传递服务。
    81)什么是组播路由?
    组播路由是一种有针对性的广播形式,将消息发送到所选择的用户组,而不是将其发送到子网上的所有用户。
    82)加密在网络上的重要性是什么?
    加密是将信息转换成用户不可读的代码的过程。然后使用秘密密钥或密码将其翻译或解密回其正常可读格式。加密有助于确保中途截获的信息仍然不可读,因为用户必须具有正确的密码或密钥。
    83)如何安排和显示 IP 地址?
    IP 地址显示为一系列由周期或点分隔的四位十进制数字。这种安排的另一个术语是点分十进制格式。一个例子是 192.168.101.2
    84)解释认证的重要性。
    认证是在用户登录网络之前验证用户凭据的过程。它通常使用用户名和密码进行。这提供了限制来自网络上的有害入侵者的访问的安全手段。
    85)隧道模式是什么意思?
    这是一种数据交换模式,其中两个通信计算机本身不使用 IPSec。相反,将 LAN连接到中转网络的网关创建了一个使用 IPSec 协议来保护通过它的所有通信的虚拟隧道。
    86)建立 WAN 链路涉及的不同技术有哪些?
    模拟连接 - 使用常规电话线;数字连接 - 使用数字电话线;交换连接 - 使用发送方和接收方之间的多组链接来移动数据。
    87)网格拓扑的一个优点是什么?
    在一个链接失败的情况下,总会有另一个链接可用。网状拓扑实际上是最容错的网络拓扑之一。
    88)在排除计算机网络问题时,可能会发生什么常见的硬件相关问题?
    大部分网络由硬件组成。这些领域的问题可能包括硬盘故障,NIC 损坏甚至硬件启动。不正确的硬件配置也是其中一个疑难问题。
    89)可以做什么来修复信号衰减问题?
    处理这种问题的常见方法是使用中继器和集线器,因为它将有助于重新生成信号,从而防止信号丢失。检查电缆是否正确终止也是必须的。
    90)动态主机配置协议如何协助网络管理?
    网络管理员不必访问每台客户端计算机来配置静态 IP 地址,而是可以应用动态主机配置协议来创建称为可以动态分配给客户端的范围的 IP 地址池。
    91)解释网络概念的概况?
    配置文件是为每个用户设置的配置设置。例如,可以创建将用户置于组中的配置文件。
    92)什么是 Sneakernet?
    Sneakernet 被认为是最早的联网形式,其中使用可移动介质(如磁盘,磁带)物理传输数据。
    93)IEEE 在计算机网络中的作用是什么?
    IEEE 或电气和电子工程师学会是由电气和电子设备标准发布和管理的工程师组成的组织。这包括网络设备,网络接口,cablings 和连接器。
    94)TCP/IP Internet 层下有哪些协议?
    该层管理的协议有 4 种。这些是 ICMP,IGMP,IP 和 ARP。
    95)谈到网络,什么是权限?
    权限是指在网络上执行特定操作的授权许可。网络上的每个用户可以分配个人权限,具体取决于该用户必须允许的内容。
    96)建立 VLAN 的一个基本要求是什么?
    需要一个 VLAN,因为在交换机级别只有一个广播域,这意味着每当新用户连接时,该信息都会传播到整个网络。交换机上的 VLAN 有助于在交换机级别创建单独的广播域。它用于安全目的。
    97)什么是 IPv6?
    IPv6 或 Internet 协议版本 6 被开发以替代 IPv4。目前,IPv4 正在用于控制互联网流量,但 IPv4 已经饱和。IPv6 能够克服这个限制。
    98)什么是 RSA 算法?
    RSA 是 Rivest-Shamir-Adleman 算法的缩写。它是目前最常用的公钥加密算法。
    99)什么是网格拓扑?
    网格拓扑是一种设置,其中每个设备都直接连接到网络上的每个其他设备。因此,它要求每个设备具有至少两个网络连接。
    100)100Base-FX 网络的最大段长度是多少?
    使用 100Base-FX 的网段的最大允许长度为 412 米。整个网络的最大长度为 5 公里。
已标记关键词 清除标记
相关推荐
目录 《linux网络编程(第2版)》 第1篇 linux网络开发基础 第1章 linux操作系统概述 2 1.1 linux发展历史 2 1.1.1 linux的诞生和发展 2 1.1.2 linux名称的由来 3 1.2 linux的发展要素 3 1.2.1 unix操作系统 3 1.2.2 minix操作系统 4 1.2.3 posix 标准 4 1.3 linux与unix的异同 5 1.4 操作系统类型选择和内核版本的选择 5 1.4.1 常见的不同公司发行的linux异同 5 1.4.2 内核版本的选择 6 1.5 linux的系统架构 7 1.5.1 linux内核的主要模块 7 1.5.2 linux的文件结构 8 1.6 gnu通用公共许可证 9 1.6.1 gpl许可证的历史 9 1.6.2 gpl的自由理念 10 1.6.3 gpl的基本条款 11 1.6.4 关于gpl许可证的争议 12 1.7 linux软件开发的可借鉴之处 12 1.8 小结 13 第2章 linux编程环境 14 2.1 linux环境下的编辑器 14 2.1.1 vim使用简介 14 2.1.2 使用vim建立文件 15 2.1.3 使用vim编辑文本 16 2.1.4 vim的格式设置 18 2.1.5 vim配置文件.vimrc 18 2.1.6 使用其他编辑器 19 2.2 linux下的gcc编译器工具集 19 2.2.1 gcc简介 19 2.2.2 编译程序的基本知识 21 2.2.3 单个文件编译成执行文件 21 2.2.4 编译生成目标文件 22 2.2.5 多文件编译 22 2.2.6 预处理 24 2.2.7 编译成汇编语言 24 2.2.8 生成和使用静态链接库 25 2.2.9 生成动态链接库 26 2.2.10 动态加载库 29 2.2.11 gcc常用选项 31 2.2.12 编译环境的搭建 33 2.3 makefile文件简介 33 2.3.1 一个多文件的工程例子 33 2.3.2 多文件工程的编译 35 2.3.3 makefile的规则 37 2.3.4 makefile中使用变量 39 2.3.5 搜索路径 42 2.3.6 自动推导规则 43 2.3.7 递归make 44 2.3.8 makefile中的函数 46 2.4 用gdb调试程序 47 2.4.1 编译可调试程序 48 2.4.2 使用gdb调试程序 49 2.4.3 gdb常用命令 52 2.4.4 其他的gdb 59 2.5 小结 60 第3章 文件系统简介 61 3.1 linux下的文件系统 61 3.1.1 linux下文件的内涵 61 3.1.2 文件系统的创建 62 3.1.3 挂接文件系统 65 3.1.4 索引节点inode 65 3.1.5 普通文件 66 3.1.6 设备文件 66 3.1.7 虚拟文件系统vfs 68 3.2 文件的通用操作方法 72 3.2.1 文件描述符 72 3.2.2 打开创建文件open()函数、create()函数 73 3.2.3 关闭文件close()函数 76 3.2.4 读取文件read()函数 77 3.2.5 写文件write()函数 79 3.2.6 文件偏移lseek()函数 80 3.2.7 获得文件状态fstat()函数 83 3.2.8 文件空间映射mmap()函数 85 3.2.9 文件属性fcntl()函数 88 3.2.10 文件输入输出控制ioctl()函数 92 3.3 socket文件类型 93 3.4 小结 93 第4章 程序、进程和线程 94 4.1 程序、进程和线程的概念 94 4.1.1 程序和进程的差别 94 4.1.2 linux环境下的进程 95 4.1.3 进程和线程 96 4.2 进程产生的方式 96 4.2.1 进程号 96 4.2.2 进程复制fork()函数 97 4.2.3 system()函数方式 98 4.2.4 进程执行exec()函数系列 99 4.2.5 所有用户态进程的产生进程init 100 4.3 进程间通信和同步 101 4.3.1 半双工管道 101 4.3.2 命名管道 107 4.3.3 消息队列 108 4.3.4 消息队列的一个例子 114 4.3.5 信号量 116 4.3.6 共享内存 121 4.3.7 信号 124 4.4 linux下的线程 127 4.4.1 多线程编程实例 127 4.4.2 linux下线程创建函数pthread_create() 129 4.4.3 线程的结束函数pthread_join()和函数pthread_exit() 129 4.4.4 线程的属性 130 4.4.5 线程间的互斥 132 4.4.6 线程中使用信号量 133 4.5 小结 136 第2篇 linux用户层网络编程 第5章 tcp/ip协议族简介 138 5.1 osi网络分层介绍 138 5.1.1 osi网络分层结构 138 5.1.2 osi的7层网络结构 139 5.1.3 osi参考模型中的数据传输 140 5.2 tcp/ip协议栈 141 5.2.1 tcp/ip协议栈参考模型 141 5.2.2 主机到网络层协议 143 5.2.3 ip协议 144 5.2.4 网际控制报文协议(icmp) 146 5.2.5 传输控制协议(tcp) 150 5.2.6 用户数据报文协议(udp) 154 5.2.7 地址解析协议(arp) 156 5.3 ip地址分类与tcp/udp端口 158 5.3.1 因特网中ip地址的分类 159 5.3.2 子网掩码(subnet mask address) 161 5.3.3 ip地址的配置 162 5.3.4 端口 163 5.4 主机字节序和网络字节序 163 5.4.1 字节序的含义 163 5.4.2 网络字节序的转换 164 5.5 小结 166 第6章 应用层网络服务程序简介 167 6.1 http协议和服务 167 6.1.1 http协议概述 167 6.1.2 http协议的基本过程 168 6.2 ftp协议和服务 170 6.2.1 ftp协议概述 170 6.2.2 ftp协议的工作模式 172 6.2.3 ftp协议的传输方式 172 6.2.4 一个简单的ftp过程 173 6.2.5 常用的ftp工具 173 6.3 telnet协议和服务 173 6.3.1 远程登录的基本概念 174 6.3.2 使用telnet协议进行远程登录的工作过程 174 6.3.3 telnet协议 174 6.4 nfs协议和服务 175 6.4.1 安装nfs服务器和客户端 175 6.4.2 服务器端的设定 176 6.4.3 客户端的操作 176 6.4.4 showmount命令 177 6.5 自定义网络服务 177 6.5.1 xinetd/inetd 177 6.5.2 xinetd服务配置 178 6.5.3 自定义网络服务 179 6.6 小结 180 第7章 tcp网络编程基础 181 7.1 套接字编程基础知识 181 7.1.1 套接字地址结构 181 7.1.2 用户层和内核层交互过程 183 7.2 tcp网络编程流程 184 7.2.1 tcp网络编程架构 184 7.2.2 创建网络插口函数socket() 186 7.2.3 绑定一个地址端口对函数bind() 189 7.2.4 监听本地端口listen 192 7.2.5 接受一个网络请求函数accept() 194 7.2.6 连接目标网络服务器函数connect() 199 7.2.7 写入数据函数write() 200 7.2.8 读取数据函数read() 201 7.2.9 关闭套接字函数 202 7.3 服务器/客户端的简单例子 202 7.3.1 例子功能描述 202 7.3.2 服务器网络程序 202 7.3.3 服务器读取和显示字符串 205 7.3.4 客户端的网络程序 205 7.3.5 客户端读取和显示字符串 206 7.3.6 编译运行程序 206 7.4 截取信号的例子 207 7.4.1 信号处理 207 7.4.2 信号sigpipe 207 7.4.3 信号sigint 208 7.5 小结 208 第8章 服务器和客户端信息的获取 209 8.1 字节序 209 8.1.1 大端字节序和小端字节序 209 8.1.2 字节序转换函数 211 8.1.3 一个字节序转换的例子 213 8.2 字符串ip地址和二进制ip地址的转换 216 8.2.1 inet_xxx()函数 216 8.2.2 inet_pton()和inet_ntop()函数 218 8.2.3 使用8.2.1节地址转换函数的例子 219 8.2.4 使用函数inet_pton()和函数inet_ntop()的例子 221 8.3 套接字描述符判定函数issockettype() 222 8.3.1 进行文件描述符判定的函数issockettype() 222 8.3.2 main()函数 223 8.4 ip地址与域名之间的相互转换 223 8.4.1 dns原理 223 8.4.2 获取主机信息的函数 224 8.4.3 使用主机名获取主机信息的例子 227 8.4.4 函数gethostbyname()不可重入的例子 229 8.5 协议名称处理函数 230 8.5.1 xxxprotoxxx()函数 231 8.5.2 使用协议族函数的例子 232 8.6 小结 235 第9章 数据的io和复用 236 9.1 io函数 236 9.1.1 使用recv()函数接收数据 236 9.1.2 使用send()函数发送数据 238 9.1.3 使用readv()函数接收数据 239 9.1.4 使用writev()函数发送数据 239 9.1.5 使用recvmsg()函数接收数据 241 9.1.6 使用sendmsg()函数发送数据 243 9.1.7 io函数的比较 245 9.2 使用io函数的例子 245 9.2.1 客户端处理框架的例子 245 9.2.2 服务器端程序框架 247 9.2.3 使用recv()和send()函数 248 9.2.4 使用readv()和write()函数 250 9.2.5 使用recvmsg()和sendmsg()函数 252 9.3 io模型 255 9.3.1 阻塞io模型 255 9.3.2 非阻塞io模型 255 9.3.3 io复用 256 9.3.4 信号驱动io模型 256 9.3.5 异步io模型 257 9.4 select()函数和pselect()函数 258 9.4.1 select()函数 258 9.4.2 pselect()函数 260 9.5 poll()函数和ppoll()函数 261 9.5.1 poll()函数 261 9.5.2 ppoll()函数 262 9.6 非阻塞编程 263 9.6.1 非阻塞方式程序设计介绍 263 9.6.2 非阻塞程序设计的例子 263 9.7 小结 264 第10章 基于udp协议的接收和发送 265 10.1 udp编程框架 265 10.1.1 udp编程框图 265 10.1.2 udp服务器编程框架 267 10.1.3 udp客户端编程框架 267 10.2 udp协议程序设计的常用函数 267 10.2.1 建立套接字socket()和绑定套接字bind() 268 10.2.2 接收数据recvfrom()/recv() 268 10.2.3 发送数据sendto()/send() 273 10.3 udp接收和发送数据的例子 277 10.3.1 udp服务器端 277 10.3.2 udp服务器端数据处理 278 10.3.3 udp客户端 279 10.3.4 udp客户端数据处理 279 10.3.5 测试udp程序 280 10.4 udp协议程序设计中的几个问题 280 10.4.1 udp报文丢失数据 280 10.4.2 udp数据发送中的乱序 282 10.4.3 udp协议中的connect()函数 284 10.4.4 udp缺乏流量控制 285 10.4.5 udp协议中的外出网络接口 287 10.4.6 udp协议中的数据报文截断 288 10.5 小结 289 第11章 高级套接字 290 11.1 unix域函数 290 11.1.1 unix域函数的地址结构 290 11.1.2 套接字函数 291 11.1.3 使用unix域函数进行套接字编程 291 11.1.4 传递文件描述符 293 11.1.5 socketpair()函数 294 11.1.6 传递文件描述符的例子 295 11.2 广播 299 11.2.1 广播的ip地址 300 11.2.2 广播与单播的比较 300 11.2.3 广播的示例 301 11.3 多播 307 11.3.1 多播的概念 308 11.3.2 广域网的多播 308 11.3.3 多播的编程 308 11.3.4 内核中的多播 310 11.3.5 一个多播例子的服务器端 313 11.3.6 一个多播例子的客户端 315 11.4 数据链路层访问 317 11.4.1 sock_packet类型 317 11.4.2 设置套接口以捕获链路帧的编程方法 317 11.4.3 从套接口读取链路帧的编程方法 318 11.4.4 定位ip包头的编程方法 319 11.4.5 定位tcp报头的编程方法 321 11.4.6 定位udp报头的编程方法 322 11.4.7 定位应用层报文数据的编程方法 323 11.4.8 使用sock_packet编写arp请求程序的例子 323 11.5 小结 326 第12章 套接字选项 328 12.1 获取和设置套接字选项getsocketopt()/setsocketopt() 328 12.1.1 getsockopt()函数和setsocketopt()函数的介绍 328 12.1.2 套接字选项 329 12.1.3 套接字选项简单示例 330 12.2 sol_socket协议族选项 334 12.2.1 so_broadcast广播选项 334 12.2.2 so_debug调试选项 335 12.2.3 so_dontroute不经过路由选项 335 12.2.4 so_error错误选项 335 12.2.5 so_keepalive保持连接选项 336 12.2.6 so_linger缓冲区处理方式选项 337 12.2.7 so_oobinline带外数据处理方式选项 339 12.2.8 so_rcvbuf和so_sndbuf缓冲区大小选项 340 12.2.9 so_rcvlowat和so_sndlowat缓冲区下限选项 340 12.2.10 so_rcvtimeo和so_sndtimeo收发超时选项 341 12.2.11 so_reuseraddr地址重用选项 341 12.2.12 so_exclusiveaddruse端口独占选项 342 12.2.13 so_type套接字类型选项 342 12.2.14 so_bsdcompat与bsd套接字兼容选项 342 12.2.15 so_bindtodevice套接字网络接口绑定选项 343 12.2.16 so_priority套接字优先级选项 344 12.3 ipproto_ip选项 344 12.3.1 ip_hdrincl选项 344 12.3.2 ip_optnios选项 344 12.3.3 ip_tos选项 344 12.3.4 ip_ttl选项 345 12.4 ipproto_tcp选项 345 12.4.1 tcp_keepalive选项 345 12.4.2 tcp_maxrt选项 346 12.4.3 tcp_maxseg选项 346 12.4.4 tcp_nodelay和tcp_cork选项 346 12.5 使用套接字选项 348 12.5.1 设置和获取缓冲区大小 348 12.5.2 获取套接字类型的例子 353 12.5.3 使用套接字选项的综合例子 353 12.6 ioctl()函数 358 12.6.1 ioctl()函数的命令选项 358 12.6.2 ioctl()函数的io请求 360 12.6.3 ioctl()函数的文件请求 362 12.6.4 ioctl()函数的网络接口请求 362 12.6.5 使用ioctl()函数对arp高速缓存操作 369 12.6.6 使用ioctl()函数发送路由表请求 371 12.7 fcntl()函数 371 12.7.1 fcntl()函数的选项 372 12.7.2 使用fcntl()函数修改套接字非阻塞属性 372 12.7.3 使用fcntl()函数设置信号属主 372 12.8 小结 373 第13章 原始套接字 374 13.1 概述 374 13.2 原始套接字的创建 375 13.2.1 sock_raw选项 375 13.2.2 ip_hdrincl套接字选项 376 13.2.3 不需要bind()函数 376 13.3 原始套接字发送报文 376 13.4 原始套接字接收报文 377 13.5 原始套接字报文处理时的结构 377 13.5.1 ip头部的结构 377 13.5.2 icmp头部结构 378 13.5.3 udp头部结构 381 13.5.4 tcp头部结构 382 13.6 ping的例子 384 13.6.1 协议格式 384 13.6.2 校验和函数 385 13.6.3 设置icmp发送报文的头部 386 13.6.4 剥离icmp接受报文的头部 387 13.6.5 计算时间差 388 13.6.6 发送报文 389 13.6.7 接收报文 390 13.6.8 主函数过程 391 13.6.9 主函数main() 393 13.6.10 编译测试 396 13.7 洪水攻击 396 13.8 icmp洪水攻击 397 13.8.1 icmp洪水攻击的原理 397 13.8.2 icmp洪水攻击的例子 397 13.9 udp洪水攻击 401 13.10 syn洪水攻击 405 13.10.1 syn洪水攻击的原理 405 13.10.2 syn洪水攻击的例子 405 13.11 小结 409 第14章 服务器模型选择 410 14.1 循环服务器 410 14.1.1 udp循环服务器 410 14.1.2 tcp循环服务器 413 14.2 简单并发服务器 415 14.2.1 并发服务器的模型 416 14.2.2 udp并发服务器 416 14.2.3 tcp并发服务器 419 14.3 tcp的高级并发服务器模型 421 14.3.1 单客户端单进程,统一accept() 422 14.3.2 单客户端单线程,统一accept() 425 14.3.3 单客户端单线程,各线程独自accept(),使用互斥锁 427 14.4 io复用循环服务器 431 14.4.1 io复用循环服务器模型介绍 431 14.4.2 io复用循环服务器模型的例子 432 14.5 小结 436 第15章 ipv6简介 437 15.1 ipv4的缺陷 437 15.2 ipv6的特点 438 15.3 ipv6的地址 439 15.3.1 ipv6的单播地址 439 15.3.2 可聚集全球单播地址 439 15.3.3 本地使用单播地址 440 15.3.4 兼容性地址 441 15.3.5 ipv6多播地址 441 15.3.6 ipv6任播地址 442 15.3.7 主机的多个ipv6地址 442 15.4 ipv6的头部 443 15.4.1 ipv6头部格式 443 15.4.2 与ipv4头部的对比 444 15.4.3 ipv6的tcp头部 444 15.4.4 ipv6的udp头部 444 15.4.5 ipv6的icmp头部 445 15.5 ipv6运行环境 447 15.5.1 加载ipv6模块 447 15.5.2 查看是否支持ipv6 447 15.6 ipv6的结构定义 448 15.6.1 ipv6的地址族和协议族 448 15.6.2 套接字地址结构 448 15.6.3 地址兼容考虑 450 15.6.4 ipv6通用地址 450 15.7 ipv6的套接字函数 451 15.7.1 socket()函数 451 15.7.2 没有发生改变的函数 451 15.7.3 发生改变的函数 452 15.8 ipv6的套接字选项 452 15.8.1 ipv6的套接字选项 452 15.8.2 单播跳限ipv6_unicast_hops 453 15.8.3 发送和接收多播包 454 15.8.4 ipv6中获得时间戳的ioctl命令 455 15.9 ipv6的库函数 455 15.9.1 地址转换函数的差异 455 15.9.2 域名解析函数的差异 455 15.9.3 测试宏 458 15.10 ipv6的编程的一个简单例子 458 15.10.1 服务器程序 458 15.10.2 客户端程序 460 15.10.3 编译调试 461 15.11 小结 462 第3篇 linux内核网络编程 第16章 linux内核中网络部分结构以及分布 464 16.1 概述 464 16.1.1 代码目录分布 464 16.1.2 内核中网络部分流程简介 466 16.1.3 系统提供修改网络流程点 468 16.1.4 sk_buff结构 469 16.1.5 网络协议数据结构inet_protosw 471 16.2 软中断cpu报文队列及其处理 473 16.2.1 linux内核网络协议层的层间传递手段——软中断 473 16.2.2 网络收发处理软中断的实现机制 475 16.3 socket数据如何在内核中接收和发送 476 16.3.1 socket()的初始化 476 16.3.2 接收网络数据recv() 476 16.3.3 发送网络数据send() 477 16.4 小结 477 第17章 netfilter框架内报文处理 478 17.1 netfilter 478 17.1.1 netfilter简介 478 17.1.2 netfilter框架 479 17.1.3 netfilter检查时的表格 480 17.1.4 netfilter的规则 480 17.2 iptables和netfilter 481 17.2.1 iptables简介 481 17.2.2 iptables的表和链 481 17.2.3 使用iptables设置过滤规则 483 17.3 内核模块编程 485 17.3.1 内核“hello world!”程序 485 17.3.2 内核模块的基本架构 487 17.3.3 内核模块加载和卸载过程 489 17.3.4 内核模块初始化和清理函数 490 17.3.5 内核模块初始化和清理过程的容错处理 490 17.3.6 内核模块编译所需的makefile 491 17.4 5个钩子点 492 17.4.1 netfilter的5个钩子点 492 17.4.2 nf_hook宏 493 17.4.3 钩子的处理规则 494 17.5 注册/注销钩子 494 17.5.1 结构nf_hook_ops 494 17.5.2 注册钩子 495 17.5.3 注销钩子 496 17.5.4 注册注销函数 497 17.6 钩子的简单处理例子 498 17.6.1 功能描述 498 17.6.2 需求分析 498 17.6.3 ping回显屏蔽实现 498 17.6.4 禁止向目的ip地址发送数据的实现 499 17.6.5 端口关闭实现 499 17.6.6 动态配置实现 499 17.6.7 可加载内核实现代码 501 17.6.8 应用层测试代码实现 508 17.6.9 编译运行 508 17.7 一点多个钩子的优先级 508 17.8 校验和问题 509 17.9 小结 510 第4篇 综 合 案 例 第18章 一个简单web服务器的例子shttpd 512 18.1 shttpd的需求分析 512 18.1.1 shttpd启动参数可动态配置的需求 513 18.1.2 shttpd的多客户端支持的需求 515 18.1.3 shttpd支持方法的需求 515 18.1.4 shttpd支持的http协议版本的需求 516 18.1.5 shttpd支持头部的需求 517 18.1.6 shttpd定位uri的需求 517 18.1.7 shttpd支持cgi的需求 518 18.1.8 shttpd错误代码的需求 519 18.2 shttpd的模块分析和设计 519 18.2.1 shttpd的主函数 520 18.2.2 shttpd命令行解析的分析设计 521 18.2.3 shttpd配置文件解析的分析设计 523 18.2.4 shttpd的多客户端支持的分析设计 523 18.2.5 shttpd头部解析的分析设计 526 18.2.6 shttpd对uri的分析设计 526 18.2.7 shttpd支持方法的分析设计 527 18.2.8 shttpd支持cgi的分析设计 527 18.2.9 shttpd错误处理的分析设计 530 18.3 shttpd各模块的实现 532 18.3.1 shttpd命令行解析的实现 532 18.3.2 shttpd文件配置解析的实现 535 18.3.3 shttpd的多客户端支持的实现 536 18.3.4 shttpd所请求uri解析的实现 540 18.3.5 shttpd方法解析的实现 541 18.3.6 shttpd响应方法的实现 541 18.3.7 shttpd支持cgi的实现 545 18.3.8 shttpd支持http协议版本的实现 548 18.3.9 shttpd内容类型的实现 548 18.3.10 shttpd错误处理的实现 550 18.3.11 shttpd生成目录下文件列表文件的实现 552 18.3.12 shttpd主函数的实现 554 18.4 shttpd的编译、调试和测试 555 18.4.1 建立源文件 555 18.4.2 制作makefile 555 18.4.3 制作执行文件 555 18.4.4 使用不同的浏览器测试服务器程序 556 18.5 小结 557 第19章 一个简单网络协议栈的例子sip 558 19.1 sip网络协议栈的功能描述 558 19.1.1 sip网络协议栈的基本功能描述 558 19.1.2 sip网络协议栈的分层功能描述 559 19.1.3 sip网络协议栈的用户接口功能描述 559 19.2 sip网络协议栈的架构 560 19.3 sip网络协议栈的存储区缓存 561 19.3.1 sip存储缓冲的结构定义 561 19.3.2 sip存储缓冲的处理函数 565 19.4 sip网络协议栈的网络接口层 567 19.4.1 sip网络接口层的架构 568 19.4.2 sip网络接口层的数据结构 568 19.4.3 sip网络接口层的初始化函数 570 19.4.4 sip网络接口层的输入函数 571 19.4.5 sip网络接口层的输出函数 574 19.5 sip网络协议栈的arp层 577 19.5.1 sip地址解析层的架构 577 19.5.2 sip地址解析层的数据结构 577 19.5.3 sip地址解析层的映射表 579 19.5.4 sip地址解析层的arp映射表维护函数 580 19.5.5 sip地址解析层的arp网络报文构建函数 581 19.5.6 sip地址解析层的arp网络报文收发处理函数 583 19.6 sip网络协议栈的ip层 586 19.6.1 sip网际协议层的架构 586 19.6.2 sip网际协议层的数据结构 587 19.6.3 sip网际协议层的输入函数 589 19.6.4 sip网际协议层的输出函数 593 19.6.5 sip网际协议层的分片函数 594 19.6.6 sip网际协议层的分片组装函数 595 19.7 sip网络协议栈的icmp层 599 19.7.1 sip控制报文协议的数据结构 599 19.7.2 sip控制报文协议的协议支持 600 19.7.3 sip控制报文协议的输入函数 601 19.7.4 sip控制报文协议的回显应答函数 602 19.8 sip网络协议栈的udp层 603 19.8.1 sip数据报文层的数据结构 603 19.8.2 sip数据报文层的控制单元 603 19.8.3 sip数据报文层的输入函数 605 19.8.4 sip数据报文层的输出函数 606 19.8.5 sip数据报文层的建立函数 606 19.8.6 sip数据报文层的释放函数 607 19.8.7 sip数据报文层的绑定函数 607 19.8.8 sip数据报文层的发送数据函数 608 19.8.9 sip数据报文层的校验和计算 609 19.9 sip网络协议栈的协议无关层 610 19.9.1 sip协议无关层的系统架构 611 19.9.2 sip协议无关层的函数形式 611 19.9.3 sip协议无关层的接收数据函数 612 19.10 sip网络协议栈的bsd接口层 613 19.10.1 sip用户接口层的架构 613 19.10.2 sip用户接口层的套接字建立函数 613 19.10.3 sip用户接口层的套接字关闭函数 614 19.10.4 sip用户接口层的套接字绑定函数 614 19.10.5 sip用户接口层的套接字连接函数 615 19.10.6 sip用户接口层的套接字接收数据函数 615 19.10.7 sip用户接口层的发送数据函数 616 19.11 sip网络协议栈的编译 617 19.11.1 sip的文件结构 617 19.11.2 sip的makefile 618 19.11.3 sip的编译运行 618 19.12 小结 618 第20章 一个简单防火墙的例子sipfw 620 20.1 sipfw防火墙的功能描述 620 20.1.1 sipfw防火墙对主机进行网络数据过滤的功能描述 620 20.1.2 sipfw防火墙用户设置防火墙规则的功能描述 621 20.1.3 sipfw防火墙配置文件等附加功能的功能描述 621 20.2 sipfw需求分析 621 20.2.1 sipfw防火墙条件和动作 621 20.2.2 sipfw防火墙支持过滤的类型和内容 622 20.2.3 sipfw防火墙过滤的方式和动作 625 20.2.4 sipfw防火墙的配置文件 626 20.2.5 sipfw防火墙命令行配置格式 627 20.2.6 sipfw防火墙的规则文件格式 628 20.2.7 sipfw防火墙的日志文件数据格式 630 20.2.8 sipfw防火墙构建所采用的技术方案 630 20.3 使用netlink进行用户空间和内核空间数据交互 631 20.3.1 netlink的用户空间程序设计 632 20.3.2 netlink的内核空间api 635 20.4 使用proc进行内存数据用户空间映射 637 20.4.1 proc虚拟文件系统的结构 637 20.4.2 创建proc虚拟文件 638 20.4.3 删除proc虚拟文件 639 20.4.4 proc文件的写函数 639 20.4.5 proc文件的读函数 640 20.5 内核空间的文件操作函数 641 20.5.1 内核空间的文件结构 641 20.5.2 内核空间的文件建立操作 641 20.5.3 内核空间的文件读写操作 642 20.5.4 内核空间的文件关闭操作 643 20.6 sipfw防火墙的模块分析和设计 644 20.6.1 sipfw防火墙的总体架构 644 20.6.2 sipfw防火墙的用户命令解析 645 20.6.3 sipfw用户空间与内核空间的交互 649 20.6.4 sipfw防火墙内核链上的规则处理 651 20.6.5 sipfw防火墙的proc虚拟文件系统 654 20.6.6 sipfw防火墙的配置文件和日志文件处理 655 20.6.7 sipfw防火墙的过滤模块设计 657 20.7 sipfw防火墙各功能模块的实现 660 20.7.1 sipfw防火墙的命令解析代码 660 20.7.2 sipfw防火墙的过滤规则解析模块代码 664 20.7.3 sipfw防火墙的网络数据拦截模块代码 666 20.7.4 sipfw防火墙的proc虚拟文件系统 668 20.7.5 sipfw防火墙对配置文件的解析 670 20.7.6 sipfw防火墙内核模块初始化和退出 671 20.7.7 用户空间处理主函数 672 20.8 编译、调试和测试 673 20.8.1 用户程序和内核程序的makefile 673 20.8.2 编译及运行 674 20.8.3 下发过滤规则,测试过滤结果 674 20.9 小结 676
第一章 概论 .................................................................................................................. 1 1.1 网络的历史....................................................................................................... 1 1.2 OSI 模型........................................................................................................... 3 1.3 Internet 体系模型.............................................................................................. 4 1.4 客户/服务器模型............................................................................................... 5 1.4 UNIX 的历史 ................................................................................................... 7 1.4.1 Unix 诞生前的故事 ................................................................................. 7 1.4.2 UNIX 的诞生.......................................................................................... 8 1.4.3 1979 – UNIX 第七版 ............................................................................. 10 1.4.4 UNIX 仅仅是历史吗?............................................................................. 11 1.5 Linux 的发展.................................................................................................. 11 1.5.1 Linux 的发展历史 .................................................................................. 12 1.5.2 什么叫 GNU? ...................................................................................... 12 1.5.3 Linux 的特色 ........................................................................................ 13 1.5.4 硬件需求............................................................................................... 14 1.5.5 Linux 可用的软件 ................................................................................. 14 1.5.6 为什么选择 Linux ? ............................................................................ 15 1.6 Linux 和 Unix 的发展 .................................................................................... 15 第二章 UNIX/Linux 模型...............................................................................................17 2.1 UNIX/Linux 基本结构.......................................................................................17 2.2 输入和输出......................................................................................................19 2.2.1 UNIX/Linux 文件系统简介 ......................................................................19 2.2.2 流和标准 I/O 库......................................................................................20 2.3 进程 ................................................................................................................21 第三章 进程控制 ..........................................................................................................22 3.1 进程的建立与运行 ...........................................................................................22 3.1.1 进程的概念 ............................................................................................22 3.1.2 进程的建立 ............................................................................................22 3.1.3 进程的运行 ............................................................................................24 3.1.4 数据和文件描述符的继承 .......................................................................29 3.2 进程的控制操作...............................................................................................31 3.2.1 进程的终止 ............................................................................................31 3.2.2 进程的同步 ............................................................................................32 3.2.3 进程终止的特殊情况 ..............................................................................33 3.2.4 进程控制的实例 .....................................................................................33 3.3 进程的属性......................................................................................................38 3.3.1 进程标识符 ............................................................................................38 3.3.2 进程的组标识符 .....................................................................................39 3.3.3 进程环境................................................................................................40 3.3.4 进程的当前目录 .....................................................................................42 3.3.5 进程的有效标识符..................................................................................43 3.3.6 进程的资源 ............................................................................................44 3.3.7 进程的优先级.........................................................................................45 3.4 守护进程 .........................................................................................................46 3.4.1 简介.......................................................................................................46 3.4.2 守护进程的启动 ............................................................................................46 3.4.3 守护进程的错误输出 ..............................................................................46 3.4.4 守护进程的建立 .....................................................................................48 3.5 本章小结 .........................................................................................................49 第四章 进程间通信.......................................................................................................50 4.1 进程间通信的一些基本概念 .............................................................................50 4.2 信号 ................................................................................................................50 4.2.1 信号的处理 ............................................................................................52 4.2.2 信号与系统调用的关系...........................................................................54 4.2.3 信号的复位 ............................................................................................55 4.2.4 在进程间发送信号..................................................................................56 4.2.5 系统调用 alarm()和 pause()......................................................................58 4.2.6 系统调用 setjmp()和 longjmp().................................................................62 4.3 管道 ................................................................................................................63 4.3.1 用 C 来建立、使用管道 ..........................................................................65 4.3.2 需要注意的问题 .....................................................................................72 4.4 有名管道 .........................................................................................................72 4.4.1 有名管道的创建 .....................................................................................72 4.4.2 有名管道的 I/O 使用...............................................................................73 4.4.3 未提到的关于有名管道的一些注意 .........................................................75 4.5 文件和记录锁定...............................................................................................75 4.5.1 实例程序及其说明..................................................................................75 4.5.2 锁定中的几个概念..................................................................................78 4.5.3 System V 的咨询锁定..............................................................................78 4.5.4 BSD 的咨询式锁定 .................................................................................79 4.5.5 前面两种锁定方式的比较 .......................................................................81 4.5.6 Linux 的其它上锁技术 ............................................................................81 4.6 System V IPC ...................................................................................................84 4.6.1 ipcs 命令 ................................................................................................85 4.6.2 ipcrm 命令..............................................................................................86 4.7 消息队列(Message Queues)...........................................................................86 4.7.1 有关的数据结构 .....................................................................................86 4.7.2 有关的函数 ............................................................................................89 4.7.3 消息队列实例——msgtool,一个交互式的消息队列使用工具 ..................94 4.8 信号量(Semaphores) .........................................................................................97 4.8.1 有关的数据结构 .....................................................................................98 4.8.2 有关的函数 ............................................................................................99 4.8.3 信号量的实例——semtool,交互式的信号量使用工具........................... 103 4.9 共享内存(Shared Memory) .............................................................................. 109 4.9.1 有关的数据结构 ................................................................................... 109 4.9.2 有关的函数 .......................................................................................... 110 4.9.3 共享内存应用举例——shmtool,交互式的共享内存使用工具................... 112 4.9.4 共享内存与信号量的结合使用 .............................................................. 114 第五章 通信协议简介 ................................................................................................. 120 5.1 引言 .............................................................................................................. 120 5.2 XNS(Xerox Network Systems)概述.............................................................. 120 5.2.1 XNS 分层结构...................................................................................... 120 IPX/SPX 协议概述........................................................................................ 122 5.3 5.3.1 网际包交换(IPX) ............................................................................. 122 5.3.2 排序包交换(SPX)............................................................................. 124 5.4 Net BIOS 概述................................................................................................ 124 5.5 Apple Talk 概述 .............................................................................................. 125 5.6 TCP/IP 概述................................................................................................... 126 5.6.1 TCP/IP 结构模型 .................................................................................. 126 5.6.2 Internet 协议(IP)............................................................................... 127 5.6.3 传输控制协议(TCP) ......................................................................... 132 5.6.4 用户数据报文协议................................................................................ 134 5.7 小结 .............................................................................................................. 135 第六章 Berkeley 套接字 ............................................................................................. 136 6.1 引言 ............................................................................................................. 136 6.2 概述 ............................................................................................................. 136 6.2.1 Socket 的历史...................................................................................... 136 6.2.2 Socket 的功能...................................................................................... 136 6.2.3 套接字的三种类型............................................................................... 138 6.3 Linux 支配的网络协议................................................................................... 141 6.3.1 什么是 TCP/IP? ................................................................................... 141 6.4 套接字地址................................................................................................... 142 6.4.1 什么是 Socket? .................................................................................. 142 6.4.2 Socket 描述符...................................................................................... 142 6.4.3 一个套接字是怎样在网络上传输数据的?............................................ 143 6.5 套接字的一些基本知识 ................................................................................. 144 6.5.1 基本结构............................................................................................. 144 6.5.2 基本转换函数...................................................................................... 145 6.6 基本套接字调用............................................................................................ 147 6.6.1 socket() 函数....................................................................................... 147 6.6.2 bind() 函数 ......................................................................................... 148 6.6.3 connect()函数 ...................................................................................... 150 6.6.4 listen() 函数........................................................................................ 151 6.6.5 accept()函数 ........................................................................................ 152 6.6.6 send()、recv()函数 ............................................................................... 154 6.6.7 sendto() 和 recvfrom() 函数 ................................................................. 155 6.6.8 close()和 shutdown()函数...................................................................... 156 6.6.9 setsockopt() 和 getsockopt() 函数 ......................................................... 157 6.6.10 getpeername()函数.............................................................................. 157 6.6.11 gethostname()函数.............................................................................. 158 6.7 DNS 的操作.................................................................................................. 158 6.7.1 理解 DNS............................................................................................ 158 6.7.2 和 DNS 有关的函数和结构 .................................................................. 158 6.7.3 DNS 例程............................................................................................ 159 6.8 套接字的 Client/Server 结构实现的例子.......................................................... 160 6.8.1 简单的流服务器 .................................................................................. 161 6.8.2 简单的流式套接字客户端程序 ............................................................. 163 6.8.3 数据报套接字例程(DatagramSockets)............................................... 165 6.9 保留端口 ...................................................................................................... 169 6.9.1 简介.................................................................................................... 169 6.9.2 保留端口............................................................................................. 170 6.10 五种 I/O 模式................................................................................................. 179 6.10.1 阻塞 I/O 模式 .................................................................................... 179 6.10.2 非阻塞模式 I/O.................................................................................. 180 6.10.3 I/O 多路复用 ..................................................................................... 181 6.10.4 信号驱动 I/O 模式 ............................................................................. 182 6.10.5 异步 I/O 模式 .................................................................................... 185 6.10.6 几种 I/O 模式的比较.......................................................................... 186 6.10.7 fcntl()函数 ......................................................................................... 186 6.10.8 套接字选择项 select()函数.................................................................. 187 6.11 带外数据..................................................................................................... 190 6.11.1 TCP 的带外数据 ................................................................................ 190 6.11.2 OOB 传输套接字例程(服务器代码 Server.c) ................................... 193 6.11.3 OOB 传输套接字例程(客户端代码 Client.c).................................... 196 6.11.4 编译例子 ........................................................................................... 199 6.12 使用 Inetd(Internet 超级服务器) ............................................................... 199 6.12.1 简介.................................................................................................. 199 6.12.2 一个简单的 inetd 使用的服务器程序 hello inet service.......................... 199 6.12.3 /etc/services 和 /etc/inetd.conf 文件 ..................................................... 200 6.12.4 一个复杂一些的 inetd 服务器程序 ...................................................... 201 6.12.5 一个更加复杂的 inetd 服务器程序 ...................................................... 203 6.12.6 程序必须遵守的安全性准则............................................................... 205 6.12.7 小结.................................................................................................. 205 6.13 本章总结 .................................................................................................... 205 第七章 网络安全性..................................................................................................... 206 7.1 网络安全简介 ................................................................................................ 206 7.1.1 网络安全的重要性................................................................................ 206 7.1.2 信息系统安全的脆弱性......................................................................... 207 7.2 Linux 网络不安全的因素 ................................................................................ 209 7.3 Linux 程序员安全........................................................................................... 211 7.3.1 系统子程序 .......................................................................................... 212 7.3.2 标准 C 函数库....................................................................................... 214 7.3.3 书写安全的 C 程序................................................................................ 216 7.3.4 SUID/SGID 程序指导准则...................................................................... 217 7.3.5 root 程序的设计.................................................................................... 218 7.4 小结 .............................................................................................................. 219 第八章 Ping 例程 ....................................................................................................... 220 8.1 Ping 命令简介 ................................................................................................ 220 8.2 Ping 的基本原理............................................................................................. 220 8.3 小结 .............................................................................................................. 221 第九章 tftp 例程......................................................................................................... 222 9.1 tftp 协议简介.................................................................................................. 222 9.2 tftp 的使用 ..................................................................................................... 222 9.3 tftp 的原理 ..................................................................................................... 223 9.3 tftp 的基本结构 .............................................................................................. 223 9.4 小节 .............................................................................................................. 225 第十章 远程命令执行 ................................................................................................. 226 10.1 引言 ............................................................................................................ 226 10.2 rcmd 函数和 rshd 服务器............................................................................... 227 10.3 rexec 函数和 rexecd 服务器........................................................................... 233 第十一章 远程注册..................................................................................................... 235 11.1 简介............................................................................................................. 235 11.2 终端行律和伪终端........................................................................................ 235 11.3 终端方式字和控制终端................................................................................. 239 11.4 rlogin 概述.................................................................................................... 242 11.5 窗口环境...................................................................................................... 242 11.6 流控制与伪终端方式字................................................................................. 243 11.7 rlogin 客户程序............................................................................................. 245 11.8 rlogin 服务器 ................................................................................................ 246 第十二章 远程过程调用.............................................................................................. 249 12.1 引言 ............................................................................................................ 249 12.2 远程过程调用模型 ....................................................................................... 249 12.3 传统过程调用和远程过程调用的比较 ........................................................... 250 12.4 远程过程调用的定义.................................................................................... 252 12.5 远程过程调用的有关问题............................................................................. 252 12.5.1 远程过程调用传送协议....................................................................... 253 12.5.2 Sun RPC ........................................................................................... 254 12.5.3 Xerox Courier .................................................................................... 254 12.5.4 Apollo RPC........................................................................................ 255 12.6 stub 过程简介............................................................................................... 256 12.7 rpcgen 简介 .................................................................................................. 256 12.8 分布式程序生成的例子 ................................................................................ 257 12.8.1 我们如何能够构造出一个分布式应用程序........................................... 257 12.9 小结 ............................................................................................................ 283 第十三章 远程磁带的访问 .......................................................................................... 284 13.1 简介 ............................................................................................................ 284 13.2 Linux 磁带驱动器的处理 .............................................................................. 285 13.3 rmt 协议....................................................................................................... 285 13.4 rmt 服务器设计分析 ..................................................................................... 286 第十四章 WWW 上 HTTP 协议.................................................................................. 290 14.1 引言............................................................................................................ 290 14.2 HTTP 客户请求........................................................................................... 290 14.2.1 客户端 .............................................................................................. 290 14.2.2 服务器端........................................................................................... 290 14.2.3 Web 请求简介.................................................................................... 291 14.2.4 HTTP – HyperText Transfer Protocol 超文本传输协议 ........................... 295 14.3 Web 编程 .................................................................................................... 297 14.4 小结 ........................................................................................................... 301 附录 A 有关网络通信的服务和网络库函数................................................................... 302 附录 B Vi 使用简介..................................................................................................... 319 B.1 Vi 基本观念................................................................................................... 319 B.1.1 进入与离开.......................................................................................... 319 B.1.2 Vi 输入模式 ......................................................................................... 319 B.2 Vi 基本编辑................................................................................................... 320 B.2.1 删除与修改.......................................................................................... 320 B.3 Vi 进阶应用................................................................................................... 320 B.3.1 移动光标 ............................................................................................. 320 B.3.2 进阶编辑命令 ...................................................................................... 322 B.3.3 文件命令 ............................................................................................. 322 附录 C Linux 下 C 语言使用与调试简介 ...................................................................... 324 C.1 C 语言编程 ................................................................................................... 324 C.2 什么是 C? ..................................................................................................... 324 C.3 GNU C 编译器............................................................................................... 324 C.3.1 使用 GCC ............................................................................................ 324 C.3.2 GCC 选项 ............................................................................................ 325 C.3.3 优化选项 ............................................................................................. 325 C.3.4 调试和剖析选项................................................................................... 325 C.3.5 用 gdb 调试 GCC 程序.......................................................................... 326 C.4 另外的 C 编程工具 ........................................................................................ 330 C.4.1 Xxgdb.................................................................................................. 330 C.4.2 Calls .................................................................................................... 331 C.4.3 cproto .................................................................................................. 332 C.4.4 Indent .................................................................................................. 333 C.4.5 Gprof................................................................................................... 334 C.4.6 f2c 和 p2c ............................................................................................ 335 附录 D Ping 源码 ........................................................................................................ 336 附录 E TFTP 服务器程序源码 ..................................................................................... 362
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页