TCP/IP基础

ip协议域、接口和端口号

  • 由于TCP、UDP、ICMP和IGMP都要向IP传送数据,因此IP必须在 生成的IP首部中加入某种标识,以表明数据属于哪一层。为此, IP在首部中存入一个长度为 8 bit的数值,称作协议域。
  • 1表示为ICMP协议,2表示为IGMP协议,6表示为TCP协议,17表 示为UDP协议。
  • 类似地,许多应用程序都可以使用 TCP或UDP来传送数据。运输层协议在生成报文首部 时要存入一个应用程序的标识符。 TCP和UDP都用一个16 bit的端口号来表示不同的应用程序。 TCP和UDP把源端口号和目的端口号分别存入报文首部中。
  • 网络接口分别要发送和接收 IP、ARP和RARP数据,因此也必须在以太网的帧首部中加入某种形式的标识,以指明生成数据的网络层协议。为此,以太网的帧首部也有一个 16 bit的帧 类型域。
  • 一个主机也可以有多个接口, 但一般不称作路由器 , 除非它的功能只是单纯地把分组从一个接口传送到另一个接口。
  • 多接口主机具有多个 IP地址,其中每个接口都对应一个 IP地址。
  • ü客户端通常对它所使用的端口号并不关心,只需保证该端口号在本机上是唯一的就可以 了。客户端口号又称作临时端口号(即存在时间很短暂)。这是因为它通常只是在用户运行该 客户程序时才存在,而服务器则只要主机开着的,其服务就运行。

以太网封装

        

 PPP数据帧

     

  • 每一帧都以标志字符0x7e开始和结束。紧接着是一个地址字节,值始终是 0xff,然后是一 个值为0x03的控制字节。

环回接口

  • 大多数的产品都支持环回接口(Loopback Interface),以允许运行在同一台主机上的客户 程序和服务器程序通过 TCP/IP进行通信。A类网络号127就是为环回接口预留的。
  • 根据惯例,大多数系统把IP地址127.0.0.1分配给这个接口,并命名为 localhost。一个传给环回接口的 IP数据报不能在任何网络上出现。

    

  • 图中需要指出的关键点是:

1)    传给环回地址(一般是127.0.0.1)的任何数据均作为IP输入。

2)    传给广播地址或多播地址的数据报复制一份传给环回接口,然后送到以太网上。这是 因为广播传送和多播传送的定义包含主机本身。

3)    任何传给该主机IP地址的数据均送到环回接口。

MTU

  • 以太网和802.3对数据帧的长度都有一个限制,其最大值分别是 1500和1492字节。链路层的这个特性称作 MTU,最大传输单元。
  • 如果IP层有一个数据报要传,而且数 据的长度比链路层的MTU还大,那么 IP层 就需要进行分片(fragmentation),把数据 报分成若干片,这样每一片都小于MTU。
  • 当在同一个网络上的两台主机互相进行通信时,该网络的MTU是非常重要的。但是如果两台主机之间的通信要通过多个网络,那么每个网络的链路层就可能有不同的MTU。
  • 重要的是两台主机所在网络的MTU的值,重要的是两台通信主机路径中的最小MTU。它被称作路径MTU。
  • 两台主机之间的路径MTU不一定是个常数。它取决于当时所选择的路由。而选路不一定是对称的(从A到B的路由可能与从B到A的路由不同),因此路径MTU在两个方向上不一定是一致的。

IP网际协议

    

  • 主机的路由选择可以非常简单:如果目的主机在直接相连的网络上,那么就把数据报直接传给目的主机,否则传给默认路由器。
  • 在进行路由选择决策时,主机和路由器都使用路由表。表中有三种类型的路由:特定主机型、特定网络型和默认路由型。路由表中的表目具有一定的优先级。在选择路由时,主机路由优先于网络路由,最后在没有其他可选路由存在时才选择默认路由。
  • IP路由选择是通过逐跳来实现的。数据报在各站的传输过程中目的 IP地址始终不变,但是封装和目的链路层地址在每一站都可以改变。大多数的主机和许多路由器对于非本地网络的数据报都使用默认的下一站路由器。

四类IP地址

        

