TCPIP

TCP/IP层次模型中,每一层都会对上一层的数据加入包首部,包首部至少包含两个信息:一个是发送端和接收端的信息,另一个是上一层的协议类型。因为这些协议需要程序实现,要控制整个协议流程的运作,必定需要控制信息,因此就需要包的首部,其中包括了协议实现时用到的控制信息。

数据链路层

相关技术包括:MAC寻址、介质共享、非公有网络、分组交换、环路检测、VLAN(Virtual Local Area Network)等,也会涉及作为传输方式的数据链路,如以太网、WLAN(wireless Local Arrea Network)、PPP(Point to Point Protocol点对点协议),数据链路层也可以被视为网络传输中的最小单位。

FCS

CSMA:载波监听多路访问

ATM (Asynchronous Transfer Mode)

FDDI(Fiber Distributed Data)

共享介质型网络

非共享介质网络

环路检测技术

  • 生成树方式

    生成树协议通过监测网络的结构、禁止某些端口的使用可以有效地消除环路。然而,该端口可以作为发生问题时可绕行的端口。

    生成树方法有一个弊端,就是在发生故障切换网络时需要几十秒的时间。为了解决这个用时过长问题,在IEEE802.1W中定义了一个叫RSTP(Rapid Spanning Tree Protocol)的方法。该方法能将发生问题时的恢复时间缩短到几秒以内。

  • 源路由发

VLAN

如果采用VLAN技术的王巧,就不用实际修改网络布线,只需修改网络的结构即可。VLAN技术附加到网桥/2层交换机上,就可以切断所有VLAN间的通信,因此相比一般的网桥/2层交换机,VLAN 可以过滤多余的包,提高网络的负载效率。

异构的两个网段之间,就需要利用具有路由功能的交换机(如3层交换机),或在各段中间通过路由器的链接才能实现通信。

以太网帧格式

前导码

8位字节 SFD
10101010 10101010 10101010 10101010 10101010 10101010 10101010 1010101 从此往后是帧本体

以太网帧前端有一个叫做前导码的部分,前导码有0/1交替数字组合而成,表示一个以太网帧的开始,也是对端网卡能够确保与其同步的标志,前导码末尾是一个叫做SFD(Start Frame Delimiter)的域。

以太网帧本体的前端是以太网的首部,占14字节,分别是6个字节的目标MAC地址、6个字节源MAC地址以及2个字节的上层协议类型。

以太网帧体格式

目标MAC地址 源MAC地址 类型 数据 FCS
6字节 6字节 2字节 (46~1500字节) 4字节

IEEE802.3以太网帧体格式

目标MAC地址 源MAC地址 帧长度 LLC SNAP 数据 FCS
6字节 6字节 2字节 3字节 5字节 38~1492字节 4字节

FCS:Frame Check Sequence,用它可以检查帧是否有所损坏。在通信传输过程中如果出现电子噪音的干扰,可能会影响发送数据导致码位错乱,因此通过检查这个FCS字段的值可以将那些受到干扰的错误帧丢弃。

FCS中保存着整个帧除以生成多项式的余数。在接收端也用同样的方式计算,如果FCS的值相同,就判定所接受的帧没有差错。

IEEE802.3 Ethernet 与一般的以太网在帧的首部上稍有区别。

带有VLAN标记的交换机之间流动的以太网帧格式

目标MAC地址 源MAC地址 Vlan中被的追加字段 类型 数据 FCS
6字节 6字节 4字节 2字节 (46~1500字节) 4字节

Vlan中被的追加字段

类型 优先度 CFI VLAN ID
16比特(8100 16进制) 3比特 1比特0 12比特

CFI: Canonical Format Indicator,标准格式指示位,当进行源路由时值为1

PPP

通过PPP建立连接时,通常需要进行用户名密码的验证,并且对通信的两端进行双向的验证。

在通过电脑进行拨号时,PPP已经在软件中实现。因此,那些插入或删除“0”的操作或FCS计算都交由CPU去处理。这也就是为什么人们常说PPP这种方式给计算机带来大量负荷的原因所在

PPPoE

有些互联网结束服务商在以太网上利用PPPoE(PPP over Ethernet)提供PPP功能。

单纯的以太网没有验证的功能,也没有建立和断开连接的处理,因此无法按时计费。而如果采用PPPoE管理以太网连接,就可以利用PPP的验证等功能使各家ISP可以有效地管理终端用户的使用。

IP协议

TCP/IP的心脏是互联网层。这一层主要由IP和ICMP两个协议组成。

IP相当于OSI参考模型的第3层

网络层的主要作用是“实现端点之间的通信”。

网络层的下一层,数据链路层主要作用是在互连同一种数据链路的节点之间进行包的传递。而一旦跨越多种数据链路,就需要借助网络层。网络层可以跨越不同的数据链路,即时是在不同的数据链路上也能实现两端节点之间的数据包传输。

数据链路层提供直连两个设备之间的通信功能。预支相比,作为网络层的IP则负责在没有直连的两个网络之间进行通信传输。

IP基础知识

路由控制

