Linux网络协议和管理
一.网络设备基本知识
二.TCP/IP协议栈简介
1.概述
- 网络协议通常工作在不同的层中,每一层分别负责不同的通信功能。一个协议族,
比如T C P / I P,是一组不同层次上的多个协议的组合。T C P / I P通常被认为
是一个四层协议系统。如图2.1所示。 - 其每一层负责不同的传输任务:
- 1)数据链路层,有时也称网络接口层,通常包括操作系统中的设备驱动程序和计算机
中对应的网络接口卡。它们一起处理与电缆(或其他任何传输媒介)的物理接口细节。
(ISO网络7层模型中最底层为物理层,其为启动、维护和关闭物理链路规定了:
电器特性、机械特性、过程特性和功能特性) - 2)网络层,有时也称作互联网层,其主要负责处理分组在网络中的活动,例如分组的选路。在
TCP/IP协议族中,网络层协议包括IP协议(网际协议),ICMP协议(Internet互联网控制报文协议),以及IGMP协议(Internet组管理协议)。 - 3)运输层主要为两台主机上的应用程序提供端到端的通信。在TCP/IP协议族中,有两个
互不相同的传输协议:TCP(传输控制协议)和UDP(用户数据报协议)。
TCP为两台主机提供高可靠性的数据通信。它所做的工作包括把应用程序交给它的数据分
成合适的小块交给下面的网络层,确认接收到的分组,设置发送最后确认分组的超时时钟
等。由于运输层提供了高可靠性的端到端的通信,因此应用层可以忽略所有这些细节。
而另一方面,UDP则为应用层提供一种非常简单的服务。它只是把称作数据报的分组
从一台主机发送到另一台主机,但并不保证该数据报能到达另一端。任何必需的可靠
性必须由应用层来提供。这两种运输层协议分别在不同的应用程序中有不同的用途。 - 4)应用层负责处理特定的应用程序细节。几乎各种不同的TCP/IP实现都会提供下面这些
通用的应用程序:
•Telnet远程登录。
•FTP文件传输协议。
•SMTP简单邮件传送协议。
•SNMP简单网络管理协议。
- 1)数据链路层,有时也称网络接口层,通常包括操作系统中的设备驱动程序和计算机
2.数据链路层
-
在TCP/IP协议族中,数据链路层主要有三个目的
- (1)为IP模块发送和接收IP数据报;
- (2)为ARP模块发送ARP请求和接收ARP应答;
- (3)为RARP发送RARP请求和接收RARP应答。
-
TCP/IP支持多种不同的链路层协议,这取决于网络所使用的硬件,如以太网、
令牌环网、FDDI(光纤分布式数据接口)及RS-232串行线路等。
以太网
-
以太网这个术语一般是指数字设备公司(DigitalEquipmentCorp.)、英特尔公司(IntelCorp.)
和Xerox公司在1982年联合公布的一个标准。它是当今TCP/IP采用的主要的局域网技术。它采用一种
称作CSMA/CD的媒体接入方法,其意思是带冲突检测的载波侦听多路接入(CarrierSense,
MultipleAccesswithCollisionDetection)。它的速率为10Mb/s,地址为48bit。 -
后来,IEEE(电子电气工程师协会)802委员会公布了一个稍有不同的标准
集,其中802.3针对整个CSMA/CD网络,802.4针对令牌总线网络,
802.5针对令牌环网络。这三者的共同特性由802.2标准来定义,那就是8
02网络共有的逻辑链路控制(LLC)。 -
IEEE802.2-802.3和以太网的数据帧封装格式如图2.2.1。
- IEEE802.2-802.3和以太网的数据帧封装,两种帧格式都采用48bit(6字节)的目
的地址和源地址(802.3允许使用16 bit的地址,但一般是48bit地址)。这就是硬件
地址,也就是电脑网卡的MAC地址。ARP和RARP协议对32bit的IP地址和48bit的硬件地
址进行映射。 - 接下来的2个字节在两种帧格式中互不相同。在802标准定义的帧格式中,长度字段
是指它后续数据的字节长度,但不包括CRC检验码。以太网的类型字段定义了后续数据
的类型。在802标准定义的帧格式中,类型字段则由后续的子网接入协议(Sub-network
AccessProtocol,SNAP)的首部给出。 - 在以太网帧格式中,类型字段之后就是数据;而在802帧格式中,跟随在后面的是3字节
的802.2LLC和5字节的802.2SNAP。目的服务访问点(DestinationServiceAccessPoint,
DSAP)和源服务访问点(SourceServiceAccessPoint,SSAP)的值都设为0xaa。
Ctrl字段的值设为3。随后的3个字节orgcode都置为0。再接下来的2个字节类型字段和
以太网帧格式一样。 - CRC字段用于帧内后续字节差错的循环冗余码检验(检验和)(它也被称为FCS或帧检验
序列)。802.3标准定义的帧和以太网的帧都有最小长度要求。802.3规定数据部分必须
至少为38字节,而对于以太网,则要求最少要有46字节。
- IEEE802.2-802.3和以太网的数据帧封装,两种帧格式都采用48bit(6字节)的目
-
IEEE802.2-802.3和以太网的数据帧封装格式
串行接口链路层协议SLIP
- SLIP的全称是Serial Line IP。它是一种在串行线路上对IP数据报进行封装的
简单形式,在RFC1055[Romkey1988]中有详细描述。SLIP适用于家庭中每台计算
机几乎都有的RS-232串行端口和高速调制解调器接入Internet。
串行接口链路层协议PPP(点对点协议)
-
PPP,点对点协议修改了SLIP协议中的所有缺陷。PPP包括以下三个部分:
- 1)在串行链路上封装IP数据报的方法。PPP既支持数据为8位和无奇偶检验的
异步模式(如大多数计算机上都普遍存在的串行接口),还支持面向比特的同步链接。 - 2)建立、配置及测试数据链路的链路控制协议(LCP:LinkControlProtocol)。
它允许通信双方进行协商,以确定不同的选项。 - 3)针对不同网络层协议的网络控制协议(NCP:NetworkControlProtocol)体系。
当前RFC定义的网络层有IP、OSI网络层、DECnet以及AppleTalk。例如,
IPNCP允许双方商定是否对报文首部进行压缩,类似于CSLIP(缩写词NCP也可用在TCP的前面)。
- 1)在串行链路上封装IP数据报的方法。PPP既支持数据为8位和无奇偶检验的
-
PPP数据帧的格式
-
PPP数据帧字段
- 每一帧都以标志字符0x7e开始和结束。紧接着是一个地址字节,值始终是0xff,
然后是一个值为0x03的控制字节。 - 接下来是协议字段,类似于以太网中类型字段的功能。当它的值为0x0021时,
表示信息字段是一个IP数据报;值为0xc021时,表示信息字段是链路控制数据;
值为0x8021时,表示信息字段是网络控制数据。 - CRC字段(或FCS,帧检验序列)是一个循环冗余检验码,以检测数据帧中的错误。
- 每一帧都以标志字符0x7e开始和结束。紧接着是一个地址字节,值始终是0xff,
-
PPP&SLIP相同点
- 与SLIP类似,由于PPP经常用于低速的串行链路,因此减少每一帧的字节数可以
降低应用程序的交互时延。利用链路控制协议,大多数的产品通过协商可以省略标志符和
地址字段,并且把协议字段由2个字节减少到1个字节。
- 与SLIP类似,由于PPP经常用于低速的串行链路,因此减少每一帧的字节数可以
-
总的来说,PPP比SLIP具有下面这些优点:
- (1)PPP支持在单根串行线路上运行多种协议,不只是IP协议;
- (2)每一帧都有循环冗余检验;
- (3)通信双方可以进行IP地址的动态协商(使用IP网络控制协议);
- (4)与CSLIP类似,对TCP和IP报文首部进行压缩;
- (5)链路控制协议可以对多个数据链路选项进行设置。为这些优点付出的代价是在
每一帧的首部增加3个字节,当建立链路时要发送几帧协商数据,以及更为复杂的实现。
环回接口
-
大多数的产品都支持环回接口(Loopback Interface),以允许运行在同一台主机上
的客户程序和服务器程序通过TCP/IP进行通信。A类网络号127就是为环回接口预留的。根
据惯例,大多数系统把IP地址127.0.0.1分配给这个接口,并命名为localhost。一个传
给环回接口的IP数据报不能在任何网络上出现。 -
我们所想象的是,一旦传输层检测到目的端地址是环回地址时,应该可以省略部分传输
层和所有网络层的逻辑操作。但是大多数的产品还是照样完成传输层和网络层的所有过
程,只是当IP数据报离开网络层时把它返回给自己。 -
图2.2.3是环回接口处理IP数据报的简单过程
-
图中需要指出的关键点有:
-
- 传给环回地址(一般是127.0.0.1)的任何数据均作为IP输入。
-
- 传给广播地址或多播地址的数据报复制一份传给环回接口,然后送到以太网上。
这是 因为广播传送和多播传送的定义(第12章)包含主机本身。
- 传给广播地址或多播地址的数据报复制一份传给环回接口,然后送到以太网上。
- 3 )任何传给该主机IP地址的数据均送到环回接口。
-
-
看上去用传输层和IP层的方法来处理环回数据似乎效率不高,但它简化了设计,因为
环回接口可以被看作是网络层下面的另一个链路层。网络层把一份数据报传送给环回接
口,就像传给其他链路层一样,只不过环回接口把它返回到IP的输入队列中。 -
图2-4中,另一个隐含的意思是送给主机本身IP地址的IP数据报一般不出现在相应的
网络上。例如,在一个以太网上,分组一般不被传出去然后读回来。某些BSD以太网的
设备驱动程序的注释说明,许多以太网接口卡不能读回它们自己发送出去的数据。
4.4BSD系统定义了变量useloopback,并初始化为1。但是,如果这个变量置为0,
以太网驱动程序就会把本地分组送到网络,而不是送到环回接口上。它也许不能工作,
这取决于所使用的以太网接口卡和设备驱动程序。
3.网络层
IP协议
- IP是TCP/IP协议族中最为核心的协议。所有的TCP、UDP、ICMP及IGMP数据都以IP数据
报格式传输。许多刚开始接触TCP/IP的人对IP提供不可靠、无连接的数据报传送服务感到
很奇怪。IP提供的是一种不可靠的服务。也就是说,它只是尽可能快地把分组从源结点送
到目的结点,但是并不提供任何可靠性保证。而另一方面,TCP在不可靠的IP层上提供了
一个可靠的运输层。为了提供这种可靠的服务,TCP采用了超时重传、发送和接收端到端的
确认分组等机制。- 不可靠(unreliable)的意思是它不能保证IP数据报能成功地到达目的地。IP仅提供最好
的传输服务。如果发生某种错误时,如某个路由器暂时用完了缓冲区,IP有一个简单的错误
处理算法:丢弃该数据报,然后发送ICMP消息报给信源端。任何要求的可靠性必须由上层来
提供(如TCP)。 - 无连接(connectionless)这个术语的意思是IP并不维护任何关于后续数据报
的状态信息。每个数据报的处理是相互独立的。这也说明,IP数据报可以不按发送顺序接收。
如果一信源向相同的信宿发送两个连续的数据报(先是A,然后是B),每个数据报都是独立地
进行路由选择,可能选择不同的路线,因此B可能在A到达之前先到达。
- 不可靠(unreliable)的意思是它不能保证IP数据报能成功地到达目的地。IP仅提供最好
- 头部各字节的具体含义如下:
字段 | 含义 |
---|---|
4位版本号 | 指的是IP协议的版本信息目前的协议版本号是4,因此IP有时也称作IPv4。将来IPv6将会普及。 |
4位首部长度 | 指的是头部占32bit字的数目(头部的"选项"字段也计算在内),最多标识15个32bit,也就是首部最长位60字节。不带选项的IP报文该字段值为5,也就是首部固定大小20字节。 |
8位服务类型 | 服务类型(TOS)字段包括一个3bit的优先权子字段(现在已被忽略),4bit的TOS子字段和1bit未用位但必须置0。4bit的TOS分别代表:最小时延、最大吞吐量、最高可靠性和最小费用。4bit中只能置其中1bit。如果所有4bit均为0,那么就意味着是一般服务。新的路由协议如OSPF和IS-IS都能根据这些字段的值进行路由决策。不同应用建议的TOS值见图2.3.2。 |
16位总长度(字节数) | 总长度字段是指整个IP数据报的长度,以字节为单位。利用首部长度字段和总长度字段,就可以知道IP数据报中数据内容的起始位置和长度。由于该字段长16比特,所以IP数据报最长可达65535字节,超级通道的MTU为65535。尽管可以传送一个长达65535字节的IP数据报,但是大多数的链路层都会对它进行分片。 |
16位标识 | 标识字段唯一地标识主机发送的每一份数据报。通常每发送一份报文它的值就会加1。 |
3位标志 | 标志字段和片偏移字段在分片时使用 |
13位片偏移 | 标志字段和片偏移字段在分片时使用 |
8位生存时间(TTL) | TTL(time-to-live)生存时间字段设置了数据报可以经过的最多路由器数。它指定了数报的生存时间。TTL的初始值由源主机设置(通常为32或64),一旦经过一个处理它的路由器,它的值就减去1。当该字段的值为0时,数据报就被丢弃,并发送ICMP报文通知源主机。可以使用traceroute命令来分析。 |
8位协议 | 指明其上层协议类型(TCP/UDP/ICMP/IGMP,etc.),在分用1的时候各报文的首部协议字段会被程序检查,以确定其上层协议类型。 |
16位首部检验和 | 首部检验和字段是根据IP首部计算的检验和码。它不对首部后面的数据进行计算。ICMP、IGMP、UDP和TCP在它们各自的首部中均含有同时覆盖首部和数据检验和码。 |