1112

   

  

一.全书概述

 

 

二.各章概述

第1章--Introduction

重点内容

本章简单介绍了一些概念,其中比较重要的是:TCP/IP 协议的分层(layering),网络地址(Internet Addresses),封装(Encapsulation),多路分解(Demultiplexing),客户端-服务器模型(Client-Server Model),端口(Port)的概念与分类。

1. TCP/IP 协议的分层

自底向上分四层:链路层包括网卡和设备驱动,与传输媒介打交道;网络层负责数据包(packets)的传递(IP)并提供了网络传输状况的反馈机制(ICMP),以及....(IGMP);传输层有两大主流协议,TCP和UDP,其中TCP弥补了IP层不可靠的特质,而UDP则对IP层的不可靠问题不作处理并交给更高层的应用程序自行处理;应用层处理特定的应用程序交互过程中的细节问题。

 

2. 网络地址

互联网上的每个网卡设备都有一个网络地址(Internet Address),这个地址可以用一个32-bit的整数表达。网络地址根据第一个字节分为5类(class A , class B, class C , class D, class E),这五类地址的打头bits 分别是 0 、10、110、1110,因而这五类地址的第一个字节分别大于 0、128(2的七次方,即2^7=128)、192(2^7+2^6=128+646=192)、224(2^7+2^6+2^5=128+64+32=224)、240(2^7+2^6+2^5+2^4=128+64+32+16=240)。其中,第五类地址用于以太网的多播,其余四类地址分别各有2^24、2^16、2^8个。

另,网络地址的表示方法称为点分十进制表示法(dotted-decimal notation)。

 

3. 封装

网络中的应用程序的通信过程中,发送方程序向接收方程序发送的数据会自顶向下依次经过应用程序、传输层协议、网络层协议、链路层协议的处理,其中,每一层都在自己接收到的数据前部增加一个头部,头部中包含的信息一方面指出这些被封装的信息来自哪里,另一方面指出这些信息要被发送到哪里去,此外,还会记录这些被封装的信息来自上层的哪个协议或者应用层的程序,此外,还有其它信息。

 

4. 多路分解

网络中的应用程序的通信过程中,当接收方低层协议接收到信息时,会提取这些信息的头部和剩余信息,通过头部,可以获知应该把剩余的信息交给高层的哪个协议或者程序进行处理。这就叫多路分解。例如,以太网帧会增加一个以太网帧头部,其中frame type 域会指出信息来源于哪个网络层协议,例如IP、ARP或者RARP等;IP包头部则根据protocal域标志信息来源于ICMP、IGMP或者TCP、UDP;而TCP头部和UDP头部指出了接收方程序的端口。

5. 客户端-服务器 模型

网络中的程序交互过程中,通常假设一方是客户端(client),而另一方是服务端(server)。根据server接收到client发送来的请求时的处理方式的不同,可以服务端分为两种,分别称为迭代式服务端(iterative server)和并行式服务端(concurrent server)。两种程序对请求的处理方式分别如下:

1)iterative server

i.  等待一个客户端请求的到达

ii. 处理客户端请求(此时,这个服务端程序没时间处理别的请求)

iii.向客户端返回一个相应消息(response)

iv. 回到步骤i

 

2)concurrent server

i.  等待一个客户端请求的到达

ii. 启动一个新的服务端程序处理这个客户端请求

iii.原服务端程序返回步骤i

 

6. 端口号

端口号被传输层协议(TCP/UDP)用于标志应用程程序,端口号与进程ID完全是两回事,要予以区分。其中,1-1024被称为知名端口号(well-known port),这些端口通常被知名的server程序占用,1025-5000被称为临时端口(ephemeral port),client程序通常会占用这一部分端口,5001及以上的端口号是留给不知名的server用的。