​ 路由控制是指将分组数据发送到最终目标地址的功能。

  • 发送数据至最终目标地址

    Hop译为中文叫“跳”。它是指网络中的一个区间。IP包正是在网络中一个跳间被转发。因此IP路由也叫做多跳路由。在每一个区间内决定着包在下一跳被转发的路径。

    数据链路实现某一区间(一跳)内的通信。而IP实现直至最终目标地址的通信(点对点)

    一跳的范围

    一跳是指利用数据链路层以下分层的功能传输数据帧的一个区间。

    以太网等数据链路中使用MAC地址传输数据帧。此时的一跳是指从源MAC地址到目标MAC地
    址之间传输帧的区间。也就是说它是主机或路由器网卡不经其它路由器而能直接到达的相邻主
    机或路由器网卡之间的一个区间。在一跳的这个区间内,电缆可以通过网桥或交换机集线器相
    连,不会通过路由器或网关相连。

    ​ 多跳路由是指路由器或主机在转发IP数据包时只指定下一个路由器或主机,而不是将到最终目标地址为止的所有桐庐全都指定出来。因为每一个区间在转发IP数据包时会分别指定下一跳的操作,直至包达到最终目标地址。
    ​ “Ad Hoc”是指具有偶然性的、在各跳之间无计划传输的意思。尤其在谈到IP时经常会用到该词。

    ​ IP包被转发到途中的某个路由器时,实际上是装入数据链路层的数据帧以后再被送出。以以太网为例,目标MAC地址是下一个路由器的MAC地址。

    • 路由控制表

​ 为了将数据包发给目标主机,所有主机都维护着一张路由表。该表记录IP数据在下一步应该发给哪个路由器。IP包将根据这个路由表在各个数据连路上传输。

数据链路的抽象化

​ IP是实现多个数据链路之间通信的协议。数据链路根据种类的不同各有特点。对这些不同数据链路的相异特性进行抽象化也是IP的重要作用之一。数据链路的地址可以被抽象化为IP地址。因此,对IP的上一层来说,不论底层数据链路使用以太网还是无线LAN亦或是PPP,都将被一视同仁。

​ 不同数据链路有个最大的区别,就是他们各自的最大传输单位(MTU:maximum Transmission Unit)不同。就好像人们在邮寄包裹或行李时有各自的大小限制一样。

​ 为了解决这个问题,IP进行分片处理。是指将较大的IP包分成多个较小的IP包。分片的包到了对端目标地址以后会被组合起来传给上一层。即从IP的上层看,它完全可以忽略数据包在途中的各个数据链路上的MTU,而只需要按照源地址发送的长度接受数据包。IP就是以这种方式抽象化了数据链路层,使得从上层更不容易看到底层网络结构的细节。

IP属于面向无连接型

面向无连接的方式下可能会有很多冗余的通信。

​ 为什么IP要采用面向无连接呢?

​ 主要有两点原因:一时为了简化,而是为了提速。面向连接比起面向无连接处理相对复杂。甚至管理每一个连接本身就是一个相当繁琐的事情。此外,每一次通信之前都要事先建立连接,优惠降低处理速度。需要有连接时,可以委托上一层提供此服务。因此,IP为了事先简单化与高速化采用面向无连接的方式。

为了提高可靠性,上一层的TCP采用面向有连接型。

​ IP提供尽力服务(Best Effort),意指“为了把数据包发送到最终目标地址,尽最大努力。”然而,它并不做“最终收到与否的验证”。IP数据包途中可能发生丢包、错位、以及数据量翻倍等问题。如果发送端的数据未能真正发送到对端目标主机会造成严重的问题。

​ 因此提高通信的可靠性很重要。TCP就提供这种功能。如果说IP只负责将数据发给目标主机,那么TCP则负责保证对端主机确实接收到数据。

​ 为什么不让IP具有可靠传输的能力,从而把两种协议合并到一起呢?

​ 原因在于,如果一种协议规定所有功能和作用,那么该协议的具体实施和编程就会变得非常复杂,无法轻易实现。相比之下,按照网络分层,明确每层协议的作用和责任以后,针对每层具体的协议进行编程会更加有利于该协议的实现。

​ 网络通信中如果能进行有效分层,就可以明确TCP与IP各自协议的最终目的,也有利于后续对这些协议进行扩展和性能上的优化。分层也简化了每个协议的具体实现。互联网能够发展到今天,与网络同喜你的分层密不可分。

IP地址的基础知识

​ 在用TCP/IP通信时,用IP地址识别主机和路由器。为了保证正常通信,有必要为每一个设备配置正确的IP地址。在互联网通信中,全世界都必须设定正确的IP,否则,根本无法实现正常的通信。IP地址就像是TCP/IP通信的一块基石。

IP地址的定义

​ IP地址由32位正整数表示,以每8位为一组,分成四组,每组以“.”分割开,再将每组书转换为十进制。2^32=4294967296 大约43亿。

​ 实际上,每一台主机上的每一块网卡(NIC)都得设置IP地址。一个网卡可以设置多个IP地址。让43亿台计算机全部联网其实是不可能的。

根据一种可以更换IP地址的技术NAT,可连接计算机数超过43亿台。

IP地址由网络和主机两部分标识组成

​ 网络标识在数据链路的每一个段配置不同的值。网络标识必须保证相互连接的每一段的地址不相重复。而相同段内相连的主机必须有相同的网络地址。IP地址的“主机标识”则不允许在同一个网段内重复出现。

​ 可以通过设置网络地址和主机

址,在相互连接的整个网络中保证每台主机IP地址都不会相互重叠。即IP地址具有了唯一性。

IP地址的分类

IP地址分为4个级别,分别为A类、B类、C类、D类。它根据IP地址中的第一位到第四位的比特列对网络标识和主机标识进行区分。

  • A类地址

    A类:以‘0’开头的资质。从第一位到第八位是他的网络标识。即0.0.0.0~127.0.0.0是A类的网络地址。A类地址的后24位相当于主机标识。因此一个网段内可容纳的主机地址上限为2^24-2=16777214个

  • B类地址

    B类IP地址是前两位为‘10’的地址。从第一位到第十六位是他的网络标识。用十进制表示的话,128.0.0.1~191.255.0.0.B类地址的后16位相当于主机标识。因此,一个网段可容纳的主机地址上限为2^16-2=65534

  • C类

    前三位“110”,1到24网络标识,192.168.0.0~239.255.255.255.0,容纳主机地址上限为2^8-2=254个。

  • D类

    前四位“1110”的地址。1-32网络标识,十进制224.0.0.0~239.255.255.255是D类网络地址。D类没有主机标识,常用于多播。