子网掩码

  • IP地址 = 网络号 + 主机号。(未做子网划分)
  • IP地址 = 网络号 + 子网号 + 主机号。(做子网划分)
  • 子网掩码的作用:分离出 IP 地址中的网络部分与主机部分。
  • 通过比较网络号,就可以知道接受方主机是否在本网络上。如果网络号相同,表明接受方在本网络上,那么可以通过相关的协议把数据包直接发送到目标主机;如果网络号不同,表明目标主机在远程网络上,那么数据包将会发送给本网络上的路由器,由路由器将数据包发送到其他网络,直至到达目的地。
  • 用子网掩码得到网络 / 主机地址 :
  1. 将 IP 地址与子网掩码转换成二进制;
  2. 将二进制形式的 IP 地址与子网掩码做 ' 与 ' 运算,将答案化为十进制便得到网络地址;
  3. 将二进制形式的子网掩码取‘反‘;
  4. 将取 ' 反 ' 后的子网掩码与 IP 地址做 ' 与 ' 运算,将答案化为十进制便得到主机地址。
  • 缺省子网掩码:即未划分子网,对应的网络号的位都置 1 ,主机号都置 0 。

A 类网络缺省子网掩码: 255.0.0.0

B 类网络缺省子网掩码: 255.255.0.0

C 类网络缺省子网掩码: 255.255.255.0

子网划分:使用了缺省子网掩码,那么表示没有作子网划分;反之,则一定作了子网划分。

ARP与RARP协议

  • 帧类型表示的是以太网帧类型 对于ARP请求或应答来说,该字段的值为0x0806。
  • 硬件类型字段表示硬件地址的类型。它的值为1即表示以太网地址。
  • 协议类型字段表示要映射的协议地址类型。它的值为 0x0800即表示IP地址。
  • op操作字段指出四种操作类型,它们是 ARP请求(值为1)、ARP应答(值为2)、RARP请求 (值为3)和RARP应答(值为4)。这个字段必需的,因为ARP请求 和ARP应答的帧类型字段值是相同的。
  • 对应于ARP,RARP请求以广播方式传送,而RARP应答一般是单播( unicast )传送的。
  • RARP服务器的复杂性在于,服务器一般要为多个主机(网络上所有的无盘系统)提供硬 件地址到IP地址的映射。该映射包含在一个磁盘文件中(在Unix系统中一般位于/etc/ethers目录中)。由于内核一般不读取和分析磁盘文件,因此RARP服务器的功能就由用户进程来提供, 而不是作为内核的TCP/IP实现的一部分。
  • 更为复杂的是,RARP请求是作为一个特殊类型的以太网数据帧来传送的,这说明RARP服务器必须能够发送和接收这种类型的以太网数据帧。

ICMP协议

    

  • ICMP检验和字段覆盖整个ICMP报文。
  • ICMP地址掩码请求用于无盘系统在引导过程中获取自己的子网掩码。无盘系统获取子网掩码的另一个方法是BOOTP协议。

    

  •  ICMP时间戳请求允许系统向另一个系统查询当前的时间。返回的建议值是自午夜开始计算的毫秒数,协调的统一时间(Coordinated Universal Time, UTC)。

     

  • ICMP的一个规则是,ICMP差错报文必须包括生成该差错报文的数据报IP首部(包含任何选项),还必须至少包括跟在该 IP首部后面的前 8个字节。
  • 8个字节这个信息对于 ICMP差错的接收方来说是必要的,可以更多地了解导致差错的原因。这是因为 TCP和UDP都在它们的首部前8个字节中存入源端口号和目的端口号。

    

  • ICMP回显应答报文

    

ping程序

  • ping程序是对两个TCP/IP系统连通性进行测试的基本工具。
  • ping程序只利用ICMP回显请求和回显应答报文,而不用经过传输层(TCP/UDP)。
  • ping服务器一般在内核中实现ICMP的功能。
  • 用法:ping <ip/hostname>

traceroute程序

  • Traceroute程序的操作过程:它发送一份TTL字段为1的IP数据报给 目的主机。处理这份数据报的第一个路由器将TTL值减1,丢弃该数据报,并发回一份超时 ICMP报文。这样就得到了该路径中的第一个路由器的地址。然后 Traceroute程序发送一份TTL值为2的数据报,这样我们就可以得到第二个路由器的地址。继续这个过程直至该数据报到达目的主机。但是目的主机哪怕接收到TTL值为1的IP数据报,也不会丢弃该数据报并产生一份超时的ICMP报文,这是因为数据报已经到达其最终目的地。
  • 如何判断是否已经到达目的主机了:Traceroute程序发送一份UDP数据报给目的主机,但它选择一个不可能的值作为UDP端口号(大于30 000),使目的主机的任何一个应用程序都不可能使用该端口。因为当该数据报到达时,将使目的主机的UDP模块产生一份“端口不可达”错误的ICMP报文。 这样Traceroute程序所要做的就是区分接收到的ICMP报文是超时还是端口不可达,以判断什么时候结束。
  • 用法:traceroute <ip/hostname>