注:假如程序A要与B通信,B侦听端口port_b ,那么 port_b 低于5001将是不合适的,因为,一些client可能会临时占用port_b。(感谢导师姜某伟,当时可能说的就是这个意思吧,现在明白点了

 

遗留问题

1. 关于各分层的功能,需要仔细阅读后续章节并给出更好的概括

2. 还需要重点把握传输层、网络层、链路层协议头部的内容,详解多路分解

3. 对端口号的描述觉得欠妥,因为有一个问题没有搞清楚,所谓DNS既使用了TCP又使用了UDP是怎么回事,莫非一个端口可以被两个进程用?

4. concurrent server 有什么好处

 

第2章--Link Layer

重点内容

 本章从多路分解的角度指出,链路层的功能在于发送和接收IP数据报(IP datagrams)、ARP请求和相应、RARP请求和响应。随后指出,对于不同的网络硬件,即不同的网卡,如以太网网卡(ethernet)、光纤分布式数据接口(FDDI,Fiber Distributed Data Interface)、RS-232串行线等,TCP/IP 协议族都能提供相应的链路层协议。重点内容在于(1)从封装和多路分解的角度把握ethernet帧格式和802.3帧格式的共性。(2)了解SLIP、CSLIP、PPP协议在功能上的演进,重点了解PPP协议通过NCP支持多种网络层协议、通过protocal域实现多路分解、通过LCP实现帧的压缩、并提供SLIP和CSLIP没有的校验功能。(3)IP 多播、广播包,发送给某个本地网卡的包,以及发送给loopback interface(此网卡的地址是127.0.0.1)的IP包,是如何被ethernet driver 和 loopback driver 处理的。(4)了解MTU的取值取决于物理媒介的物理特性,但PPP这种高交互型协议的MTU则并非如此。(5)Path MTU 的概念

1. 以太网帧格式和802.3帧格式

RFC 894定义了以太网帧格式,RFC 1042定义了802.3帧格式。这两种帧格式中共有的域是,destination address 、source address、type、CRC,其中两个地址都是48-bit,占6字节,CRC占4字节,type域占2字节,并且最为重要,使得这两种帧格式能够支持多种不同的网络层协议,例如IP、ARP、RARP。(还有其它协议如 Novell 、Apple Talk 等,参考了csdn博客http://blog.csdn.net/hnarke/article/details/2222339

以太网帧的最小帧长是64字节,不满足最小帧长限制则进行填充,例如,对于定长的ARP和RARP请求或应答(28byte)则需要填充。此外,文中没有谈到在帧的头部有8byte的签到字符,其中前7字节用于同步,后1字节作为帧起始定界符。以太网帧的最大帧长是1518字节,因此其数据部分最长为 1518-6-6-2-4=1500字节。

CSMA/CD (Carrier Sense ,Multiple Access with Collision Detection )使用冲突避免的策略是:先听后发、边听边发、随机延迟后重发。一旦发生冲突,必须让每台主机都能检测到。(参考http://wenku.baidu.com/view/429253fec8d376eeaeaa31af.html  )根据以下场景计算最小帧长:以太网上有两台相距最远的主机A与B,两个主机都希望向对方发送信息,在某一时刻,A开始向B发送数据,数据开始到达B的瞬间,B检测到了冲突,此时B通告A有冲突,通知A放弃传输数据,如果A发送的数据果断,那么当这个通告到达A时,数据已经在存在链路冲突的情况下发送完,而A却不知晓。为了解决这个问题,有了最小帧长的限制。关于最小帧长有篇讲得很形象的文章(http://shifeng0826.blog.163.com/blog/static/383910632010217939518/)。

2. SLIP CSLIP PPP

这三个协议都是链路层的协议。其中SLIP 代表 Serial Line IP ,具有以下特点:只支持IP这一种网络层协议,对IP数据报(IP datagram)只做简单的封装;两台主机之间-232串行接口通信通信双方需要事先知道彼此的IP,SLIP没有提供获取对方IP的方法;没有像以太网帧那样提供校验方法。注意到SLIP线路通常具有大量的交互流量并且带宽小,因此,CSLIP 出现,以将IP header和TCP/UDP header压缩到3-5字节。PPP协议一方面涵盖了CSLIP的压缩能力,一方面也支持了多种网络层协议(protocal域)、校验和、使用IP NCP(IP network control protocal,当protocal域为0X8021时,PPP帧里存放了network control data)获取对方的IP地址。

3. loopback interface

每个以太网卡都有自己的驱动程序,除了这些驱动之外,还有另外一个驱动,叫做loopback driver,它是 loopback interface 的驱动。为了把握loopback的概念,可以研究某个以太网卡驱动对本机发送出的帧的处理方式。当本机的IP output function 向本机的某个以太网卡发送一个 datagram 时,该以太网卡驱动会:

1)检查目标IP地址,如果是广播或多播地址,则该IP datagram 会被发送到 loopback driver,loopback driver 把它返回给IP input function,形成的回路如下:本机ip->本机某网卡驱动->本机loopback 驱动->本机ip。同时,该datagram也会成帧发送到ethernet上。

2)如果是本机某个网卡的IP地址,则该IP datagram 会被发送到 loopback driver,loopback driver 把它返回给IP input function,形成同样的回路。

3)如果都不是,那么就通过ARP请求获得对方的以太网卡地址(48字节),然后成帧,发送到以太网上。

 

4. PPP的MTU为啥是296