关于分配IP主机地址的注意事项

​ 在分配IP地址时关于主机标识有一点需要注意。即要用比特位表示主机地址时,不可以全部为0或全部为1.因为全部为0表示对应的网络地址或IP地址不可获知的情况下才使用。而全部为1的主机地址通常作为广播地址。

广播地址

  • 两种广播

    广播分为本地刚播和直接广播两种

    在本网络内的广播叫做本地广播。例如网络地址为192.168.0.0/24的情况下,广播地址是192.168.0.255.因为这个广播地址的IP包会被路由器屏蔽,所以不会叨叨192.168.0.0/24意外的其它链路。

    在不同网络间的广播叫做直接广播。例如网络地址为192.168.0.0/24的主机箱192.168.1.255/24的目标地址发送IP包。收到这个包的路由器,将数据转发给192.168.1.0/24,从而使得所有192.168.1.1~192.168.1.254的主机都能收到这个包。(由于直接广播有一定的安全问题,多数情况下会在路由器上设置为不转发)

IP多播

多播是既可以穿透路由器,又可以实现只给那些必要的组发送数据包的技术

多播使用D类地址。

子网掩码

​ 现在,一个IP地址的网络标识和主机标识已不再受限于改地址的类别,而是由一个叫做“子网掩码”的识别码通过子网网络地址细分出比A类、B类、C类更小粒度的网络。这种方式实际上就是将原来A类、B类C类等分类中的主机地址部分用作子网地址,可以将原网络分为多个物理网络的一种机制。

​ 引入子网以后,一个IP地址就有了两种识别码。一是IP地址本身,另一个是表示网络部的子网掩码。

​ IP 地址 172. 20. 100. 52

​ 子网掩码 255. 255. 255. 192

​ 网络地址 172. 20. 100. 0

​ 子网掩码 255. 255. 255. 192

​ 广播地址 172. 20. 100. 63

​ 子网掩码 255. 255. 255. 192

另一种表示方式:

​ IP地址 172.20.100.52 /26

​ 网络地址 172.20.100.0 /26

​ 广播地址 172.20.100.63 /26

全局地址与私有地址

私有网络的IP地址

10.0.0.0~10.255.255.255 (10/8)A类

172.16.0.0~172.31.255.255(172.16/12)B类

192.168.0.0~192.168.255.255(192.168/16) C类

包含在这个范围内的IP地址都属于私有IP,在此之外的IP地址称为全局IP

私有IP最在没有计划连接互联网,而只用于互联网之外的网络。然而,当一种能够互换私有IP与全局IP的NAT技术诞生以后,配有私有地址的主机与配有全局地址的互联网主机实现了通信。全局地址基本上要在整个互联网范围内保持唯一,但私有地址不需要。只要在同一个域里保证唯一即可。

路由控制

IP数据报要想发送到目标地址,需要有路由控制的机制。通信的主机和路由器都必须持有一张路由控制表,才能进行数据包的发送。

路由控制表形成方式:一种是管理员手动设置,另一种是路由器与其他路由器相互交换信息时自动刷新。该表是由一个叫做“路由协议”的协议制作而成。

IP地址与路由控制

​ 路由控制表中记录着网络地址与下一步应该发送至路由器的地址。

默认路由

​ 默认路由是指路由表中任何一个地址都能与之匹配的记录,一般标记为0.0.0.0/0或default。这里的0.0.0.0/0并不是指IP地址是0.0.0.0。由于后面是“/0”,所以并没有标识IP地址。它只是为了避免人门误以为0.0.0.0是IP地址。有时默认路由也被标记为default,但是在计算机内部和路由协议的发送过程中还是以0.0.0.0/0进行处理

主机路由

​ “IP地址/32”也被称为主机路由。例如,192.168.153.15/32就是一种主机路由。它的意思是整个IP地址的所有位都将参加路由。进行主机路由,意味着要基于主机上网卡上配置的IP地址本身,而不是基于地址的网络地址部分进行路由。

环回地址

​ 环回地址是在同一台计算机上的程序之间进行网络通信时所使用的一个默认地址。计算机使用一个特殊的IP地址127.0.0.1作为环回地址。使用这个IP或主机名时,数据包不会流向网络。

路由控制表的聚合

​ 利用网络地址的比特分布可以有效地进行分层配置。对内即使有多个子网掩码,对外呈现出的也是同一个网络地址。这样可以更好地构建网络,通过路由信息聚合可以有小弟减少路由表的条目。

IP分割处理与再构成处理

数据链路不同,最大传输单元(MTU)则相异。鉴于IP属于数据链路上一层,它必须首先与不同数据链路的MTU大小。IP抽象化了底层的数据链路。

以太网的默认MTU是1500字节,因此4342字节的IP数据包无法在一个帧中发送完成。这时,路由器将此IP数据包划分成3个分片进行发送。而这种分片处理只要路由器认为有必要,会周而复始地进行。

​ 经过分片后的IP数据报在被重组的时候,只能由目标主机进行。路由器虽然做分片但不会进行重组。