UDP协议

  • UDP不提供可靠性:它把应用程序传给IP层的数据发送出去,但是并不保证它们能到达目的地。

    

  • UDP长度字段指的是UDP首部和UDP数据的字节长度。
  • UDP检验和覆盖UDP首部和UDP数据。

TCP协议

  • TCP提供一种面向连接的、可靠的字节流服务。

    

  • 序号用来标识从TCP发端向TCP收端发送的数据字节流,它表示在这个报文段中的的第一个数据字节。
  • 确认序号包含发送确认的一端所期望收到的下一个序号(只有ACK标志为 1时 确认序号字段才有效)。
  • 首部长度给出首部中 32 bit字的数目。这个字段占4 bit,因此TCP最多有6 0字节的首部。
  • URG紧急指针。
  • ACK确认序号有效。
  • PSH接收方应该尽快将这个报文段交给应用层。
  • RST重建连接。
  • SYN同步序号用来发起一个连接。当建立一个新的连接时,SYN标志变1。
  • FIN发端完成发送任务
  • 检验和覆盖了整个的TCP报文段:TCP首部和TCP数据。

SNMP协议

  • 基于TCP/IP的网络管理包含两个部分:网络管理站和被管设备。
  • 网络管理站的相关管理的软件叫做或管理进程( manager )。
  • 被管设备端的相关管理的软件叫做或代理进程( agent )。
  • 管理进程和代理进程之间的通信可以有两种方式。一种是管理进程向代理进程发出请求,询问一个具体的参数值。另外一种方式是代理进程主动向管理进程报告有某些重要的事件发生。
  • 基于TCP/IP的网络管理包含3个组成部分:

a) 管理信息库MIB(Management Information Base)。它包含所有代理进程的所有可被查询和修改的参数。

实例标识:

当对MIB变量进行操作,如查询和设置变量的值时,必须对MIB的每个变量进行标识。只有叶子结点是可操作的。

简单变量:

对于简单变量的处理方法是通过在其对象标识后面添加“ . 0”来处理的。如iso.org.dod.internet.mgmt.mib.udp.udpInDatagrams.0。

虽然这个变量处理后通常可以缩写为udpInDatagrams.0,但在SNMP报文中该变量的名称是其对象的标识1.3.6.1.2.1.7.1.0。(图略,意会即可)

表格:

每个MIB中的表格都指明一个以上的索引。对于UDP**表来说, M I B定义了包含两个变量的联合索引,这两个变量是:udpLocalAddress,它是一个I P地址;udpLocalPort,它是一个整数。

MIB中按照对象标识进行排序时有一个隐含的排序规则。 M I B表格是根据其对象标识按 照字典的顺序进行排序的。

b) 管理信息结构SMI(Structure of Management Information)。是关于MIB的一套公用的结构和表示符号。

• INTEGER。整型。

• OCTER STRING。0或多个8 bit字节,每个字节值在0~255之间。这些字符 串不是以NULL结尾。

• DisplayString。0或多个8 bit字节,但是每个字节必须是ASCII码。

• OBJECT IDENTIFIER。对象标识符

• NULL。代表相关的变量没有值。

• IpAddress。4字节长度的OCTER STRING,以网络序表示的IP地址。每个字节代表IP地址的一个字段。

• PhysAddress。OCTER STRING类型,代表物理地址(例如以太网物理地址为6个字节长度)。

• Counter。非负的整数,可从0递增到232 - 1(4 294 976 295)。达到最大值后归0。

• Gauge。非负的整数,取值范围为从0到4 294 976 295(或增或减)。达到最大值后锁定, 直到复位。

• TimeTicks。时间计数器, 以0.01秒为单位递增,但是不同的变量可以有不同的递增幅度。

• SEQUENCE。这一数据类型与C程序设计语言中的“ structure”类似。一个SEQUENCE包括0个或多个元素,每一个元素又是另一个ASN.1数据类型。

• SEQUENDE OF。这是一个向量的定义,其所有元素具有相同的类型。如果每一个元素都具有简单的数据类型。SNMP在使用这个数据类型时,其向量中的每一个元素是一个SEQUENCE(结构)。因而可以将它看成为一个二维数组或表。

c) 管理进程和代理进程之间的通信协议,叫做简单网络管理协议SNMP(Simple Network Management Protocol)。SNMP包括数据报交换的格式等,且在SNMP中UDP是运输层用的最多的协议。

对象标识符

对象标识是一个整数序列,以点(“.”)分隔。这些整数构成一个树型结构