MTU (Maximum Transmission Unit)是指被帧封装起来的数据部分的最大长度,例如对于以太网帧而言,它的MTU就是1518字节除去destination address 、source address、type、CRC这四个域之后的长度,即1518-6-6-2-4=1500字节。对于802.3格式的帧,由于还存在其它的域,所以MTU小于1500。

减小MTU有利于及时响应的理由如下:例如,当MTU非常大时,传送一个最长的帧使用的时间也大,设为T;假设串行链路上有FTP在传送数据,另外还有一个只传小数据但频率较高的程序,设为APP,那么当APP希望响应一个请求时,FTP可能刚好占用了信道,它需要等待的时间平均是T/2,T越大,等待的时间越长。如果能给出能够忍受的最长时间,那么MTU就可以计算出来了。

5. Path MTU

网络层的数据经过的所有链路的MTU的最小值

遗留问题
 最小最大帧长具体如何算出来

第3章--IP: Internet Protocal

重点内容

IP向上层提供不可靠的、无连接的服务,不可靠表示IP尽力而为地传递IP datagram ,不能向上层提供传输是否成功的信息;无连接表示IP不记录已成功接收的IP datagram 的信息,只是进行存储转发(给高层协议),不关心哪个datagram应该先交付给高层协议。本章重点在于IP如何实现寻路,因此需要掌握IP header、子网寻址(Subnet Addressing)和子网掩码(Subnet Mask),特殊IP地址等概念。

1. IP routing

在已经获得目的主机IP地址的条件下,IP会查询路由表,一是获取下一跳IP,二是获取出口网卡的地址(是否是获取48bit地址,有待确认)。

路由表存放与内存中,相当于一个数据库表,每个entry包括至少以下属性:

1)目的IP地址。可能是一个主机地址或者是一个网络地址。

2)某个直接相连的网络的IP或者某台直接相连的路由器的IP。该直接相连的路由器IP必须在某个直接相连的网络内。

3)各种标志。主要的一些标志指出:目的IP地址是一个主机地址或者网络地址(9.2节标志H);目的IP地址是否与本机直接相连(9.2节标志G);下一跳路由器或者主机是否在运行。

4)发往该目的IP地址的datagram应该走的网卡的标志。

IP 寻路方法是,根据目的IP地址查询路由表:

1)搜索匹配的主机地址

2)搜索匹配的网络地址

3)搜索default entry

 

2. IP header

IP header各域如下:

0                          4                         8                         12                        16                       20                       24                       28                  31 

|--------------------|--------------------|--------------------|--------------------|--------------------|--------------------|--------------------|--------------------|

|  version           | header length |               type of service             |                         total length of the IP datagram                              |

|--------------------|--------------------|--------------------|--------------------|--------------------|--------------------|--------------------|--------------------|

|             16-bit     identification of the datagram                            |flags |                13-bit fragment offset                                             |

|--------------------|--------------------|--------------------|--------------------|--------------------|--------------------|--------------------|--------------------|

|       time to live                            |                protocal                        |               checksum of the header                                                  |

|--------------------|--------------------|--------------------|--------------------|--------------------|--------------------|--------------------|--------------------|

|                                                                                   source ip                                                                                                                        |

|--------------------|--------------------|--------------------|--------------------|--------------------|--------------------|--------------------|--------------------|

|                                                                                   destination ip                                                                                                                |

|--------------------|--------------------|--------------------|--------------------|--------------------|--------------------|--------------------|--------------------|

|                                                                                  variable-length options                                                                                                |

|--------------------|--------------------|--------------------|--------------------|--------------------|--------------------|--------------------|--------------------|

|                                                                                                           data                                                                                                         |

|--------------------|--------------------|--------------------|--------------------|--------------------|--------------------|--------------------|--------------------|

可以通过寻路、分段重组、多路分解、容错这四方面来记忆IP header。

涉及到寻路:source ip  destination ip TTL TOS,当一个路由器发现某datagram的TTL值为1时,不会继续转发该datagram;TOS 表示type of service ,涉及到寻路。

涉及到分段重组:identification flags fragment offset,identification 唯一标志IP发出的每个datagram,flags其中一位表示“don't fragment' 用于获取MTU很有用,flags其中一位表示当前段是否有下一段;当一个datagam 被分成多个段时,fragment offset指出该段起始字节在该datagram中的位置。注意,除了最后一段之外,其余段的数据长度必须是8的倍数。

涉及到多路分解:protocal header length total length ,通过protocal决定该交给上层的哪个协议处理,通过header length乘以4获得头部长度,通过total length减去头部长获得实际数据长度(不含链路层填充的字节)

容错:checksum 。为啥IP不对数据部分也进行校验呢?TCP、UDP、ICMP、IGMP等协议都对自己的头部和数据做了校验。此外,每个router在转发一个datagram的同时都会将TTL减一,并更新checksum。