​ 现实中无法保证IP数据报是否经由同一个路径传送。因此途中即时等待片刻,数据包也有可能无法到达目的地。此外,拆分之后的每个分片也有可能会途中丢失。在目标主机上进行分片的重组时,可能有一部分包会延迟到达。因此,一般会从第一数据报的分片到达的那一刻起等待约30秒再进行处理。

​ IP首部中的“片偏移”字段表示分片之后每个分片在用户数据中的相对位置和该分片之后是否还有后续其它分片。

路径MTU发现

路径MTU(Path MTU)是指从发送端主机到接收端主机之间不需要分片时最大MTU的大小。即路径中存在的所有数据链路中最小的MTU。

IPv4首部

​ 通过IP进行通信时,需要在数据的前面加入IP首部信息。IP首部中包含着用于IP协议进行发包控制时所有的必要信息。了解IP首部结构,也就能够对IP所提供的功能有一个详细的把握。

IPv4首部

  • 版本

    由4比特构成,表示标识IP首部的版本号。IPv4的版本号即为4,因此在这个字段上的值也是“4”

  • 首部长度(IHL:Internet Header Length)

    由4比特构成,标明IP首部的大小,单位为4字节(32比特)。对于没有可选项的IP包,首部长度则设置为“5”。也就是说,当没有可选项时,IP首部的长度为20字节(4*5=20)

  • 区分服务(TOS:Type Of Service)

    由8比特构成,用来表明服务质量。每一位的具体含义如下:

比特 含义
0 1 2 优先度(这三位的值区间0~7,0到7表示优先度从低到高)
3 最低延迟
4 最大吞吐
5 最大可靠性
6 最小代价
(3~6) 最大安全
7 未定义

​ 这几个值通常由应用指定。但是目前几乎所有的网络都无视这几个字段。实现TOS控制极其复杂。但是现在已经有人提出将TOS字段本身再划分为DSCP和ECN两个字段的建议

  • DSCP段与ECN段

    DSCP(Differential Service Codepoint,差分服务代码点),现在统称DiffServ,用来进行质量控制。

    ECN(Explicit Congestion Notification,显示拥塞通告)用来报告网络拥堵情况。

  • 总长度(Total Length)

表示IP首部与数据部分结合起来的总字节数。该字段长16比特。因此IP包的最大长度为2^16=65535

  • 标识(ID:Identification)

    16比特,用于分片重组。同一个分片的标识值相同,不同分别片的标识值不同。通常,发送一个IP包,它的值也逐渐递增。此外,即时ID相同,如果目标地址、原地址或协议不同的话,也会被认为是不同的分片。

  • 标志(Flags)

    由3比特构成,表示包被分片的相关信息。

比特 含义
0 未使用。现在必须是0
1 指示是否进行分片,值为0可以分片,1不能分片
2 包被分片的情况下,表示是否为最后一个包,值为0表示是最后一个分片的包,1表示分片中段的包
  • 片偏移(FO:Fragment Offset)

    由13比特构成,用来标识被分片的每一个分段相对于原始数据的位置。第一个分片对应的值为0。由于FO域占13位,因此最多可以表示2^13=8192个相对位置。单位为8字节,因此最大可表示原始数据8*8192=65536字节的位置。

  • 生存时间(TTL:Time To Live)

    由8比特构成,它最初的意思是以秒为单位记录当前包在网络上应该生存的期限。然而,在实际中它是指可以中转多少个路由器的意思。每经过一个路由器,TTL会减少1,直到变成0则丢弃该包。

  • 协议(Protocol)

    由8比特构成,表示IP首部的下一个首部隶属于哪个协议。

  • 首部校验和(Header Checksum)

    由16比特构成,也叫IP首部校验和。该字段值校验数据报的首部,不校验数据部分。

  • 源地址(Source Address)

    32比特,表示发送端IP地址

  • 目标地址(Destination Address)

  • 可选项(Options)

    长度可变,通常只在进行实验或诊断时使用。该字段包含如下几点信息:

    1. 安全级别
    2. 源路径
    3. 路径记录
    4. 时间戳
  • 填充

    也称为填充物。在有可选项的情况下,首部长度可能不是32比特的整数倍。为此,通过向字段填充0,调整位32比特的整数倍。

  • 数据(Data)

    存入数据。将IP上层协议的首部也作为数据进行处理。

IP协议相关技术

​ IP旨在让最终目标主机收到数据包,但是在这一过程中仅仅有IP是无法实现通信的。必须还有能够解析主机名称和MAC地址的功能,以及数据包在发送过程中异常情况处理的功能。还会涉及IP必不可少的其他功能。

​ IP的辅助技术,具体包括DNS、ARP、ICMP、ICMPv6、DHCP、NAT等。还包括如:IP隧道、IP多播、IP任播、质量控制(Qos)以及网络阻塞的显示通知和Mobile IP技术。

DNS

域名服务器是指管理域名的主机和相应的软件,它可以管理所在分层的域的相关信息。

nslookup 域名 进行查询IP地址

根域名服务器IP地址相关的最新情况可以参考 http://www.internic.net/zones/named.root

  • 解析器(Resolver)

    进行DNS查询的主机和软件叫做DNS解析器。用户使用的工作站或个人电脑都属于解析器。一个解析器至少要注册一个以上域名服务器的IP地址。通常,它至少包括组织内部的域名服务器的IP地址。

DNS查询

ARP

​ 只要确定了IP地址,就可以向这个目标地址发送IP数据报。然而,在底层数据链路层,进行实际通信时却有必要了解每个IP地址所对应的MAC地址。

​ ARP(Address Resolution Protocol):是一种解决地址问题的协议。以目标IP地址为线索,用来定位下一个应该接收数据分包的网络设备对应的MAC地址。如果目标主机不再同一链路上时,可以通过ARP查找下一跳路由器的MAC地址。不过ARP只 适用于IPv4,不能用于IPv6.IPv6中可以用ICMPv6代替ARP发送邻居探索消息。