对象标识从树的顶部开始,顶部没有标识,以root表示

树上的每个结点同时还有一个文字名。例如标识 1.3.6.1.2.1就和iso.org.dod.internet.memt.mib对应。这主要是为了人们阅读方便。

关于管理进程和代理进程之间的交互信息,SNMP定义了5种报文:

  1.   get-request操作:从代理进程处提取一个或多个参数值。
  2.   get-next-request操作:从代理进程处提取一个或多个参数的下一个参数值
  3.   set-request操作:设置代理进程的一个或多个参数值。
  4.   get-response操作:返回的一个或多个参数值。这个操作是由代理进程发出的。它是前面3中操作的响应操作。
  5.   trap操作:代理进程主动发出的报文,通知管理进程有某些事情发生。

Re:前面的3个操作是由管理进程向代理进程发出的,采用UDP的161端口。后面两个是代理进程发给管理进程的,Trap操作采用UDP的162端口。由于收发采用了不同的端口号,所以一个系统可以同时为管理进程和代理进程。

  • SNMP报文格式

    

a)  版本字段是0。该字段的值是通过SNMP版本号减去1得到的。显然0代表SNMPv1。

b)  PDU即协议数据单元,也就是分组。

c)  共同体字段是一个字符串。这是管理进程和代理进程之间的口令,是明文格式。默认的值是public。

d)  差错状态字段是一个整数,它是由代理进程标注的,指明有差错发生。

e)  差错索引字段是一个整数偏移量,指明当有差错发生时,差错发生在哪个参数。

f)  代理进程也可以主动发送trap到管理进程,以告诉管理进程在代理进程侧有某些管理进程所关心的事件发生。

广播和多播

  • 三种IP地址:单播地址、广播地址和多播地址。
  • 广播和多播仅应用于UDP。TCP是一个面向连接的协议,它意味着分别运行于两主机(由IP地址确定)内的两进程(由端口号确定)间存在一条连接。
  • 协议栈各层对收到帧的过滤过程

     

  • 受限的广播地址是255.255.255.255。该地址用于主机配置过程中IP数据报的目的地址,此时主机可能还不知道它所在网络的网络掩码,甚至连它的IP地址也不知道。

在任何情况下,路由器都不转发目的地址为受限的广播地址的数据报,这样的数据报仅出现在本地网络中。

  • 指向网络的广播地址是主机号为全1的地址。

一个路由器必须转发指向网络的广播,但它也必须有一个不进行转发的选择。

  • 指向子网的广播地址为主机号为全1且有特定子网号的地址。作为子网直接广播地址的IP地址需要了解子网的掩码。

例如,如果路由器收到发往128.1.2.255的数据报,当 B类网络128.1的子网掩码为255.255.255.0时,该地址就是指向子网的广播地址;但如果该子网的掩码为255.255.254.0,该地址就不是指向子网的广播地址。

  • 指向所有子网的广播也需要了解目的网络的子网掩码,以便与指向网络的广播地址区分开。

指向所有子网的广播地址的子网号及主机号为全1。

例如,如果目的子网掩码为255.255.255.0,那么IP地址128.1.255.255是一个指向所有子网的广播地址。然而如果网络没有划分子网,这就是一个指向网络的广播。

  • IP多播 提供两类服务:

1) 向多个目的地址传送数据。

2) 客户对服务器的请求。

不同于其他三类IP地址(A、B和C),分配的28 bit均用作多播组号而不再表示其他。多播组地址包括为 1110的最高4 bit和多播组号。它们通常可表示为点分十进制数,范围从224.0.0.0到239.255.255.255。

能够接收发往一个特定多播组地址数据的主机集合称为主机组 (host group)。一个主机组可跨越多个网络。主机组中成员可随时加入或离开主机组。主机组中对主机的数量没有限制,同时不属于某一主机组的主机可以向该组发送信息。

一些多播组地址被IANA确定为知名地址。它们也被当作永久主机组,这和TCP及UDP中的熟知端口相似。

注意这些多播地址 所代表的组是永久组,而它们的组成员却不是永久的。例如224.0.0.1代表“该子网内的所有系统组”,224.0.0.2代表“该子网内的所有路由器组”。多播地址224.0.1.1用作网络时间协议NTP,224.0.0.9用作RIP-2。