options 是可选项,名气大的有源路由选项(8.5节)、记录路由选项(7.3节)。header length 域是指IP头部(包括可选项)占多少个4字节,此域限制了头部最长为60byte,且必须是4的倍数。

 TOS由3个前导无用bit,4个中间TOS bit,以及值为0的最后1bit组成,共8bit。有四种类型的服务,(1)Minimize Delay(2)Maximize Throughput(3)Maximize Reliability(4)Minimize Monetary Cost

另外,数据包在发送到下一跳的过程中,网络层的目的IP地址一直不变,而链路层的地址持续更新,都是下一跳的链路层地址,链路层地址通过ARP协议获得。

3. Subnet Addressing & Subnet Mask

 前面提到,ABC类网络依次以前1、2、3字节作为网络号,剩下的字节作为主机号。D类地址用于多播,前导bit是1110,剩余的bit用于表示多播组ID,E类地址前导bit是1111,剩余的28bit保留。由于这种分类方式导致IP地址利用不充分,将主机号进一步细分为子网号和主机号,利于更充分地利用IP地址。

将一个网络划分成多个子网之后,通常只需要在一个路由器的路由表上收录以所有子网为目标IP的路由信息,外部网络只需要知道如何到达此路由器,即可到达所有子网内的机器。

4. Special Case IP Address

 12.2节讲Broadcasting

1)Net-directed Broadcast ,路由器不隔绝这种广播

A 类广播地址:netid.255.255.255

B类广播地址:netid.255.255

C类广播地址:netid.255

2) Limited Broadcast ,路由器隔绝这种广播

广播的地址是255.255.255.255,这种广播包只在本地线路上出现,而不会跨路由器,此外,路由表里该如何配置呢?

3)Subnet-directed Broadcast

以B类网络128.1为例,如果该网络的主机号部分的前8bit被用作子网号,并且存在子网号为1的子网,那么128.1.1.255 就是一个面向子网的广播。

4)All-subnets-directed Broadcast

以B类网络128.1为例,如果该网络存在子网,则128.1.255.255是面向所有子网的广播;如果该网络不存在子网,那么128.1.255.255则是一个面向网络的广播(Net-directed Broadcasting)

 

遗留问题

路由选择时,如何根据TOS域进行决策。

第4章--ARP: Address Resolution Protocal

重点内容

 本章介绍TCP/IP协议族里网络层的另外一个重要协议,ARP协议。重点内容在于,了解同一物理网络里的一台主机如何获得另一台主机的物理地址,了解不同物理网络里一台主机如何通过代理ARP最终将datagram传递到目的主机,此外,还要了解ARP packet 格式是如何支持不同的网络层协议和链路层协议的。

1. datagram在链路层如何传递

注意datagram在物理链路上传递时,其网络层目的地址是不变的,而目的物理层地址时刻更新为下一跳的物理地址。当IP模块希望将某个datagram发送出去时,通过查询路由表会最终获得(1)下一跳路由的IP(2)出口网卡的标志。此时,IP把还差目的物理地址的datagram交给ARP,希望ARP找到目的IP对应的物理地址并发送出去,如果ARP缓存没有相关记录,从查到的网卡向本地连接的网络发起一个ARP查询,该查询是一个链路层的广播(对于ethernet而言地址是ff:ff:ff:ff:ff:ff),下一跳IP对应的主机向发起请求的主机给出一个ARP响应,ARP收到响应后填写目的物理地址,将datagram发送出去。(卷一上的描述貌似没有提到查路由表,而是直接对目的IP地址发起ARP查询,此外,代理ARP也让我怀疑我自己的这个理解到底对不对)

2. 代理ARP

代理ARP。卷一关于ARP请求的描述貌似是,不查询路由表而直接对目的IP地址发起ARP请求,在这种情况下,如果目的IP地址与发起者不在同一个物理网络,则无人应答。这时,如果该物理网络上某个能到达目的主机的路由器设置了代理ARP,则该路由器可以将自己的物理地址返回给发起查询的主机,该主机于是将datagram发给了路由器,路由器做进一步转发。

3. 报文格式

ARP 报文如何支持多种网络层协议以及多种链路层协议。看报文格式即可知道。

0                          2                       4                         5                       6              8                                       .....

|--------------------|------------------|--------------------|------------------|------------|------------------------------|-----------------------------|----------------------------|----------------------------|

|hardware type |protocal type |hardware size |protocal size |opration |sender physical addr |sender protocal addr  |target physical addr |target protocal addr  |