ARP的工作机制

ARP是借助ARP请求与ARP响应两种类型的包确定MAC地址的。

假定主机A向同一链路上的主机B发送IP包,主机A的IP地址为172.20.1.1,主机B的IP地址为172.20.1.2,他们互不知道对方的MAC地址。

​ 主机A为了获得主机B的MAC地址,起初要广播发送一个ARP请求包。这个包中包含了想要了解其MAC地址的主机的IP地址。由于广播的包可以被同一个链路上所有的主机或路由器接受,因此ARP的请求包也就会被这同一个连路上所有的主机和路由器进行解析。如果ARP请求包中的目标IP地址和自己的IP地址一致,那么这个节点就将自己的MAC地址塞入ARP响应包返回给主机A. 通常获取到MAC地址后会缓存一段时间。

arp -a 获取IP和MAC对应关系

​ 根据ARP可以动态地进行地址解析,因此,在TCP/IP的网络构造和网络通信中无需实现知道MAC地址究竟是什么,只要有IP地址即可。

RARP

​ RARP(Reverse Address Resolution Protocol)是将ARP反过来,从MAC地址定位IP地址的一种协议。例如将打印机服务器等小型切入是设备接入到网络时就经常会得到。

​ 对于使用嵌入式设备时,会遇到没有任何输入接口或无法通过DCHP动态获取IP地址的情况。就可以使用RARP。为此,需要架设一台RARP服务器,从而在这个服务器上注册设备的MAC地址及其IP地址。然后再将这个设备接入到网络,插电启动设备时,该设备会发送一条“我的MAC地址是—,请告诉我,我的IP地址应该是什么”的请求信息。RARP服务器接收到这个消息后返回类似于“MAC为—的设备,IP地址为—-”的信息给这个设备。而设备就根据从RARP服务器所收到的应答信息设置自己的IP地址。

代理ARP

通常ARP包会被路由器隔离,但是采用代理ARP的路由器可以将ARP请求转发给邻近的网段。由此,两个以上网段的节点之间可以像在同一个网段中一样进行通信。

ICMP

ICMP的主要功能包括,确认IP包是否成功送达目标地址,通知在发送过程中IP包被丢弃的具体原因,改善网络设置等。

在IP通信中如果某个IP包因为某种原因未能到达目标地址,那么这个具体的原因将由ICMP负责通知。

ICMP的消息大致可以分为两类:(1)通知出错原因的错误消息。(2)另一类是用于诊断的查询消息。

类型(十进制) 内容
0 回送应答(Echo Reply)
3 目标不可达(Destination UNreachable)
4 原点抑制(Source Quench)
5 重定向或改变路由(Redirect)
8 回送请求(Echo Request)
9 路由请求(Router Advertisement)
10 路由请求(Router Solicitation)
11 超时(TIme Exceeded)
17 地址子网请求(Address Mask Request)
18 地址子网应答(Address Mask Reply)

DHCP

为了实现自动设置IP地址、统一管理IP地址分配,就产生了DHCP(Dynamic Host Configuration Protocol)协议。设备即插即用

使用DHCP之前,首先要架设一台DHCP服务器(很多时候由路由器充当)。然后将DHCP所要分配的IP地址设置到服务器上 。此外还需要将响应的子网掩码、路由控制信息以及DNS服务器的地址等设置到服务器上。

为了检查所要分配的IP地址以及分配了的IP地址是否可用,DHCP服务器或DHCP客户端必须具备以下功能:

  • DHCP服务器

    在分配IP地址前发送ICMP回送请求包(ping),确认没有返回应答。

  • DHCP客户端

    针对DHCP那里获取的IP地址发送ARP请求包,确认没有返回应答。

    在获得IP地址之前在做这种事先处理可能会耗一点时间,但是可以安全地进行IP地址分配

NAT

NAT(Network Address Translator)是用于在本地网络中使用私有地址,在链接互联网时转而使用全局IP地址的技术。出转换IP地址外,还出现了可以转换TCP、UDP端口号的NAPT(Network Address Ports Translator)技术,由此可以实现用一个全局IP地址与多个主机的通信。

​ 在NAT(NAPT)路由器的内部,有一张自动生成的用来转换地址表。

NAPT

NAT的潜在问题

由于NAT(NATP)都依赖于自己的转换表,因此会有以下几点限制:

  • 无法从NAT的外部向内部服务器建立连接
  • 转换表的生成与转换操作都会产生一定的开销
  • 通信过程中一旦NAT遇到异常需重新启动时,所有的TCP连接都将被重置。
  • 即时备置两台NAT做容灾备份,TCP连接还是会被断开。

解决NAT的潜在问题与NAT穿越

  1. 改用IPv6

  2. 即使是在一个没有NAT的环境里,根据所制作的应用,用户可以完全忽略NAT的存在而进行通信。在NAT内测(私有IP地址的一边)主机上运行的应用为了生成NAT转换表,需要先发送一个虚拟的网络包给NAT的外侧。而NAT并不知道这个虚拟包究竟是什么,还是会照样读取包首部中的内容并自动生成一个转换表。这是,如果转换表构造合理,那么还能实现NAT外侧的主机与内测的主机建立连接进行通信。此外,应用还可以与NAT路由器进行通信生成NAT表,并通过一定的方法将NAT路由器上附属的全局IP地址传给应用。

    如此一来,NAT外侧与内测可以进行通信,这种现象叫做“NAT穿越”。于是NAT哪个“无法从NAT外部向内部服务器建立连接”的问题也就迎刃而解了。