IGMP协议

  • Internet组管理协议(IGMP)。它让一个物理网络上的所有系统知道主机当前所在的多播组。
  • IGMP报文通过IP数据报进行传输。IGMP报文通过IP首部中协议字段值为2来指明。

    

  • 首4位为IGMP版本号。
  • IGMP类型为1说明是由多播路由器发出的查询报文,为2说明是主机发出的报告报文。
  • 检验和覆盖整个IGMP报文。
  • 组地址为D类IP地址。在查询报文中组地址设置为0,在报告报文中组地址为要参加的组地址。
  • 多播的基础就是一个进程的概念,该进程在一个主机的给定接口上加入了一个多播组。
  • 主机通过组地址和接口来识别一个多播组。主机必须保留一个表,此表中包含所有至少含有一个进程的多播组以及多播组中的进程数量。
  • 单个物理网络的多播是简单的:
  • 多播进程将目的IP地址指明为多播地址,设备驱动程序将它转换为相应的以太网地址,然后把数据发送出去。
  • 接收进程必须通知它们的IP层,它们想接收的发往给定多播地址的数据报,并且设备驱动程序必须能够接收这些多播帧。
  • 这个过程就是“加入一个多播组”(使用“接收进程”复数形式的原因在于对一确定的多播信息,在同一主机或多个主机上存在多个接收者,这也是为什么要首先使用多播的原因)。
  • 当一个主机收到多播数据报时,它必须向属于那个多播组的每个进程均传送一个复制。这和单个进程收到单播UDP数据报的UDP不同。使用多播,一个主机上可能存在多个属于同一多播组的进程。
  • 当把多播扩展到单个物理网络以外需要通过路由器转发多播数据时,复杂性就增加了。
  • 多播路由器使用IGMP报文来记录与该路由器相连网络中组成员的变化情况。使用规则如下:

1) 当第一个进程加入一个组时,主机就发送一个IGMP报告。如果一个主机的多个进程加入同一组,只发送一个IGMP报告。这个报告被发送到进程加入组所在的同一接口上。

2) 进程离开一个组时,主机不发送 IGMP报告,即便是组中的最后一个进程离开。主机知道在确定的组中已不再有组成员后,在随后收到的IGMP查询中就不再发送报告报文。

3) 多播路由器定时发送IGMP查询来了解是否还有任何主机包含有属于多播组的进程。多播路由器必须向每个接口发送一个IGMP查询。因为路由器希望主机对它加入的每个多播组均发回一个报告,因此IGMP查询报文中的组地址被设置为0。

4) 主机通过发送IGMP报告来响应一个IGMP查询,对每个至少还包含一个进程的组均要发回IGMP报告。使用这些查询和报告报文,多播路由器对每个接口保持一个表,表中记录接口上至少还 包含一个主机的多播组。当路由器收到要转发的多播数据报时,它只将该数据报转发到(使用相应的多播链路层地址)还拥有属于那个组主机的接口上。

  • 多播路 由器并不关心有多少主机属于该组,而只关心该组是否还至少拥有一个主机。
  • IGMP报告和查询的生存时间 ( TTL )均设置为1,这涉及到IP首部中的TTL字段。一个初始TTL为0的多播数据报将被限制在同一主机。在默认情况下,待传多播数据报的TTL被设置为1,这将使多播数据报仅局限在同一子网内传送。更大的TTL值能被 多播路由器转发。

DNS

  • 域名系统(DNS)是一种用于TCP/IP应用程序的分布式数据库,它提供主机名字和IP地址之间的转换及有关电子邮件的选路信息。
  • 报文由12字节长的首部和4个长度可变的字段组成。

    

  •  16 bit的标志字段被划分为若干子字段

    

  • QR 是1 bit字段:0表示查询报文,1表示响应报文。
  • opcode是一个4 bit字段:通常值为0(标准查询),其他值为1(反向查询)和2(服务器状态请求)。
  • AA是1 bit标志,表示“授权回答 (authoritative answer)”。该名字服务器是授权于该域 的。
  • TC是1 bit字段,表示“可截断的 (truncated)”。使用UDP时,它表示当应答的总长度超过512字节时,只返回前512个字节。
  • RD是1 bit字段表示“期望递归(recursion desired)”。该比特能在一个查询中设置,并在响应中返回。该标志告诉名字服务器必须处理这个查询,也称为递归查询。如果该位为0,且被请求的名字服务器没有一个授权回答,它就返回一个能解答该查询的其他名字服务器列表,这称为迭代查询。
  • RA是1 bit字段,表示“可用递归”。如果名字服务器支持递归查询,则在响应中将该比 特设置为1。在后面的例子中可看到大多数名字服务器都提供递归查询,除了某些根服 务器。
  • 随后的3 bit字段必须为0。
  • rcode是一个4 bit的返回码字段。通常的值为0(没有差错)和3(名字差错)。名字差错只有从一个授权名字服务器上返回,它表示在查询中制定的域名不存在。
  • DNS报文中最后的三个字段,回答字段、授权字段和附加信息字段,均采用一种称为资源记录RR(Resource Record)的相同格式。
  • DNS查询报文中的问题部分

         