|--------------------|------------------|--------------------|------------------|------------|------------------------------|-----------------------------|----------------------------|----------------------------|

   链路层协议          网络协议      物理地址大小  网络地址大小                 

其中,protocal 可以解读为网络层的意思,opration 的取值为1代表ARP request ,2代表ARP reply (3代表RARP request  ,4代表RARP reply )

通过 hardware type protocal type 分别指出链路层和网络层协议类型,以提供对多种协议的支持,hardware size 和 protocal size 则支持了不同长度的地址类型。

在TCP/IP协议中,具有目的IP地址的主机,收到ARP request时,会把自己的ethernet addr写入到target physical addr,交换sender和target对应的域,把op域设为2,然后回复。

4. ARP 缓存

1)收到一个ARP request 时,接收方会把发送方的IP和ethernet addr 存放到ARP缓存里

2)收到一个ARP reply 时,接收方会把发送方的IP和ethernet addr 存放到ARP缓存里

3)ARP缓存有一定生存期限,在ARP缓存里没有指定这个生存期限的域

 

5. 查询不存在的主机

卷一给出的例子里,使用telnet命令来连接一个不存在的IP,可以看到arp发起对该IP的请求(不知道为啥不是对下一跳IP的请求)并一直没有收到应答

 

讲ARP欺骗的文章,收录下(http://wenku.baidu.com/view/1c557213a216147917112869.html

遗留问题

 我所理解的“先查路由表得下一跳IP,再查找下一跳IP的物理地址”这个顺序对不对

第5章--RARP: Reverse Address Resolution Protocal

重点内容

RARP用于无盘系统在启动时,读取网卡的物理地址并向网络发起RARP请求(广播帧),再从RARP应答中获得该网卡的IP。RARP packet 格式与ARP packet 格式相同。

0                          2                       4                         5                       6              8                                       .....

|--------------------|------------------|--------------------|------------------|------------|------------------------------|-----------------------------|----------------------------|----------------------------|

|hardware type |protocal type |hardware size |protocal size |opration |sender physical addr |sender protocal addr  |target physical addr |target protocal addr  |

|--------------------|------------------|--------------------|------------------|------------|------------------------------|-----------------------------|----------------------------|----------------------------|

   链路层协议          网络协议      物理地址大小  网络地址大小                 

区别在于 op 域取值为3表示RARP请求,4表示RARP应答。

 

RARP 应答返回的信息只有IP,第16章BOOTP协议能够为无盘系统返回更多的信息。

 
遗留问题

 

第6章--ICMP: Internet Control Message Protocal

重点内容

 注意到IP包本身没有任何一个域用于告知发送方IP包的传送情况。ICMP以IP包为载体,负责向IP层、传输层甚至应用层传递差错信息。注意到ICMP packet 有自己的校验和,覆盖了整个 ICMP packet ,这是对IP包没有对数据部分做校验的补充。本章重点是(1)把握ICMP packet的整体格式(2)ICMP 地址掩码请求与应答(3)ICMP 时间戳请求与应答(4)ICMP端口不可达错误。

学习完本章,要记住ICMP报文通用格式、ICMP错误报文通用格式,记住请求-应答方式下的identifier和sequence number域。

1.  ICMP包格式

0                          8                         16                       24                   31

|--------------------|--------------------|--------------------|--------------------|

|          type         |        code          |                  checksum                 |

|--------------------|--------------------|--------------------|--------------------|

.....             contents depend on type and code                       ........

|--------------------|--------------------|--------------------|--------------------|

 

2.  ICMP Address Mask Request  and Reply

0                          8                         16                       24                   31

|--------------------|--------------------|--------------------|--------------------|

|          type         |        code          |                  checksum                 |

|--------------------|--------------------|--------------------|--------------------|

|              identifier                         |          sequence number          |

|--------------------|--------------------|--------------------|--------------------|

|                                 32-bit subnet mask                                         |

|--------------------|--------------------|--------------------|--------------------|

地址掩码请求可以用于无盘系统启动时获得子网掩码,本章并没有详解无盘系统启动欲获得子网掩码时需要有什么先决条件,比方是否需要已知网卡的IP等。2本章举的例子是在已知网卡IP的情况下,向子网(140.252.13.63,B类地址,子网号占10bit)发起网络层广播,进行ICMP地址掩码查询。⊙﹏⊙b汗,和无盘系统没关系。另外,该网络层广播被转化为链路层的广播(广播地址为ff:ff:ff:ff:ff:ff)。

identifier 和 sequence number 可以被发送方任意填写,接收方会将这两个域原封不动地返回,发送方以此可以得知该应答是对应哪个请求。本章在讲解提到的三种ICMP请求和应答时,都没有对identifier和sequence number 该如何填写进行讲解。第七章讲到PING的时候可以了解到,identifier会被设置为进程号。

另,再次强调BOOTP协议可以获取更多信息,BOOTP依赖UDP协议。

3.  ICMP Timestamp Request and Reply

|--------------------|--------------------|--------------------|--------------------|

|          type         |        code          |                  checksum                 |

|--------------------|--------------------|--------------------|--------------------|

|              identifier                         |          sequence number          |

|--------------------|--------------------|--------------------|--------------------|

|                           32-bit originate timestamp                                   |

|--------------------|--------------------|--------------------|--------------------|

|                           32-bit receive timestamp                                      |

|--------------------|--------------------|--------------------|--------------------|

|                           32-bit transmit timestamp                                    |

|--------------------|--------------------|--------------------|--------------------|

发送的时候设置originate timestamp ,刚接收到的时候设置 receive timestamp ,回复的时候设置transmit timestamp,并且通常接收方会把后两个时间戳设置为相同的值,而发送方收到回复时,它可以计算出RTT。发送时间戳请求就是为了以接收方时间为准,如果可以接受往返时间相同的假设,那么发送方发出请求的时刻,接收方的时间应该是receive-RTT/2。这就是原理。

 

4.  ICMP Port Unreachable Error

ICMP unreachable error message 的通用格式如下,注意由于端口不可达错误不是以请求-应答的方式获得的,所以没有 identifier 和 sequence number 域。

 

0                               8                               16                            24                        31

|------------------------|------------------------|------------------------|------------------------|

|          type              |        code                |                       checksum                      |

|------------------------|------------------------|------------------------|------------------------|

|                                               unused(must be 0)                                           |

|------------------------|------------------------|------------------------|------------------------|

 IP header(Including options)+first 8 bytes of original IP datagram data

|------------------------|------------------------|------------------------|------------------------|

 

ICMP header 的type和code域会指出是那种错误类型,而IPheader的protocal域使ICMP知道该如何解释接下来的那8字节,例如通过端口知道是哪个进程发送的数据导致的错误。对于UDP或TCP而言,这8字节包含了端口信息(见TCP/UDPpacket格式 )

 

5. ICMP不会产生错误消息的情况

对以下情况,ICMP不会产生错误消息。

1)ICMP 错误消息