IP隧道、IP多播、IP任播

IP隧道

一般情况下,紧接着IP首部的是TCP或UDP的首部。然而,现在应用当中“IP首部后面还是IP首部”或者“IP首部的后面是IPv6的首部”等情况与日俱增。这种在网络层的首部后面继续追加网络层首部的通信方法就做“IP隧道”。

IP隧道

IP多播

IGMP(MLD)多播

IP任播

IP任播是指为哪些提供同一种服务的服务器配置同一个IP地址,并与最近的服务器进行通信的一种方法。选择哪个服务器由路由协议的类型和设置方法决定。

IP任播的应用中最有名的当属DNS根域名服务器。

IP任播机制,它无法保证将第一个包和第二个包发送给同一个主机。这在面向非连接的UDP发出请求而无需应答的情况下没有问题,但是对面向连接的TCP通信或在UDP中要求通过连续的多个包进行通信的情况,就显得力不从心了。

IP任播

TCP与UDP

​ 在TCP/IP中能够实现传输层功能的、具有代表性的协议是TCP和UDP

  • TCP

    ​ TCP是面向连接的、可靠的刘协议。流就是指不间断的数据结构,你可以把它想象成排水管道中的水流。当应用程序采用TCP发送消息时,虽然可以保证发送的顺序,但还是犹如没有任何间隔的数据流发送给接收端。例如:在发送端应用程序发送了10次100字节的消息,那么在接收端,应用程序有可能会受到一个1000字节连续不间断的数据。因此在TCP通信中,发送端应用可以在自己所要发送的消息中设置一个表示长度或间隔的字段信息。

    ​ TCP为提供可靠性传输,实行“顺序控制”或“重发控制”机制。此外还具备“流控制(流量控制)”,“拥塞控制”、提高网络利用率等众多功能。

  • UDP

    ​ UDP是不具有可靠传输性的数据包协议。细微的处理它会交给上层的应用去完成。在UDP的情况下,虽然可以确保发送消息的大小,却不能保证消息一定会到达。因此,应用有时会根据自己的需要进行重发处理。

TCP与UDP区分

​ TCP用于在传输层有必要实现可靠传输的情况。

​ UDP主要用于那些对高速传输和实时性有较高要求的通信或广播通信。如IP电话,广播。。

​ TCP和UDP应该根据应用的目的按需使用。

端口号

​ 端口号用来识别同一台计算机中进行通信的不同应用程序。因此,它也被称为程序地址。

​ TCP/IP或UDP/IP通信中通常采用5个信息来识别一个通信:源IP地址、目标IP地址、协议号、源端口号、目标端口号。只要其中某一项不同,则被认为是其它通信。

​ 数据到达IP层后,会先检查IP首部中的协议号,再传给响应协议的模块。如果是TCP则传给TCP模块、如果是UDP则传给UDP模块去做端口号的处理。即使是同一个端口号,由于传输协议是各自独立地进行处理,因此相互之间不会受到影响。

UDP

UDP(User Datagram Protocol)

​ UDP不提供复杂的控制机制,利用IP提供面向无连接的通信服务。并且它是将应用程序发来的数据在收到的那一刻,立即按照原样发送到网络上的一种极致。

UDP常用于以下几个方面:

  • 包总量较少的通信(DNS、SNMP等)
  • 视频、音频等多媒体通信(即时通信)
  • 限定于LAN等特定网络中的应用通信
  • 广播通信(广播、多播)

TCP

​ UDP是一种没有复杂控制,提供面向无连接通信服务的一种协议。换句话说它将部分控制转移给应用程序去处理,自己却只提供作为传输层协议的最基本功能。

​ TCP与UDP区别相当大。它充分地实现了数据传输时各种控制功能,可以进行丢包时的重发充值,还可以对次序乱掉的分包进行顺序控制。而这些在UDP中都没有。此外TCP作为一种面向有连接的协议,只有在确认通信对端存在时才会发送数据,从而可以控制通信流量的浪费。

序列号与确认应答号

重发超时

连接管理

UDP首部格式

UDP首部由源端口号,目标端口号,包长和校验和组成

UDP首部

  • 源端口号(Source Port)

    ​ 表示发送端端口号,16位,可选,没有源端口号的时候该字段的值设置为0,可用于不需要返回的通信中。

  • 目标端口号(Destination Port)

    ​ 16位

  • 包长度(Length)

    ​ 保存UDP首部的长度和数据的长度之和。单位为字节(8位字节)

  • 校验和(Checksun)

    ​ 校验和是为了提供可靠地UDP首部和数据而设计。

TCP首部格式

TCP首部