查询名是要查找的名字,它是一个或多个标识符的序列。每个标识符以首字节的计数值 来说明随后标识符的字节长度,每个名字以最后字节为 0结束,长度为0的标识符是根标识符。

每个问题有一个查询类型,而每个响应(也称一个资源记录,下面将谈到)也有一 个类型。大约有2 0个不同的类型值,其中的一些目前已经过时。

  • DNS响应报文中的资源记录部分

        

域名      是记录中资源数据对应的名字。

类型      说明RR的类型码。

类           通常为1,指Internet数据。

生存时间字段       是客户程序保留该资源记录的秒数。

资源记录              通常的生存时间值为2天。

资源数据              长度说明资源数据的数量。该数据的格式依赖于类型字段的值。对于类型1(A 记录)资源数据是4字节的IP地址。

资源记录(RR):回答R R、授权R R和附加信息R R。现有大约2 0种 不同类型的资源记录。

A            一个A记录定义了一个I P地址,它存储32 bit的二进制数。

PTR        指针记录用于指针查询。 I P地址被看作是in-addr.arpa域下的一个域名(标识符串)。

CNAME 这表示“规范名字 (canonical name)”。它用来表示一个域名(标识符串),而有规范名字的域名通常被称为别名 (alias)。

HINF  表示主机信息:包括说明主机CPU和操作系统的两个字符串。并非所有的站点均提供它们系统的HINFO记录,并且提供的信息也可能不是最新的。

MX         邮件交换记录。

NS          名字服务器记录。它说明一个域的授权名字服务器。它由域名表示(符号串)。

为了减少Internet DNS的通信量,所有的名字服务器均使用高速缓存。

IP选路

  • 术语daemon指的是运行在后台的进程,它代表整个系统执行某些操作。daemon一般在系统引导时启动,在系统运行期间一直存在。

    

  • 路由表中包含的信息决定了IP层所做的所有决策。
  • 每当初始化一个接口时(通常是用ifconfig命令设置接口地址),就为接口自动创建一个直接路由。
  • IP搜索路由表的几个步骤:

1) 搜索匹配的主机地址;

2) 搜索匹配的网络地址;

3) 搜索默认表项(默认表项一般在路由表中被指定为一个网络表项,其网络号为0)。

  • 匹配主机地址步骤始终发生在匹配网络地址步骤之前。IP层进行的选路实际上是一种选路机制,它搜索路由表并决定向哪个网络接口发送分组。
  • 当路由器收到一份IP数据报但又不能转发时,就要发送一份ICMP“主机不可达”差错报文。
  • 一般都假定主机不转发IP数据报,除非对它们进行特殊配置而作为路由器使用。内核选项ipforwarding默认设成的“始终不转发”。
  • ICMP重定向:当IP数据报应该被发送到另一个路由器时,收到数据报的路由器就要发送 ICMP重定向差错报文给IP数据报的发送端。

 

  • 重定向一般用来让具有很少选路信息的主机逐渐建立更完善的路由表。主机启动时路由表中可以只有一个默认表项。一旦默认路由发生差错,默认路由器将通知它进行重定向,并允许主机对路由表作相应的改动。

ICMP路由器发现

  • 一般认为,主机在引导以后要广播或多播传送一份路由器请求报文。一台或更多台路由器响应一份路由器通告报文。另外,路由器定期地广播或多播传送它们的路由器通告报文,允许每个正在**的主机相应地更新它们的路由表。

       

 