2)网络层的多播或广播IP数据报

3)在链路层以广播的方式发送的数据包

4)发生分段重组时的非首分片

遗留问题

 

第7章

重点内容

本章从PING入手,一方面谈及了ICMP echo request and reply ,另外,通过PING提供的功能,讲述了IP Record Route Option和 IP Timestamp Option。

 本章重点内容有了解(1)ICMP echo request and reply(2)PING的功能(3)IP Record Route Option (4)IP Timestamp Option。

1. ICMP echo request and reply

0                          8                         16                       24                   31

|--------------------|--------------------|--------------------|--------------------|

|          type         |        code          |                  checksum                 |

|--------------------|--------------------|--------------------|--------------------|

|              identifier                         |          sequence number          |

|--------------------|--------------------|--------------------|--------------------|

....                              optional data                                                .....

|--------------------|--------------------|--------------------|--------------------|

 

机制就是,接收方会把这个请求原样送回。

2. PING 如何使用ICMP echo request and reply

1)identifier域填写进程号,以支持多个PING同时运作

2)sequence number 初始化为0,每次PING发送一个ICMP请求都会递增,收到回复之后,请求方会打印出seq_num

3)在optional data 中记录请求发出的时间,如此在获得reply之后就可以得知TTL并打印

 

3.IP Record Route Option

由于IP头部header length域限制了header最大为60bytes.因此,options域最多只有40byte的空间。使用-R选项,可以使得PING发出的IP包打开RR记录,在网络层上看,ICMP echo request 和 ICMP echo reply 依次经过 1源主机->2中间路由->3目的主机->4中间路由->5源主机。其中,request从源主机发出时,RR选项打开,IP列表为空,每个中间路由器都会把数据报出口网卡IP添加到IP列表。到达目的主机之后,IP列表会被拷贝到承载ICMP echo reply的数据报中,随后,目的主机出口网卡IP也被写入列表,返回源主机时,入口网卡IP被记录。

RR选项的格式如下:

      1        1          1                        4                                       4                                          4

|--------|--------|--------|--------------------------------|--------------------------------|--------------------------------|

| code | len    | ptr     |  IP addr 1                        | IP addr 2                         |  IP addr 3                         |

|--------|--------|--------|--------------------------------|--------------------------------|--------------------------------|

 