​ TCP中没有表示包长度和数据长度的字段。可由IP层获知TCP的包长由,TCP的包长可知数据的长度

  • 源端口号(Source Port)

    发送端端口号,字段长16位

  • 目标端口号(Destination Port)

    表示接收端端口号,字段长度16位

  • 序列号(Sequence Number)

    ​ 字段长32位,也叫序号,是指发送数据的位置。每发送一次数据就累加一次该数据字节数的大小。序列号不会从0或1开始,而是在建立连接时由计算机生成的随机数作为其初始值,通过SYN包传给接收端主机。然后再将每转发过去的字节数累加到初始值上表示数据的位置。此外,在建立连接和断开连接时发送的SYN包和FIN包虽然并不懈怠数据,但是也会作为一个字节增加对应的序列号。

  • 确认应答号(Acknowledgement Number)

    ​ 确认应答号字段长度32位。是指下一次应该收到的数据的序列号。实际上,它是指已收到确认应答号减一为止的数据。

    发送端收到这个确认应答以后可以认为在这个序号以前的数据都已经被正常接收。

  • 数据偏移(Data Offset)

    ​ 该字段表示TCP所传输的数据部分应该从TCP包的哪个位开始计算,当然也可以把它看做TCP首部的长度。该字段长度长4位,单位为4字节(即32位)。不包括选项字段的话,TCP首部为20字节长,因此数据偏移字段可以设置为5,反之,如果该字段的值为5,那说明从TCP包的最开始到20字节位置都是TCP首部,余下的部分为TCP数据。

  • 保留(Reserved)

    ​ 该字段主要是为了以后扩展时使用,其长度为4位。一般设置为0,但即使收到的包在该字段不为0,此包也不会被丢弃。

  • 控制位(Control Flag)

    ​ 字段长为8,每一位从左至右分别为CWR、ECE、URG、ACK、PSH、RST、SYN、FIN。这些控制标志也叫做控制位。当他们对应位上的值为1时,具体含义如下:

    TCP首部控制位

    • CWR(Congestion Window Reduced)

      CWR标志与后面的ECE标志都用于IP首部的ECN字段。ECE标志位1时,则通知对方已将拥塞窗口缩小。

    • ECE(ECN-Echo)

      置为1会通知通信对方,从对方到这边的网络有拥塞。在收到数据包的IP首部中ECN为1时将TCP首部中的ECE设置为1.

    • URG(Urgent Flag)

      该位为1时,表示包中有需要紧急处理的数据。对于需要紧急处理的数据,会在后面的紧急指针中再进行解释。

    • ACK(Acknowledgement Flag)

      该位为1时,确认应答的字段变为有效。TCP规定除了最初建立连接时的SYN包之外该位必须设置为1.

    • PSH(Push Flag)

      该位为1时,表示需要将受到的数据立刻传给上层应用协议。PSH为0时,则不需要立即上传而是先进行缓存。

    • RST(Reset Flag)

      该位为1时,表示TCP连接中出现异常必须强制断开连接。例如,一个没有被使用的端口即使发来连接请求,也无法进行通信。此时就可以返回一个TST设置为1的包。此外,程序宕掉或切断电源等原因导致主机重启的情况下,由于所有的链接信息将全部被初始化,所有原有的TCP通信也将不能继续进行。这种情况下,如果通信对方发送一个设置为1的RST包,就会使通信强制断开连接。

    • SYN(Synchronize Flag)

      用于建立连接。SYN为1表示希望建立连接,并在其序列号的字段进行序列号初始值的设定。

    • FIN(Fin Flag)

      该位为1时,表示今后不会再有数据发送,希望断开连接。当通信结束希望断开连接时,通信双方在主机之间就可以相互交换FIN位置为1的TCP段。每个主机又对对方的FIN包进行确认应答以后就可以断开连接。不过,主机收到FIN设置为1的TCP段以后不必马上回复一个FIN包,而是可以等到缓冲区中的所有数据都因已成功发送而被自动删除之后再发。

    • 窗口大小(Window Size)

      该字段长16位,用于通知从相同TCP首部的确认应答号所指位置开始能够接收的数据大小(8位字节)。TCP不允许发送超过此处所表示大小的数据。不过,如果窗口为0,则表示可以发送窗口探测,以了解最新的窗口大小。但这个数据必须是1个字节。

    • 校验和(Checksum)

      TCP_Checksum伪首部

    TCP的校验和和与UDP相似,区别在于TCP的校验和无法关闭。

  • 紧急指针(Urgent Pointer)

    该字段长为16位。只有在URG控制位为1时有效。该字段的数值表示本报文字段中紧急数据的指针。正确来讲,从数据部分的首位到紧急指针所指示的位置位置为紧急数据。因此也可以说紧急指针指出了紧急数据的末尾在报文段中的位置。此外,紧急指针也用作表示数据流分段的标志。

  • 选项(Options)

    该字段用于提高TCP的传输性能。因为根据数据偏移(首部长度)进行控制,所以其长度对打为40字节。

路由协议

路由控制的定义

IP地址与路由控制

​ 互联网是由路由器连接的网络组合而成的。为了能让数据包正确地到达目标主机,路由器必须在途中进行正确地转发。

​ 路由器根据路由控制表转发数据包。它根据所收到的数据包中目标主机的IP地址与路由控制表的比较得出下一个应该接收的路由器。因此,这个过程中路由控制表的记录一定要正确无误。但凡出现错误,数据包就有可能无法到达目标主机。

静态路由与动态路由

静态路由是指事先设置好路由器和主机中并将路由信息固定的一种方法。

动态路由是指让路由协议在运行过程中自动地设置路由控制信息的一种方法。

动态路由的基础

动态路由会给相邻路由器发送自己已知的网络连接信息,而这些信息又像接力一样一次传递给其它路由器,直至整个网络都了解时,路由控制表也就制作完成了,此时就可以正确转发IP数据包了。

路由控制范围

EGP与IGP

​ 自治系统(路由选择域)内部动态路由采用的协议是域内路由协议(IGP)。而自治系统之间的路由控制采用的是域间路由协议(EGP)

路由协议大致分为两大类。一类是外部网关协议EGP,另一类是内部网关协议IGP(Interior Gateway Protocol)

IP地址分为网络部分和主机部分,他们有各自的分工。EGP与IGP的关系与IP地址网络部分与主机部分的关系有相似之处。就像根据IP地址中的网络部分在网络之间进行路由选择、根据主机部分在链路内部进行主机识别一样,可以根据EGP在区域网络之间(或ISP之间)进行路由选择,也可以根据IGP在区域网络内部(或ISP内部)进行主机识别。