动态选路协议

  • 当相邻路由器之间进行通信,以告知对方每个路由器当前所连接的网络,这时就出现了动态选路。
  • 路由器之间必须采用选路协议进行通信,这样的选路协议有很多种。
  • 路由器上有一个进程称为路由守护程序(routing daemon),它运行选路协议,并与其相邻的一些路由器 进行通信。路由守护程序根据它从相邻路由器接收到的信息,更新内核中的路由表。
  • 动态选路并不改变内核在IP层的选路方式。这种选路方式称为选路机制(routing mechanism)。内核搜索路由表,查找主机路由、网络路由以及默认路由的方式并没有改变。仅仅是放置到路由表中的信息改变了—当路由随时间变化时,路由是由路由守护程序动态地增加或删除,而不是来自于自引导程序文件中的route命令。
  • Internet是以一组自治系统 (AS,Autonomous System)的方式组织的,每个自治系统通常由单个实体管理。
  • 每个自治系统可以选择该自治系统中各个路由器之间的选路协议。这种协议我们称之为内部网关协议IGP(Interior Gateway Protocol)或域内选路协议(intradomain routing protocol)。
  • 最常用的IGP是选路信息协议RIP。一种新的IGP是开放最短路径优先OSPF(Open Shortest Path First)协议。它意在取代RIP。
  • 外部网关协议EGP(Exterier Gateway Protocol)或域内选路协议的分隔选路协议用于不同自治系统之间的路由器。
  • 新EGP是当前在NSFNET骨干网和一些连接到骨干网的区域性网络上使用的是边界网关协议BGP(Border Gateway Protocol)。BGP意在取代EGP。
  • Unix系统上常常运行名为routed路由守护程序,该程序只使用RIP进行通信。另一个程序是gated。IGP和EGP都支持它。大多数运行路由守护程序的系统都可以运行routed,除非它们需要支持gated所支持的其他协议。
  • RIP报文格式:

             

  • 字段解析:

命令字段为1表示请求,2表示应答。还有两个舍弃不用的命令(3和4),两个非正式的命令:轮询(5)和轮询表项(6)。

版本字段通常为1,而第2版RIP将此字段设置为2。

紧跟在后面的20字节指定地址系列(address family)(对于IP地址来说,其值是2)、IP地址以及相应的度量。

采用这种20字节格式的RIP报文可以通告多达25条路由。

  • RIP度量

        

        跳数的最大值是15,这意味着RIP只能用在主机间最大跳数值为15的AS内。度量为16表示到无路由到达该IP地址。

RIP–2对RIP定义进行了扩充。这些扩充并不改变协议本身,而是利用图RIP报文中的一些标注为“必须为0”的字段来传递一些额外的信息。如果RIP忽略这些必须为0的字段,那么RIP和RIP-2可以互操作。

           

  1. 路由域(routing domain)是一个选路守护程序的标识符,它指出了这个数据报的所有者。 在一个Unix实现中,它可以是选路守护程序的进程号。该域允许管理者在单个路由器上运行 多个RIP实例,每个实例在一个选路域内运行。
  2. 选路标记(routing tag)是为了支持外部网关协议而存在的。它携带着一个EGP和BGP的自治系统号。
  3. 每个表项的子网掩码应用于相应的IP地址上。
  4. 下一站IP地址指明发往目的IP地址的报文该发往哪里。该字段为0意味着发往目的地址的报文应该发给发送RIP报文的系统。
  5. RIP-2提供了一种简单的鉴别机制。可以指定RIP报文的前20字节表项地址系列为0xffff,路由标记为2。表项中的其余16字节包含一个明文口令。

OSPF开放最短路径优先

  • OSPF是除RIP外的另一个内部网关协议。它克服了RIP的所有限制。
  • 与采用距离向量的RIP协议不同的是,OSPF是一个链路状态协议。距离向量的意思是,RIP发送的报文包含一个距离向量(跳数)。每个路由器都根据它所接收到邻站的这些距离向量来更新自己的路由表。
  • 在一个链路状态协议中,路由器并不与其邻站交换距离信息。它采用的是每个路由器主动地测试与其邻站相连链路的状态,将这些信息发送给它的其他邻站,而邻站将这些信息在自治系统中传播出去。每个路由器接收这些链路状态信息,并建立起完整的路由表。
  • OSPF与RIP(以及其他选路协议)的不同点在于,OSPF直接使用IP。也就是说,它并不使用UDP或TCP。对于IP首部的protocol字段,OSPF有其自己的值。
  • OSPF采用多播而不是广播形式,以减少不参与OSPF的系统负载。
  • BGP:边界网关协议
  • BGP是一种不同自治系统的路由器之间进行通信的外部网关协议。BGP系统与其他BGP系统之间交换网络可到达信息。
  • 一个自治系统中的IP数据报分成本地流量和通过流量。在自治系统中,本地流量是起始或终止于该自治系统的流量。也就是说,其信源IP地址或信宿IP地址所指定的主机位于该自治系统中。其他的流量则称为通过流量。在 Internet中使用BGP的一个目的就是减少通过流量。
  • BGP与RIP和OSPF的不同之处在于BGP使用TCP作为其传输层协议。两个运行BGP的系统之间建立一条TCP连接,然后交换整个BGP路由表。从这个时候开始,在路由表发生变化时,再发送更新信号。
  • BGP通过定期发送keepalive报文给其邻站来检测TCP连接对端的链路或主机失败。两个报文之间的时间间隔建议值为30秒。
  • CIDR:无类型域间选路
  • “无类型”的意思是现在的选路决策是基于整个 32 bit IP地址的掩码操作,而不管其IP地 址是A类、B类或是C类,都没有什么区别。