其中,code值为7表示RR选项。len表示本选项的字节总长度(含前导的3个字节),ptr是一个指针用于表示下一个IP地址应该从哪个字节开始写入。

不是所有的路由器都支持RR option

4.IP Timestamp Option

Timestamp Option 的格式与 RR Option的格式类似

      1        1          1         1                         4                                       4                                          4

|--------|--------|--------|--------|--------------------------------|--------------------------------|--------------------------------|

| code | len    | ptr     |OF|FL|  IP addr 1                        | IP addr 2                         |  IP addr 3                        |

|--------|--------|--------|--------|--------------------------------|--------------------------------|--------------------------------|

多出来个 OF 和 FL ,都是4-bit的域。OF表示overflow,当一个中间路由发现已经没有空间增加timestamp的时候,它就递增OF;FL表示flags,值为0表示只记录timestamp(如上图),值为1表示记录IP地址和timestamp,3表示sender初始化了四对IP地址以及0值timestamp,只有IP等于sender初始化的那个IP,中间路由才可以记录自己的时间戳。

 

遗留问题

 

第8章--Traceroute Program

重点内容

 本章的重点是(1)了解traceroute运作机制(2)了解源路由选项

1. traceroute 运作机制

 traceroute使用UDP + IP + ICMP echo request and reply + ICMP time exceeded error + ICMP port unreachable error

1)traceroute使TTL从1开始递增,对于每个TTL,发送3个ICMP echo request

2)对于每个ICMP echo request ,它可能导致以下情况

--转发过程中,每个路由器会将TTL减一,当某个路由器发现该请求需要转发但是TTL却为1时,路由器停止转发并向源主机发回一个ICMP "time exceeded" error

--如果成功到达目的主机,由于UDP指定了一个很大的端口值,这个端口不可能(??)被占用,例如大于30000(什么道理?),故会导致ICMP “port unreachable" error

 

根据每个ICMP error,traceroute 可以计算出每个请求的RTT,我猜测,traceroute应该是根据ICMP请求中的identifier和sequence number知道这个error是针对哪个request的。至于RTT如何计算出来,书上也没讲,有可能是traceroute本身记录了每个请求发出去的时间戳。

另外,traceroute每发一个请求,都会递增UDP中的目的端口号,什么目的不知道。

本节还顺带介绍了两种ICMP time exceeded error ,一种就是上面介绍的,当TTL=0时产生的错误,一种是重组超时产生的错误。

 

2. 源路由选项(IP Source Routing Option)

IP 源路由选项的格式如下:

      1        1          1                          4                                       4                                          4

|--------|--------|--------|--------------------------------|--------------------------------|--------------------------------|

| code | len    | ptr     |  IP addr 1                        | IP addr 2                         |  IP addr 3                        |

|--------|--------|--------|--------------------------------|--------------------------------|--------------------------------|

 

源主机希望IP包在转发的过程中能够经过一系列的机器,它们的IP都记录在此选项的列表中。options部分会经过以下处理,注意PTR指针最开始指向第四个字节处:

1)源主机把左数第一个IP作为IP包的目的IP,把左数第一IP删除,剩余IP左移,剩下的那个空位存放IP包的原目的IP。此处PTR不变。

2)在转发的过程中,每个收到这个IP包的路由器都会比较自己的IP和IP包的目的IP地址

--对于松散路由,如果两个IP不同,则该包会被正常转发

--对于严格路由,如果两个IP不同,则不转发

--如果两个IP相同,则路由器此时会i 把PTR指向的IP与IP包的目的IP交换位置,然后PTR增加4

遗留问题

 

第9章


重点内容

 本章重点是(1)了解路由表的构成(2)了解如何使用路由表(3)路由表的初始化和修改(4)ICMP路由发现消息(5)ICMP重定向消息

1.  路由表里每一行叫做一个路由表项(route),每个路由表项含以下信息:目的IP,下一跳路由器的IP(for an indirect route)或者本机网卡的IP(for a direct route),and a pointer to a local interface to use,还有一些阐述目的IP性质的标志。

路由表中的标志项有(1)U表示下一跳IP所代表的机器正在运作(2)H表示目的IP是一个主机的IP(而不是一个网络号,或者是网络号加子网号),记住这是用来描述目的IP的(3)G表示下一跳IP地址与本机不是直接相连的,没有G表示直接相连例如SLIP连接(4)D表示这个路由表项是通过重定向建立的(5)M表示这个路由表项被重定向修改过。

2.  发送一个IP数据报时,优先查找目的IP是主机IP的路由表项,其次查找是子网IP的路由表项,最后匹配默认项,如果都不能匹配,则寻路失败,将产生主机不可达或者网络不可达ICMP错误。