​ IGP中还可以使用RIP(Routing Information Protocol,路由信息协议)、RIP2、OSPF(Open Shortest Path First,开放式最短路径优先)等众多协议。与之相对,EGP使用的是BGP(Border Gateway Protocol,边界网关协议)协议。

路由算法

​ 路由控制中最具代表的算法:(1)距离向量(Distance-Vector)算法和链路状态(Link-State)算法

距离向量算法

​ 距离向量算法是指根据距离和方向决定目标网络或目标主机位置的一种方法。路由器之间可以互换目标网络的方向及距离的相关信息,并以这些信息为基础制作路由控制表。处理简单,但是由于只有距离和方向的信息,所以网络结构复杂时,在获得稳定的路由信息之前需要消耗一定时间,也极易发生路由循环等问题。

距离向量

链路状态算法

​ 链路状态算法是路由器在了解网络整体连接状态的基础上生成路由控制表的一种方法。该方法中,每个路由器必须保持同样的信息才能进行正确的路由选择。为了实现,链路状态算法付出的代价就是如何从网络代理获取路由信息表,这个过程相当复杂,特别是在一个规模巨大而又复杂的网络结构中,管理和处理代理信息需要高速CPU处理能力和大量的内存。

主要路由协议

路由协议名 下一层协议 方式 适用范围 循环检测
RIP UDP 距离向量 域内 不可以
RIP2 UDP 距离向量 域内 不可以
OSFP IP 链路状态 域内 可以
EGP IP 距离向量 对外链接 不可以
BGP TCP 路径向量 对外链接 可以

RIP

RIP(Routing Information Protocol)是距离向量型的一种路由协议,广泛用于LAN,被BSD UNIX作为标准而提供的routed采用了RIP,因此RIP得到了迅速的普及。

RIP

RIP与子网掩码

RIP2

它是RIP的第二版,是对RIP的改良版,它们工作机制基本相同,不过有如下几个新的特点。

  • 使用多播

    RIP中当路由器之间交换路由信息时采用广播的形式,然而RIP2中改用了多播。这样不仅减少了网络流量,还缩小了对无关主机的影响。

  • 支持子网掩码

    与OSPF类似的,RIP2支持在其交换机的路由信息中加入子网掩码信息

  • 路由选择域

    与OSPF的区域类似,在同一个网络中可以使用逻辑上独立的多个RIP

  • 外部路由标志

    通常用于把从BGP等获取的路由控制信息通过RIP传递给AS内。

  • 身份验证密钥

    与OSPF一样,RIP包中携带密码,只有在自己能够识别这个密码时才接受数据,否则忽略这个RIP包。

OSPF

​ OSPF(Open Shortest Path First)是根据OSI的IS-IS协议二提出的一种链路状态性路由协议。由于采用链路状态类型,所以即使网络中有环路,也能够进行稳定的路由控制。OSPF_由链路状态确定路由

​ RIP的路由选择,要求途中所经过的路由器个数越少越好。与之相比,OSPF可以给每一条链路赋予一个权重(也可以叫做代价),并始终选择一个权重最小的路径作为最终路由。也就是说OSPF以每个连路上的代价为度量标准,始终选择一个总的代价最小的一条路径。

网络权重与路由选择

OSPF工作原理概述

OSPF中根据链路状态生成路由控制表

将区域分层化进行细分

​ 链路状态型路由协议的潜在问题在于,当网络规模越来越大时,表示链路状态的拓扑数据库就变得越来越大,路由控制信息的计算就越困难。OSPF为了减少计算负荷,一如了区域的概念。

​ 区域指将连接在一起的网络和主机划分成小组,使一个自治系统(AS)内可以拥有多个区域。不过具有多个区域的自治系统必须要有一个主干区域(Backbone Area),并且所有其他却与必须都与这个主干区域相连接。

OSPF的路由器种类

BGP

BGP(Border Gateway Protocol),边界网关协议是连接不同组织机构(或者说连接不同自治系统)的一种协议。因此它属于外部网关协议(EGP)。具体划分,他主要用于ISP之间相连接的部分。只有BGP、RIP和OSPF共同进行路由控制,才能够进行整个互联网的路由控制。

BGP与AS号

​ 在RIP和OSPF中利用IP的网络地址部分进行着路由控制,然而BGP则需要放眼整个互联网进行路由控制。BGP的最终路由控制表由网络地址和下一站的路由器组来表示,不过它会根据所要经过的AS个数进行路由控制。

BGP使用AS号管理网络信息

BGP是路径向量协议

​ 在AS路径信息访问列表中不仅包含转发方向和距离,还涵盖了途径所有AS的编号。因此它不是一个距离向量型协议。此外,对网络构造仅用一元化表示,因此也不属于链路状态型协议。向BGP这种根据所要经过的路径信息访问列表进行路由控制的协议属于路径向量(Path Vector)型协议。作为距离向量型的RIP协议,因为无法检测环路,所有可能发生无线计数问题。而路径向量型由于能够检测出环路,避免了无线计数的问题,所以网络更容易进入一个稳定的状态。同时它还有支持策略路由的优势。

​ 路由控制是跨越整个互联网的分布式系统

​ 分布式系统是指多个系统协同完成一个特定任务的系统。互联网中的路由控制,以网络内所有路由器都持有正确的路由信息为基础。使这些路由器的信息保持准确的协议就是路由协议。没有这些路由协议的协同工作,就无法进行互联网上正确的路由控制。总之,路由协议散布于整个互联网的各个角落,是支持互联网正常运行的一个巨大的分布式系统。

MPLS

应用协议