NVT ACSII

  • 网络虚拟终端ASCII码(NVT ASCII)
  • NVT是一种通用的字符终端,叫网络虚拟终端。客户和服务器用它来建立数据表示和解释的一致性。
  • 而NVT ASCII码则是用来替代ASCII码在客户和服务器间传输的编码形式。
  • NVT ASCII码的构成:NVT ASCII代表7位的ASCII字符集,网间协议族都使用NVT ASCII ,每个7位的字符都以8位格式发送,最高位为0。行结束符以两个字符CR(回车)和紧接着的LF(换行)这样的序列表示,以 表示。单独的一个CR也是以两个字符序列来表示,它们是CR和紧接着的NUL(字节0),表示为 。

FTP协议

  • 必须分清文件传送(file transfer)和文件存取 (file access)之间的区别,前者是FTP提供的,后者是如NFS等应用系统提供的。

       

  • 文件类型

a)     ASCII码文件类型 (默认选择)文本文件以NVT ASCII码形式在数据连接中传输。

b)     EBCDIC文件类型 该文本文件传输方式要求两端都是 E B C D I C系统。

c)      图像文件类型(也称为二进制文件类型) 数据发送呈现为一个连续的比特流。通常用于传输二进制文件。

d)     本地文件类型该方式在具有不同字节大小的主机间传输二进制文件。每一字节的比特数由发方规定。对使用8 bit字节的系统来说,本地文件以8 bit字节传输就等同于图像文件传输。

  • 传输方式:它规定文件在数据连接中如何传输。

a)     流方式(默认选择)文件以字节流的形式传输。对于文件结构,发方在文件尾提示关闭数据连接。对于记录结构,有专用的两字节序列码标志记录结束和文件结束。

b)     块方式 文件以一系列块来传输,每块前面都带有一个或多个首部字节。

c)      压缩方式 一个简单的全长编码压缩方法,压缩连续出现的相同字节。在文本文件中常用来压缩空白串,在二进制文件中常用来压缩0字节

  • FTP使用NVT ASCII码做跨越控制连接的所有远程登录命令和应答。每行结尾都要返回CR、LF对(也就是每个命令或每个应答)。数据传输的默认方式 通常也是NVT ASCII码。
  • 连接管理

FTP在客户进程和服务器进程之间使用两个TCP连接:一个控制连接,它一直持续到客户进程与服务器进程之间的会话完成为止;另一个按需可以随时创建和撤消的数据连接。

                            

使用匿名FTP,须使用“anonymous”用户名来注册。

SMTP协议

  • 用户与用户代理(user agent)打交道,可能会有多个用户代理可供选择。用TCP进行的邮件交换是由报文传送代理MTA(Message Transfer Agent)完成的。用户通常不和MTA打交道,由系统管理员负责设置本地的MTA。

        

  • 两个MTA之间用NVT ASCII进行通信。客户向服务器发出命令,服务器用数字应答码和 可选的人可读字符串进行响应。
  • 电子邮件由三部分组成:

1) 信封(envelope)是MTA用来交付的。

       MAIL From:

RCPT To:

2) 首部由用户代理使用。

Received、Message-Id、From、Data、Reply-To、X-Phone、X-Mailer、To、Subject

每个首部字段都包含一个名,紧跟一个冒号,接着是字段值。

3) 正文(body)是发送用户发给接收用户报文的内容。

       正文为NVT ASCII 文字行。当用DATA命令发送时,先发送首部,紧跟一个空行,然后是正文。用 DATA命令发送的各行都必须小于1000字节。用户接收我们指定为正文的部分,加上一些首部字段,并把结果传到 MTA。MTA加上一些首部字段,加上信封,并把结果发送到另一个MTA。 内容(content)通常用于描述首部和正文的结合。内容是客户用 DATA命令发送的。

  • 中继代理

后续正文扩充了MIME(后续首部增加了charset,略):

NFS(Network File Syste,网络文件系统)

  • NFS是一个使用Sun RPC构造的客户服务器应用程序。NFS客户通过向一个NFS服务器发送RPC请求来访问其上的文件和文件系统。

 

原文地址:https://www.cnblogs.com/tongyishu/p/11810112.html