第一章:概述
1.1 引言
1.2 分层
P1:TCP/IP通常被认为是一个四层协议系统
应用层 |
Telnet、FTP、email等 |
运输层 |
TCP和UDP |
网络层 |
IP、ICMP、IGMP |
链路层 |
设备驱动程序以及接口卡 |
P2:Telnet远程登录,FTP文件传输协议,SMTP简单邮件传送协议,SNMP简单网络管理协议
P2:大多数的网络应用程序都被设计成C/S模式
P3:路由器的好处是为不同类型的物理网络提供连接
P3:现在网关这个术语只用来表示应用层网关:一个连接两种不同协议族的进程,它为某个特定的应用程序服务
P3:应用层和运输层使用端到端协议,网络层提供的是逐跳协议。
P4:网桥在链路层上对网络进行互联,而路由器在网络层上对网络进行互联。
1.3 TCP/IP的分层
P5:IGMP是Internet组管理协议,用来把一个UDP数据包多播到多个主机。
1.4 互联网的地址
P6:多接口主机具有多个IP地址,其中每个接口都对应一个IP地址
1.5 域名系统
1.6 封装
P7:以太网数据帧的物理特征是其长度必须在46-1500字节之间
P7:IP首部的协议域:1表示ICMP,2表示IGMP,6表示TCP,17表示UDP
1.7 分用
1.8 C/S模型
P8:服务分为两种类型:重复型和并发型。
P9:一般来说,TCP服务器是并发的,UDP服务器是重复的
1.9 端口号
P9:客户端口号又称为临时端口号
P9:1-1023位知名端口号,临时端口号一般为1024-5000之间。
1.10 标准化过程
1.11 RFC
1.12 标准的简单服务
1.13 互联网
1.14 实现
1.15 应用编程接口
P12:socket和TLI
1.16 测试网络
1.17 小结
P14:网络层提供点到点服务,运输层提供端到端服务
第二章:链路层
2.1 引言
P15:链路层3个目的:1:为IP模块发送和接收IP数据报。2:位ARP模块发送ARP请求和接收ARP应答。3:位RARP发送RARP请求和接收RARP应答。
2.2 以太网和IEEE 802封装
P15:以太网采用CSMA/CD接入方法,速度为10MB/S,地址为48bit.。以太网数据报的封装实在RFC 894中定义的,IEEE 802网络的IP数据报封装是在RFC 1042中定义的。
P16:802定义的帧格式中,长度是它后续数据的字节长度,但不包括CRC检验码。802.3规定数据部分至少38字节,意外玩,最少要求46字节。
2.3 尾部封装
2.4 SLIP:串行线路IP
P17:SLIP的缺点:1:每一端必须知道对方的IP地址,没有办法把本端的IP地址通知给另一端。2:数据中没有类型字段,不能同时使用其他协议。3:SLIP没有在数据帧中加上检验和。若发生错误,只能由上层协议来发现
2.5 压缩的SLIP
P18:CSLIP一般吧TCP和IP首部的40字节压缩到3-5个字节,能够在每一端每次多大16个TCP连接。这大大缩短了交互响应时间。
2.6 PPP:点对点协议
P18:PPP协议包括下面3部分:1:在串行链路上封装IP数据报的方法。既支持数据为8位和无奇偶检验的异步模式,还支持面向比特的同步链接。2:建立、配置以及测试数据链路的链路控制协议(LCP)3:针对不同网络层协议的网络控制协议(NCP)体系。
P19:
标志 7E |
地址 FF |
控制 03 |
协议 |
信息 |
CRC |
标志 7E |
协议 |
内容 |
0021 |
IP跑数据包 |
c021 |
链路控制数据 |
8021 |
网络控制数据 |
P19:与SLIP类似,由于PP经常用于低速的串行链路,因此减少每一帧的字节数可以降低应用程序的交互延时。
P19:PPP相对SLIP具有以下优点:1:支持在单根串行线路上运行多种协议。2:每一帧都有循环冗余检验。3:通信双方可以进行IP地址的动态协商(使用IP网络控制协议)。4:对TCP和IP报文首部进行压缩。5:链路控制协议可以对多个数据链路选项进行设置。为这些优点付出的代价是在每一帧的首部增加3个字节,当建立链路时要发送几帧协商数据,以及更为复杂的实现。
2.7 环回接口
P20:A类网络号127就是为环回接口预留的。一个传给环回接口的IP数据报不能出现在任何网络上。
P20:环回接口关键点:1:传给环回地址的任何数据都作为IP输入。2:传给广播地址或者多播地址的数据报复制一份传给环回接口,然后送到以太网上。3:任何传给该主机IP地址的数据均送到环回接口
2.8 最大传输单元MTU
P21:链路层叫做MTU。
2.9 路径MTU
P21:两台通信主机路径中最小的MTU称为路径MTU。
2.10 串行线路吞吐量计算
P22:交互响应时间超过100-200ms就认为是不好的。
2.11 小结
第三章:IP:网际协议
3.1 引言
P24:不可靠的意思是不保证IP数据报能成功的到达目的地。IP有一个简单的错误处理算法:丢弃该数据包,然后发送ICMP消息报给信源端。无连接的意思是IP并不维护任何关于后续数据报的状态信息。
3.2 IP首部
P25:首部长度:以4字节为单位,为4位,所以最长首部为15X4=60字节。服务类型TOS包含3bit优先权子字段(已忽略),4bitsTOS字段和1bit未用但必须置零。4bitsTOS分别代表:最小延时,最大吞吐量,最高可靠性和最小费用,若都为0,则代表一般服务。
Telnet,Rlogin |
最小传输时延 |
FTP |
最大吞吐量 |
网络管理,路由选择协议 |
最高可靠性 |
用户网络新闻 |
最小费用 |
总长度是整个IP数据报的长度,单位是字节。TTL设置了数据报可以经过的最多路由器数。
P27:若检验和结果不正确,IP就丢弃收到的数据报,但是不生成差错报文。
3.3 IP路由选择
P28:路由表中的每一项都包含下列信息:1:目的IP地址2:下一跳路由器的IP地址。3:标志:一个证明目的IP地址是网络地址还是主机地址,另一个致命下一跳路由器是真的下一跳路由器还是一个直接相连的接口。4:为数据包的传输指定一个网络接口。
3.4 子网寻址
P31:子网划分缩减了路由表的规模
3.5 子网掩码
3.6 特殊情况的IP地址
3.7 一个子网的例子
3.8 ifconfig命令
P35:ifconfig命令一般在引导时运行,以配置主机上的每个接口。
3.9 netstat命令
3.10 IP的未来
3.11 小结
第四章:ARP:地址解析协议
4.1 引言
4.2 一个例子
P39:点对点链路不适用ARP。ARP的功能是在32bit的IP地址和采用不同网络技术的硬件地址之间提供动态映射。
4.3 ARP高速缓存
P40:ARP高效运行的关键是是由于每个主机上都有一个ARP高速缓存。高速缓存中每一项的生存时间为20分钟。
4.4 ARP的分组格式
P40:以太网目的地址为全1的广播地址。帧类型表示后面数据的类型,对于ARP请求或者应答来说,该字段为0x0806.硬件类型:1为以太网地址。协议类型:0x0800为IP地址。操作字段指出4中操作类型:ARP请求(1),ARP应答(2),RARP请求(3),RARP应答(4)
4.5 ARP举例
4.5.1 一般的例子
P42:最小长度60字节包括14字节的以太网帧头,但是不包括4字节的以太网帧尾
4.5.2 对不存在主机的ARP请求
4.5.3 ARP高速缓存超时设置
P43:对完整的表项超时时间为20分钟,不完整的为3分钟
4.6 ARP代理
P46:通过两个物理网络之间的路由器可以通过ARP代理互相隐藏网络。这种情况下,两个物理网络可以使用相同的网络号,只要把中间的路由器设置成一个ARP代理。
4.7 免费ARP
P45:免费ARP:它指主机发送ARP查找自己的Ip地址。通常,发生在系统引导期间进行接口配置的时候。
P45:免费ARP的两个作用:1:一个主机可以通过它确认另一个主机是否配置了相同的Ip地址。2:如果发送免费ARP的主机正好改变了硬件地址,那么这个分组就可以使其他主机高速缓存中旧的硬件地址进行相应的更新。
P45:主机受到任何ARP地址都要更新高速缓存。
4.8 ARP命令
P46:用命令增加的高速缓存项是永久的,除非加上temp关键字。
4.9 小结
第五章:RARP:逆地址解析协议
5.1 引言
P47:具有本地磁盘的系统引导时,一般从磁盘上的配置文件中读取Ip地址。每个系统的硬件地址由网络接口生产厂家配置。无盘系统的RARP实现过程是从接口卡上读取唯一的硬件地址,然后发一份RARP请求,请求某个主机响应该无盘系统的Ip地址。
5.2 RARP的分组格式
P47:格式基本与ARP格式一致,只是RARP请求或应答的帧类型代码为0x8035。对于ARP、RARP请求以广播方式传播,而RARP应答一般是单播传播。
5.3 RARP举例
5.4 RARP服务器的设置
5.4.1 作为用户进程的RARP服务器
P49:RARP服务器的复杂性在于,服务器一般要为多个主机提供硬件地址到Ip地址的映射。该映射包含在一个磁盘文件中,由于内核一般不读取和分析磁盘文件,因此RARP服务器的功能就由用户进程来提供。
5.4.2 每个网络有多个RARP服务器
5.5 小结
P49:RARP协议是许多无盘系统在引导时用来获取IP地址的。
第六章:ICMP:Internet控制报文协议
6.1 引言
P50:ICMP通常被认为是Ip层的一个组成部分。它传递差错报文和其他需要注意的信息。ICMP报文通常被Ip层或者更高层协议使用。
P50:协议格式:
6.2 ICMP报文的类型
P50:对ICMP差错报文不产生ICMP差错报文,否则会无限循环。
P50:当发送一份ICMP差错报文时,报文始终包含Ip的首部和产生ICMP差错报文的Ip数据包的前8个字节,用来与协议和用户进程联系起来
P51:下列情况不会产生ICMP差错报文:1:ICMP差错报文。2:目的地址是广播地址或者多播地址。3:作为链路层广播的数据包。4:不是Ip分片的第一片。5:原地址不是单个主机的数据报。这些规则是为了防止过去允许ICMP差错报文对广播分组响应所带来的广播风暴。
6.3 ICMP地址掩码请求与应答
P52:ICMP地址掩码请求用于无盘系统在引导过程中获取自己的子网掩码。类型17/18(请求/应答),代码0
6.4 ICMP时间戳请求与应答
P53:ICMP时间戳请求允许系统向另一个系统查询当前的时间,返回的建议值是自午夜开始计算的毫秒数。用其他方法从别的主机获取的时间只能提供秒级的分辨率。但是无法获取日期。
P53:类型是13/14,代码0。传送3个时间戳,请求端填写发起时间戳,应答系统填写接受时间戳,在发送应答时填写发送时间戳。
6.4.1 举例
P54:对本机时间进行调整,调整值为difference减去RTT的一半。
6.4.2 另一种方法
6.5 ICMP端口不可达差错
P56:UDP的规则之一:如果受到一份UDP数据包而目的端口与某个正在使用的进程不相符,那么UDP返回一个ICMP不可达报文。可以用TFTP来强制生成一个端口不可达报文。端口不可达的错误代码是3。不可达类型是3.
P58:BSD系统不把从socket接收到的ICMP报文中的UDP数据通知用户进程除非该进程已经发送了一个connect命令给该socket。标准的BSD TFTP客户端程序并不发送connect命令,因此它永远不会受到ICMP差错报文的通知。
6.6 ICMP报文的4.4BSD处理
6.7 小结
第七章:Ping程序
7.1 引言
P61:Ping的目的是为了测试另一台主机是否可达。该程序发送一份ICMP回显请求报文给主机,并等待返回ICMP回显应答。
7.2 Ping程序
P61:大多数TCP/Ip都在内核中直接支持ping程序。回显请请求和应答报文的类型是0/8,代码是0 。
7.2.1 LAN输出
P62:第一个往返时间比其他的要大,是由于目的端的硬件地址不在ARP高速缓存中。
7.2.2 WAN输出
7.2.3 线路SLIP链接
7.2.4 拨号SLIP链路
7.3 IP记录路由选项
P65:ping程序为我们提供了查看IP记录路由选项的机会。因此IP地址清单会复制到ICMP回显应答中
P66:由于IP首部最长60字节,出去IP固定首部20,RR选项3职介,只有37个字节来存放IP地址,只能存放9个。RFC 791指定路由器记录出口IP地址。
7.3.1 通常的例子
P67:在RR选项上,当ICMP回显应答到达原始系统时,它把自己的路口IP地址也加入。
7.3.2 异常的输出
7.4 IP时间戳选项
P69:时间戳代码为0x44,。
7.5 小结
第八章:Traceroute程序
8.1 引言
8.2 Traceroute程序的操作
P71:为什么要使用traceroute而不直接使用IP记录路由选项?1:原先并不是所有的路由器都支持记录路由选项,因此该选项在某些路径上不可用(Traceroute程序不需要中江路由具有任何特殊的或可选的功能)2:记录路由一般是单向的选项。因此记录的地址为2倍(一来一回)3:IP首部中留给选项的空间有限,不能存放当前大多数的路径。
P71:Traceroute使用ICMP报文和IP首部中的TTL字段。
P72:当路由器收到一份IP数据报,如果其TTL字段是0或1,则路由器不转发该数据包。路由器将该数据报丢弃,并给信源发一份ICMP“超时”信息。
P72:traceroute工作原理:发送一份TTL字段为1的IP数据报给目的主机,处理这份数据的第一个路由器将TTL减一,丢弃该数据报,并发回一份超时ICMP报文。这样就得到了第一个路由器的地址,然后发送TTL值为2的数据报,得到第二个路由器的地址。一次类推直到到达目的主机。但是目的主机哪怕收到TTL值为1的IP数据报,也不会丢弃也不会发送一份超时ICMP报文。因此Traceroute程序发送一份UDP数据报给目的主机,但它选择一个不可能的值作为UDP端口号,因此使目的主机模块产生一份端口不可达错误。
8.3 局域网输出
P72:对于每个TTL值,送出3份数据报。
P74:关于traceroute程序,有些必须指出。1:并不能保证现在的路由也是将来要采用的路由。对于一个给定的TTL,如果其路由发生变化,traceroute程序将打印出新的IP地址。2:不能保证ICMP报文的路由与traceroute程序发送的UDP数据报采用同一个路由。因此往返时间可能并不能真正体现数据报发送和返回的时间差。3:返回的ICMP报文中的信源IP地址是UDP数据报到达的路由器接口的IP地址。这与IP记录路由选项不同,记录的IP地址是发送接口地址。
8.4 广域网输出
8.5 IP源站选路选项
P76:源站选路是由发送者指定路由:1:严格的源路由选择。若下一个路由不在其直接连接的网络上,则返回源站路由失败的ICMP差错报文。2:宽松的源站选路。指明了IP地址清单,但是任意两个地址之间可以通过其他路由器。
8.5.1 宽松的源站选路的示例
P79:在DNS中,前向映射和反向映射是两个独立的文件。并非所有的管理者都同时拥有这两个文件。
8.5.2 严格的源站选路的示例
8.5.3 宽松的源站选路示例
8.6 小结
第九章:IP选路
9.1 引言
P83:当收到ICMP重定向报文时,路由表也要更新。
9.2 选路的原理
9.2.1 简单路由表
9.2.2 初始化路由表
9.2.3 较复杂的路由表
9.2.4 没有到达目的地的路由
9.3 ICMP主机与网络不可达差错
P88:当路由器收到一份IP数据报但又不能转发时,就要发送一份ICMP“主机不可达”差错报文。
9.4 转发或不转发
9.5 ICMP重定向差错
P89:当IP数据报应该被发送到另一个路由器时,收到数据报的路由器就要发送ICMP重定向差错报文给IP数据报的发送端。即此路由器发现数据报的发送的接口与接收的接口一致。
9.5.1 一个例子
9.5.2 更多细节
P91:重定向报文只能由路由器产生。重定向报文是为主机而不是为路由器使用的。
P92:生成ICMP重定向报文的条件:1:出接口必须等于入接口。2:用于向外传送数据报的路由不能被ICMP重定向报文创建或修改过,而且不能死路由器的默认路由。3:数据报不能用源站选路来转发。4:内核必须配置成可以发送重定向报文。
P92:路由器应该发送的只是对主机的重定向,而不是对网络的重定向。
P92:收到ICMP重定向报文后,在修改路由表之前必须先做一些检查:1:新的路由器必须直接与网络相连接。2:重定向报文必须来自当前到目的地所选择的路由器。3:重定向报文不能让主机本身作为路由器。4:倍修改的路由必须是一个间接路由。
9.6 ICMP路由器发现报文
P92:一般认为,主机在引导以后要广播或多播一份路由器请求报文。一台或更多台路由器相应一份路由器通告报文。另外,路由器定期地广播或多播传送它们的路由器通告报文,允许每个正在监听的主机相应的更新它们的路由表。路由器发现报文的类型为10.路由器通告报文类型为9.
9.6.1 路由器操作
P93:一份给定的通告报文默认生命周期是30分钟。
9.6.2 主机操作
P93:主机在引导期间一般发送三份路由器请求报文,每三秒钟发送一次,一旦受到一个有效的通告报文,就停止发送请求报文。
9.6.3 实现
9.7 小结
第十章:动态选路协议
10.1 引言
P95:用于路由器间的通信。主要讨论RIP
10.2 动态选路
P96:另一种IGP是开放最短路径优先OSPF。IGP:内部网关协议。EGP:外部网关协议。BGP:边界网关协议。
10.3 Unix选路守护程序
10.4 RIP:选路信息协议
10.4.1 报文格式
P96:RIP报文包含在UDP数据报中。
P97:命令字段1表示请求,2表示应答。3,4舍弃不用。两个非正式命令:轮询5,轮询表项6。采用这种20字节的RIP报文可以通告多达25条路由。20*25+4=504<512。
10.4.2 正常运行
P97:RIP采用的UDP端口号是520.
P98:如果运行RIP的系统发现一条路由在3分钟内未更新,就将该路由的度量设置为无穷大,并标记为删除。再过60S,将从本地路由表中删除该路由,以保证路由的失效已传播开来。
10.4.3 度量
10.4.4 问题
10.4.5 举例
P99:发送标准的RIP请求,地址系列字段设置为0,度量字段设置为16的请求,要求其他路由器发送其完整路由表。
10.4.6 另一个例子
10.5 RIP版本2
P102:选路标记是为了支持外部网关协议而存在的,它携带一个EGP和BGP的自治系统号。
10.6 OSPF:开放最短路径优先
P103:链路状态协议总是比距离向量协议收敛更快。OSPF直接使用IP,而RIP使用UDP
P103:OSPF中路由器之间的点对点不需要每端都有一个IP地址。OSPF采用多播而不是广播。
10.7 BGP:边界网关协议
P103:BGP系统与其他BGP系统之间交换可达信息。这些信息包括数据到达这些网络所必须经过的自治系统AS中的所有路径。
P103:一个自治系统中的流量分为本地流量和通过流量
P104:BGP使用TCP
10.8 CIDR:无类型域间选路
P104:CIDR是一个防止路由表膨胀的方法。
10.9 小结
第十一章:UDP:用户数据报协议
11.1 引言
11.2 UDP首部
P107:TCP端口号与UDP端口号相互独立
P108:UDP长度字段指UDP首部和UDP数据的直接长度,最小为8字节。
11.3 UDP检验和
P104:UDP检验和覆盖首部和数据。IP的检验和只覆盖首部。UDP的检验和是可选的,而TCP的检验和是必须的
P104:TCP和UDP都包含一个12字节的伪首部
P104:如果检验和的计算结构为0,则存入全1。如果传输的检验和为0,则说明发送端没有计算检验和。
11.3.1 tcpdump输出
11.3.2 一些统计结果
11.4 一个简单的例子
11.5 分片
P111:使用UDP很容易导致IP分片
P112:任何运输层首部只出现在第一片数据中。
11.6 ICMP不可达差错
11.7 用traceroute确定MTU
11.8 使用UDP的路径MTU发现