3. 路由表加载在内存中,系统启动时,使用route命令从硬盘加载路由表;或者启动后,向周边的路由发送ICMP Router Discovery Messages,获取它们的路由信息;重定向也可以改变路由表;

4. ICMP Router Discovery Messages ,系统启动后,主机广播或者多播路由请求消息(Router Solicitation Message),收到请求的路由器回复广播消息,此外这些路由器还会周期性地广播路由信息。

0                          8                         16                       24                   31

|--------------------|--------------------|--------------------|--------------------|

|          type         |        code          |                  checksum                 |

|--------------------|--------------------|--------------------|--------------------|

|numof addrs   |addr entry size |              life time                          |

|--------------------|--------------------|--------------------|--------------------|

|                                         router address[1]                                     |

|--------------------|--------------------|--------------------|--------------------|

|                                         preference level[1]                                   |

|--------------------|--------------------|--------------------|--------------------|

|                                         router address[2]                                     |

|--------------------|--------------------|--------------------|--------------------|

|                                         preference level[2]                                   |

|--------------------|--------------------|--------------------|--------------------|



5. ICMP 重定向消息 

路由器收到一个IP数据报,查询路由表之后进行转发,转发时发现出口网卡就是该数据报的入口网卡,据此知道可以发送重定向消息。

0                          8                         16                       24                   31

|--------------------|--------------------|--------------------|--------------------|

|          type         |        code          |                  checksum                 |

|--------------------|--------------------|--------------------|--------------------|

|               router IP address that should be used                         |

|--------------------|--------------------|--------------------|--------------------|

..   IP header + first 8 bytes of original IP datagram data          ...

|--------------------|--------------------|--------------------|--------------------|


遗留问题

 

第10章

重点内容

 本章的主题是动态路由协议。围绕动态路由,本章以此讲解了(1)什么是动态路由(2)动态路由协议的分类(3)RIP协议版本1详解和版本2简介(4)BGP协议简介(5)CIDR简介。

1. 动态路由

指路由器将自己所直接连接的网络的信息告知临近的路由器。

2. 动态路由协议

路由器在动态路由过程中使用的协议称为动态路由协议。按照通信双方是否在同一个自治系统(AS ,autonomous system)内划分,可以分成两类,内部网关协议(IGP ,interior gateway protocal)和外部网关协议(EGP ,exterior gateway protocal)。内部网关协议分两种,一种是距离矢量路由协议(distance-vector protocal),一种是链路状态协议(link-state protocal)。每个AS内的路由器被统一管理,通过一种内部网关协议交换路由信息。当不同AS之间的路由器交换路由信息时,就要使用外部网关协议,最著名的外部网关协议是BGP。

RIP 协议使用UDP协议,OSPF 协议直接使用IP协议,BGP 协议使用TCP协议

3. RIP1

UDP端口520分配给RIP协议使用。RIP1格式如下:

4. RIP2

5. BGP

6. CIDR

遗留问题

 

第11章

重点内容

 

遗留问题

 

第12章

重点内容

 

遗留问题

 

第13章

重点内容

 

遗留问题

 

第14章

重点内容

 

遗留问题

 

第15章

重点内容

 

遗留问题

 

第16章

重点内容

 

遗留问题

 

第17章

重点内容

 

遗留问题

 

第18章

重点内容

 

遗留问题

 

第19章

重点内容

 

遗留问题

 

第20章

重点内容

 

遗留问题

 

第21章

重点内容

 

遗留问题

 

第22章

重点内容

 

遗留问题

 

第23章

重点内容

 

遗留问题

 

第24章

重点内容

 

遗留问题

 

第25章

重点内容

 

遗留问题

 

第26章

重点内容

 

遗留问题

 

第27章

重点内容

 

遗留问题

 

第28章

重点内容

 

遗留问题

 

第29章

重点内容

 

遗留问题

 

第30章

重点内容

 

遗留问题

 

第1章

重点内容

 

遗留问题

 

第1章

第1章

第1章

第1章

 

 

三.问题剖析

TCP/IP 协议分层以及各层功能剖析

TCP/UDP的区别与联系

以太网帧的最大、最小帧长如何计算

各种多路分解实例

概述:

实例:

1.

1.8节中提到两种Client-Server Model 的应用实例有哪些

TCP/IP 各种后向兼容是如何实现的
拥塞控制是在各个协议层如何实现

 

 

各层协议是如何做差错检测和处理的(p25有提到一点点)
本书中哪些地方讲到无盘系统
3.6节,Special Case IP Address ,指出
概括使用UDP的各种协议的共同特征
概括使用TCP的各种协议的共同特征
概括使用UDP和TCP的各种协议的共性区别
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值