者:BG6SMT


不同的厂家生产的计算机运行的操作系统可能完全不同,却因为有了TCP/IP协议族而能够进行相互通信。TCP/IP协议族包含很多协议,其中最重要的两个协议分别是传输控制协议(Transmission Control Protocol,TCP)协议和网际互连协议(Internet Protocol,IP)。本章将介绍TCP/IP协议族里比较核心的一些协议。

在TCP/IP协议族中,有两个传输层协议:传输控制协议(Transmission Control Protocol,TCP)用户数据报协议(User Datagram Protocol,UDP)。其中,TCP是面向连接的、提供可靠服务的协议;UDP则是无连接的,它提供高效但低可靠性的服务。

一、用户数据报协议(UDP协议也被戏称为“即发即忘”协议)

UDP是一个简单的面向数据报(报文)的传输层协议:发送端的UDP对应用程序传下来的报文,只在其首部仅仅加入了复用和数据校验字段后就交付IP层。也就是说,应用层交给UDP多长的报文,UDP就一次照样发送一个报文,在接收端的UDP收到IP层交付的数据报后,去掉首部后原封不动地交付给上层的应用程序。
比较任性,想发数据就发送了,只是数据报文的搬运工,不会对数据报文进行任何拆分和拼接操作。
📚 第四章、TCP/IP协议集 - 图1
UDP提供应用进程之间传送数据的基本机制,它使用网络层协议所提供的功能,向应用层提供服务,为网络层以上和应用层以下提供了一个简单的接口。

1、UDP协议的主要特点:

(1)UDP提供无连接的服务,即在传输数据之前不需事先建立连接。UDP无连接的特点使得数据传输时延比较小。
(2)UDP不提供可靠性。首先不可靠性体现在无连接上,通信都不需要建立连接,想发就发,这样的情况肯定不可靠。并且收到什么数据就传递什么数据,并且也不会备份数据,发送数据也不会关心对方是否已经正确接收到数据了
(3)UDP缺乏拥塞避免和控制机制,网络出现的拥塞不会使源主机的发送速率变低,因此需要基于网络的拥塞控制机制来减小因失控和高速UDP流量负荷而导致的拥塞崩溃效应。使用包队列和丢弃技术的路由器等网络基本设备往往就成为了降低UDP过大通信量的有效工具。此外,数据报拥塞控制协议(Datagram Congestion Control Protocol,DCCP)是通过在诸如流媒体类型的高速率UDP流中增加主机拥塞控制来解决拥塞问题。
📚 第四章、TCP/IP协议集 - 图2
(4)UDP支持一对一(单播)、一对多(多播)、多对一和多对多(广播)的交互通信。
image.png
(5) 头部开销小,传输数据报文时是很高效的

2、UDP的通信过程:

UDP发送方:哎呀,终于睡醒了,干会活吧,开始发送数据喽。。。。
UDP接收方:我还没准备好呢,等等我,慢点,慢点。。。。
于是,发送方、接收方都各自为政,互不干涉,发送方不关心接收方是否接收完整,接收方也无从判断发送方是否开始发了。。。。

3、UDP端口号分配

协议端口是传输层引入的一个非常重要的概念。网络中的通信实际上是进程间的通信,应用程序才是一个IP数据报的最终目的地。大多数计算机的操作系统都支持多进程并发功能,即允许多个应用程序同时运行。因此,通信双方进行通信时,不仅要知道目的主机的IP地址,还应该确定数据交付的具体应用进程。为了解决这个问题,传输层协议引入了不同的协议端口(简称端口)来表示不同的应用程序。与远程服务程序通信时,发送方不仅要知道目的主机的地址,每个IP数据报还必须带有目的主机的协议端口号。同样,为使接收方知道把回应数据发送给谁,发送端在IP数据报中还必须带有自身的协议端口号。

UDP端口号 协议名称 说 明
53 DOMAIN 域名服务(DNS)
69 TFTP 简单文件传输协议
161 SNMP 简单网络管理协议
520 RIP 路由信息协议

由于TCP和UDP是两个独立的模块,因此,它们的端口号也是相互独立的。也就是说,TCP和UDP可以使用相同的端口号,TCP端口号由TCP协议来查看,UDP端口号由UDP协议来查看。

4、UDP数据报格式

UDP数据报有数据字段和首部字段两个字段。首部字段只有8个字节,由4个字段组成,每个字段长度都是两个字节
📚 第四章、TCP/IP协议集 - 图4

(1)源端口:源端口号。在需要对方回信时选用。不需要时可用全0。
(2)目的端口:目的端口号。在终点交付报文时使用。
(3)长度:UDP用户数据报的长度,其最小值是8(仅有首部)。
(4)检验和:检测UDP用户数据报在传输中是否有错。有错就丢弃。

UDP数据报首部中各16位的源端口号和目的端口号用来标记发送和接收的应用进程。因为UDP不需要应答,所以源端口号是可选的(如果源端口不用,那么置为零)。在目的端口号后面是长度固定的以字节为单位的长度字段,用来指定UDP数据报中包括数据部分的长度,最小值为8(仅有首部)。16位的UDP校验和是用来对首部和数据部分一起做校验和的,检测UDP用户数据报在传输中是否出错。
当传输层从IP层收到UDP数据报后,根据首部中的目的端口将其交付给相应的应用程序。如果接收方UDP发现没有与收到的报文中的目的端口号匹配的端口,则丢弃该报文,并发送“端口不可达”差错报文给发送端;如果匹配端口号已满,也丢弃该报文,但不回送差错报文,只能等待超时重发。

二、传输控制协议TCP

1、什么是TCP?

TCP 是面向连接的、可靠的、基于字节流的,具有流量控制的传输层全双工通信协议。

2、TCP的主要特点:

📚 第四章、TCP/IP协议集 - 图5

  • 面向连接:一定是「一对一」才能连接,不能像 UDP 协议 可以一个主机同时向多个主机发送消息,也就是一对多是无法做到的;
  • 可靠的:无论的网络链路中出现了怎样的链路变化,TCP 都可以保证一个报文一定能够到达接收端;
  • 字节流:消息是「没有边界」的,所以无论我们消息有多大都可以进行传输。并且消息是「有序的」,当「前一个」消息没有收到的时候,即使它先收到了后面的字节已经收到,那么也不能扔给应用层去处理,同时对「重复」的报文会自动丢弃。
  • 流量控制:TCP连接的双方都有固定大小的缓冲区,流量控制可以防止较快主机致使较慢主机的缓冲区溢出。通常把缓冲区中的空闲部分称为窗口。TCP采用可变滑动窗口协议,并且当交付的数据不够填满一个缓冲区时,流服务提供“PUSH”机制,应用程序可以用其进行强迫传送。
  • 全双工:TCP连接提供的是全双工的数据传输,采用点对点的方式,即在一个TCP连接中仅有两方进行通信,因此广播和多播方式不能用TCP。

    3、TCP端口号分配

    TCP模块以IP模块为传输基础,可以面向多种应用程序提供传输服务。为了能够区分出对应的应用程序,引入了TCP端口的概念(与UDP类似)。TCP端口号采用了动态和静态相结合的分配方法,对于一些常用的应用服务使用固定的端口号;对于其他的应用服务,尤其是用户自行开发的应用服务,端口号采用动态分配方法,由用户指定其分配。
TCP端口号 协议名称 说 明
21 FTP 文件传输协议-控制(File Transfer Protocol-Control)
22 SSH SSH远程登陆协议(SSH Remote Login Control)
23 TELNET 远程登录(Telnet)
25 SMTP 简单邮件传输协议(Simple Mail Transfer Protocol)
53 DNS 域名服务器(Domain Name Server)
69 TFTP 简单文件传输协议(Trivial File Transfer Protocol)
80 WWW Web服务(World Wide Web)
119 NNTP 网络新闻传输协议(Network News Transfer Protocol)

常见TCP服务及端口号

4、TCP报文段格式

TCP数据报被封装在一个IP数据报中进行传输
image.png
TCP虽然是面向字节流的,但TCP传送的数据单元是报文段。一个TCP报文段分为首部和数据两部分,如图4-4所示。TCP首部的前20个字节是固定的,后面的选项字段根据需要而增加,因此TCP报文段的最小长度为20字节。
📚 第四章、TCP/IP协议集 - 图7
(1)源端口号和目的端口号。源端口号和目的端口号用于表示发送端和接收端的端口号。这两个值加上IP首部中的源IP地址和目的IP地址可以确定一条唯一的TCP连接。
(2)序号。序号字段用于标识从TCP发送端向TCP接收端发送的数据字节流,它表示在这个报文段中的第一个数据字节的序号,通过 SYN 包传给接收端主机,每发送一次数据,就「累加」一次该「数据字节数」的大小。用来解决网络包乱序问题。例如,当前报文段的第一个数据字节的序号为201,数据长度为100字节,则当前报文段的序号字段的值为201,下一报文段的序号值为301。序号字段占4个字节,当序号到达232-1后又从0开始。
(3)确认序号。确认序号包含发送确认的一端所期望收到的下一个序号。既然每个传输的字节都被计数,确认序号应当是上次已成功收到数据字节序号加1。用来解决不丢包的问题。例如,接收端已成功接收发送端发送的序号为501,数据长度为200的报文段。那么,接收端期望收到的下一个数据序号是701,则该确认序号为701。

TCP为应用层提供全双工服务。这意味着数据能在两个方向上独立地进行传输。因此,TCP连接的每一端必须保持每个方向上的传输数据序号。

(4)数据偏移。数据偏移字段指出TCP报文段的数据起始处距离TCP报文段的起始处有多远。需要这个字段是因为选项字段的长度是可变的。这个字段占4位,以4字节为单位,因此TCP数据偏移的最大值是60字节,也就是说TCP首部的最大长度为60字节。
(5)保留。保留字段占6位,保留为今后使用,目前设置为0。
(6)标志位。在TCP首部中有6个标志位

  • URG(urgent):为紧急数据标志。当URG=1时,表示紧急指针字段的值有效。此时,该报文段中有紧急数据,应尽快传送,而不是按照原来的顺序传送。这时需要与首部中的紧急指针字段配合使用。
  • ACK(acknowledgement):为确认标志位。当ACK=1时,表示报文段中的确认序号有效;当ACK=0时,确认序号无效。TCP规定:在连接建立后,所有传送的报文段的ACK字段必须置1。
  • PSH(push)为推送标志位。当PSH=1时,表示发送端希望立即得到接收端的响应。此时,发送方的TCP协议软件马上发送该数据包,接收方收到后也应尽快把这个报文段交给应用层。
  • RST(reset)为复位标志位,用来复位一条连接。如果TCP收到的数据不属于该主机上的任何一个连接,则将RST字段置1,向发送端发送一个复位数据包,释放当前连接。RST字段置1还可用来拒绝一个非法的报文段或拒绝打开一个连接。
  • SYN(synchronous)为同步标志位,在建立连接时用来同步序号。如果SYN=1,而ACK=0,表示这是一个连接请求报文段;如果SYN=1,而ACK=1,则表示这是一个连接接受报文段。具体的连接过程将在4.2.4节中进行讲解。
  • FIN(finish)为终止标志位,用来释放连接。当FIN=1时,表示发送端端完成发送任务,希望释放连接。

(7)窗口。窗口表明该报文段的发送端当前能够接收的从确认序号开始的最大数据长度,该值主要向对方声明本地接收缓冲区的使用情况。窗口大小是一个16位字段,因而窗口字段最大65 535字节。
(8)校验和。校验和覆盖了整个TCP报文段:TCP首部和TCP数据。这是一个强制性的字段,一定是由发送端计算和存储,并由接收端进行验证。
(9)紧急指针。只有当URG=1时,该字段才有效。紧急指针是一个正的偏移量,指出本报文段中紧急数据的字节数。也就是说,紧急指针字段和序号字段中的值相加表示紧急数据最后一个字节的序号。值得注意的是,即使窗口字段为零,也可以发送紧急数据。
(10)选项。选项字段长度可变,最长可达40字节。TCP规定了最长报文大小,又称为MSS(Maximum Segment Size)。每个连接方通常都在通信的第一个报文段中指明这个选项,它指明本端所能接收的报文段的最大长度。

从上图中可以注意到TCP报文段中的数据部分是可选的,在一个连接建立和释放的过程(具体内容在4.2.4节中进行讲解)中,双方交换的报文段都是仅有TCP首部,没有数据部分的。如果一方没有数据要发送,也可以使用没有任何数据的首部来确认收到的数据。在处理超时的许多情况中,也会发送不带任何数据的报文段。


5、TCP传输连接建立与释放

TCP是一个面向连接的协议(是指在数据通信前做好通信两端的准备工作),传输层连接的建立和释放是每一次面向连接的通信中所必不可少的过程。TCP的连接和建立都采用客户/服务器方式,主动发起连接建立的应用进程称为客户(client),而被动等待连接建立的进程称为服务器(server)。在数据通信前,客户(client)会发送一个 SYN 包作为建立连接的请求。如果服务器(server)发来确认应答,则认为可以开始数据通信。如果服务器(server)的确认应答未能到达,就不会进行数据通信。在通信结束时,会使用 FIN 包进行断开连接的处理。
SYN 包和 FIN 包是通过 TCP 头部的控制字段来管理 TCP 连接。一个连接的建立与断开,正常过程至少需要来回发送 7 个包才能完成。建立一个 TCP 连接需要发送 3 个包,这个过程叫作三次握手。断开一个 TCP 连接需要发送 4 个包,这个过程也称作四次挥手。创建一个 TCP 连接,会产生一个 32 位随机序列号,因为每一个新的连接使用一个新的随机序列号。
📚 第四章、TCP/IP协议集 - 图8
1)、建立TCP连接(三次握手)

所谓三次握手(Three-way Handshake),是指建立一个 TCP 连接时,需要客户端和服务器总共发送3个报文。
三次握手的目的是连接服务器指定端口,建立 TCP 连接,并同步连接双方的序列号和确认号,交换 TCP 窗口大小信息。
三次握手过程的示意图如下:
📚 第四章、TCP/IP协议集 - 图9
三次握手

  • 第一次握手
    客户端将TCP报文标志位SYN置为1,随机产生一个序号值seq=J,保存在TCP首部的序列号(Sequence Number)字段里,指明客户端打算连接的服务器的端口,并将该数据包发送给服务器端,发送完毕后,客户端进入SYN_SENT状态,等待服务器端确认。
  • 第二次握手
    服务器端收到数据包后由标志位SYN=1知道客户端请求建立连接,服务器端将TCP报文标志位SYN和ACK都置为1,ack=J+1,随机产生一个序号值seq=K,并将该数据包发送给客户端以确认连接请求,服务器端进入SYN_RCVD状态。
  • 第三次握手
    客户端收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给服务器端,服务器端检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,客户端和服务器端进入ESTABLISHED状态,完成三次握手,随后客户端与服务器端之间可以开始传输数据了。

注意:我们上面写的ack和ACK,不是同一个概念: 小写的ack代表的是头部的确认号Acknowledge number, 缩写ack,是对上一个包的序号进行确认的号,ack=seq+1。 大写的ACK,则是我们上面说的TCP首部的标志位,用于标志的TCP包是否对上一个包进行了确认操作,如果确认了,则把ACK标志位设置成1。

下面我自己做实验,开一个HTTP服务,监听80端口,然后使用Tcpdump命令抓包,看一下TCP三次握手的过程:

  1. sudo tcpdump -n -t -S -i enp0s3 port 80
  2. 第一次握手,标志位Flags=S
  3. IP 10.0.2.2.51323 > 10.0.2.15.80: Flags [S], seq 84689409, win 65535, options [mss 1460], length 0
  4. 第二次握手,标志位Flags=[S.]
  5. IP 10.0.2.15.80 > 10.0.2.2.51323: Flags [S.], seq 1893430205, ack 84689410, win 64240, options [mss 1460], length 0
  6. 第三次握手,标志位Flags=[.]
  7. IP 10.0.2.2.51323 > 10.0.2.15.80: Flags [.], ack 1893430206, win 65535, length 0
  8. 建立连接后,客户端发送http请求
  9. IP 10.0.2.2.51321 > 10.0.2.15.80: Flags [P.], seq 1:753, ack 1, win 65535, length 752: HTTP: GET / HTTP/1.1

tcpdump命令解析一下:
-i : 指定抓包的网卡是enp0s3 -n: 把域名转成IP显示
-t: 不显示时间
-S: 序列号使用绝对数值,不指定-S的话,序列号会使用相对的数值
port: 指定监听端口是80
host:指定监听的主机名

我们看下实战中TCP的三次握手过程:

  • 第一次握手,客户端51323端口号向服务器端80号端口发起连接,此时标志位flags=S,即SYN=1标志,表示向服务端发起连接的请求,同时生成序列号seq=84689409
  • 第二次握手,服务端标志位flags=[S.],即SYN+ACK标志位设置为1,表示对上一个请求连接的报文进行确认,同时设置ack=seq+1=184689410,生成序列号seq=1893430205
  • 第三次握手,客户端对服务端的响应进行确认,所以此时标志位是[.]即ACK=1,同时返回对上一个报文的seq的确认号,ack=1893430206

至此,三次握手完成,一个TCP连接建立完成,接下来就是双端传输数据了

为什么需要三次握手?

  • 我们假设client发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达server。
  • 本来这是一个早已失效的报文段。但server收到此失效的连接请求报文段后,就误认为是client再次发出的一个新的连接请求。于是就向client发出确认报文段,同意建立连接。
  • 假设不采用“三次握手”,那么只要server发出确认,新的连接就建立了。由于现在client并没有发出建立连接的请求,因此不会理睬server的确认,也不会向server发送数据。但server却以为新的运输连接已经建立,并一直等待client发来数据。这样,server的很多资源就白白浪费掉了。
  • 所以,采用“三次握手”的办法可以防止上述现象发生。例如刚才那种情况,client不会向server的确认发出确认。server由于收不到确认,就知道client并没有要求建立连接。

TCP 三次握手跟现实生活中的人与人打电话是很类似的:

三次握手:
“喂,你听得到吗?”
“我听得到呀,你听得到我吗?”
“我能听到你,今天 balabala……”


2)释放TCP连接(四次挥手)
当 TCP 数据段的传输结束时,双方都需要发送 FIN 段ACK 段来终止 TCP 会话。这个方式叫做四次挥手
四次挥手即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。
由于TCP连接是全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送一个FIN来终止这一方向的连接,收到一个FIN只是意味着这一方向上没有数据流动了,即不会再收到数据了,但是在这个TCP连接上仍然能够发送数据,直到这一方向也发送了FIN。首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭。
四次挥手过程的示意图如下:
📚 第四章、TCP/IP协议集 - 图10
四次挥手
挥手请求可以是Client端,也可以是Server端发起的,我们假设是Client端发起:

  • 第一次挥手: Client端发起挥手请求,向Server端发送标志位是FIN报文段,设置序列号seq,此时,Client端进入FIN_WAIT_1状态,这表示Client端没有数据要发送给Server端了。
  • 第二次挥手:Server端收到了Client端发送的FIN报文段,向Client端返回一个标志位是ACK的报文段,ack设为seq加1,Client端进入FIN_WAIT_2状态,Server端告诉Client端,我确认并同意你的关闭请求。
  • 第三次挥手: Server端向Client端发送标志位是FIN的报文段,请求关闭连接,同时Client端进入LAST_ACK状态。
  • 第四次挥手 : Client端收到Server端发送的FIN报文段,向Server端发送标志位是ACK的报文段,然后Client端进入TIME_WAIT状态。Server端收到Client端的ACK报文段以后,就关闭连接。此时,Client端等待2MSL的时间后依然没有收到回复,则证明Server端已正常关闭,那好,Client端也可以关闭连接了。

为什么连接的时候是三次握手,关闭的时候却是四次挥手?
建立连接时因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。所以建立连接只需要三次握手。
由于TCP协议是一种面向连接的、可靠的、基于字节流的运输层通信协议,TCP是全双工模式
这就意味着,关闭连接时,当Client端发出FIN报文段时,只是表示Client端告诉Server端数据已经发送完毕了。当Server端收到FIN报文并返回ACK报文段,表示它已经知道Client端没有数据发送了,但是Server端还是可以发送数据到Client端的,所以Server很可能并不会立即关闭连接,直到Server端把数据也发送完毕。
当Server端也发送了FIN报文段时,这个时候就表示Server端也没有数据要发送了,就会告诉Client端,我也没有数据要发送了,之后彼此就会愉快的中断这次TCP连接。

为什么要等待2MSL?
MSL:报文段最大生存时间,它是任何报文段被丢弃前在网络内的最长时间。
有以下两个原因:

  • 第一点:保证TCP协议的全双工连接能够可靠关闭
    由于IP协议的不可靠性或者是其它网络原因,导致了Server端没有收到Client端的ACK报文,那么Server端就会在超时之后重新发送FIN,如果此时Client端的连接已经关闭处于CLOESD状态,那么重发的FIN就找不到对应的连接了,从而导致连接错乱,所以,Client端发送完最后的ACK不能直接进入CLOSED状态,而要保持TIME_WAIT,当再次收到FIN的数据报,能够保证对方收到ACK,最后正确关闭连接。
  • 第二点:保证这次连接的重复数据段从网络中消失
    如果Client端发送最后的ACK直接进入CLOSED状态,然后又再向Server端发起一个新连接,这时不能保证新连接的与刚关闭的连接的端口号是不同的,也就是新连接和老连接的端口号可能一样了,那么就可能出现问题:如果前一次的连接某些数据滞留在网络中,这些延迟数据在建立新连接后到达Client端,由于新老连接的端口号和IP都一样,TCP协议就认为延迟数据是属于新连接的,新连接就会接收到脏数据,这样就会导致数据包混乱。所以TCP连接需要在TIME_WAIT状态等待2倍MSL,才能保证本次连接的所有数据在网络中消失。

    三、TCP、UDP区别:

    |
    | TCP | UCP | | —- | —- | —- | | 是否连接 | 面向连接 | 无连接 | | 是否可靠 | 可靠传输,使用流量控制和拥塞控制 | 不可靠传输,使用流量控制和拥塞控制 | | 传输方式 | 面向字节流 | 面向报文 | | 错误检测 | 报告错误 | 不报告错误 | | 首部开销 | 首部开销最小20字节,最大60字节 | 首部开销小,仅8字节 | | 传输速度 | 传输慢 | 传输快 | | 连接对象数 | 只能一对一通信 | 支持一对一,一对多,多对一和多对多交互通信 | | 适用场景 | 适用于要求可靠传输的应用,如文件传输 | 适用于实时应用(IP电话,视频会议,直播等) |

四、网际互连协议IP

网际互连协议IP是一个网络层协议,它包含寻址信息和控制信息,可使数据包在网络中路由,IP协议是TCP/IP协议族中最为核心的协议,与TCP协议 结合组成整个因特网协议的核心协议。
与IP协议配套使用的还有4个子协议:

  • [x] 地址解析协议ARP:

    是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。

  • [x] 逆地址解析协议RARP:

    与ARP相反的方式工作。RARP发出要反向解析的物理地址并希望返回其对应的IP地址,应答包括由能够提供所需信息的RARP服务器发出的IP地址。虽然发送方发出的是广播信息,RARP规定只有RARP服务器能产生应答(RARP服务器并不是唯一的,它可以有多个RARP服务器)。

  • [x] 因特网控制报文协议ICMP:

    是一种面向无连接的协议,用于传输出错报告控制信息。它是一个非常重要的协议,它对于网络安全具有极其重要的意义。 它属于网络层协议,主要用于在主机与路由器之间传递控制信息,包括报告错误、交换受限控制和状态信息等。当遇到IP数据无法访问目标、IP路由器无法按当前的传输速率转发数据包等情况时,会自动发送ICMP消息。

  • [x] 因特网级管理协议IGMP:

    是因特网协议家族中的一个组播协议。用于IP主机向任一个直接相邻的路由器报告他们的组成员情况。

1、IPV4地址

当网络中的两台主机要进行通信时,必须知道通信双方各自的地址,这就是我们所理解的Internet地址,即IP地址。IP地址实际上是一种标识符,TCP/IP协议通过IP地址来识别网络中不同的主机。

1)、IP地址的表示

根据TCP/IP协议规定,IP地址由32位二进制数所组成。例如,互联网上一台主机的IP地址为11000001001000001101100000001001。为了记忆方便,可以将IP地址的32位二进制数进行分段,每段8位,共4段,然后将每段8位二进制数转换为相应的十进制数,中间用“﹒”号间隔,这种表达方式称之为“点分十进制”。也就是说,上述的IP地址可以表示成193.32.216.9
image.png

从概率学的角度看,32位二进制数能表达232种不同的情况。也就是说,按照IP地址的设计初衷考虑,32位的地址空间可以表达4 294 967 296个不同的Internet地址。 按 IP 地址拥有量的国家排序(前二十名,中国包含港澳台) 美国 1537033152 中国 411403965 日本 197399208 德国 132279277 英国 119098036 韩国 114011448 巴西 89046901 法国 82350251 加拿大 71378220 澳大利亚 59303901 意大利 56456752 荷兰 52738275 俄罗斯 46075222 印度 44773242 西班牙 34403321 墨西哥 29538978 南非 29060485 瑞典 28379015 比利时 28270484 埃及 24363072

2)、IP地址的分类

2.1、IP地址的结构

image.png

  • 网络号:也叫做网络地址,用于标识大规模TCP/IP网际网络(即由网络组成的网络)内的单个网段。
  • 主机号:也叫做主机地址,用于识别每个网络内部的TCP/IP节点,如工作站、服务器、路由器或其他TCP/IP设备。

    2.2、IP地址分类

    IP地址中的网络号和主机号总共32位(4个字节),那么,如果网络号部分占总地址空间比较少,相应的主机号部分位数就增多,这样的网络中容纳的主机数就比较多,也就是说网络规模就比较大;反之也很好理解。因网络规模有所不同,为了方便网络的管理,IP地址被分为A,B,C,D,E五类
    📚 第四章、TCP/IP协议集 - 图13
    A、B、C类地址称之为单目传送地址,这些地址通常只能分配给唯一的主机;D类地址是组播地址;E类地址则是在IP地址设计之初保留作为科学研究用的。各类IP地址类别详述如下表所示。
IP地址类型 二进制固定最高位 二进制网络位 二进制主机位 网络号地址范围 每个网络中最多可容纳主机数
A类 0 8位 24位 1.0.0.0~126.0.0.0 224-2
B类 10 16位 16位 128.0.0.0~191.255.0.0 216-2
C类 110 24位 8位 192.0.0.0~223.255.255.0 28-2(254)
D类 1110 组播地址
E类 11110 保留地址

A类地址
(1)A类地址第1字节为网络地址,其它3个字节为主机地址。它的第1个字节的第一位固定为0.
(2)A类地址网络号范围:1.0.0.0—126.0.0.0
(3)A类地址中的私有地址和保留地址:
① 10.X.X.X是私有地址(所谓的私有地址就是在互联网上不使用,而被用在局域网络中的地址)。
范围(10.0.0.0—10.255.255.255)
② 127.X.X.X是保留地址,用做循环测试用的。
B类地址
(1) B类地址第1字节和第2字节为网络地址,其它2个字节为主机地址。它的第1个字节的前两位固定为10.
(2) B类地址网络号范围:128.0.0.0—191.255.0.0。
(3) B类地址的私有地址和保留地址
① 172.16.0.0—172.31.255.255是私有地址
② 169.254.X.X是保留地址。如果你的IP地址是自动获取IP地址,而你在网络上又没有找到可用的DHCP服务器。就会得到其中一个IP。
191.255.255.255是广播地址,不能分配。
C类地址
(1)C类地址第1字节、第2字节和第3个字节为网络地址,第4个字节为主机地址。另外第1个字节的前三位固定为110。
(2)C类地址网络号范围:192.0.0.0—223.255.255.0。
(3)C类地址中的私有地址:
192.168.X.X是私有地址。(192.168.0.0—192.168.255.255)
D类地址
(1) D类地址不分网络地址和主机地址,它的第1个字节的前四位固定为1110。
(2) D类地址范围:224.0.0.0—239.255.255.255
E类地址
(1) E类地址不分网络地址和主机地址,它的第1个字节的前五位固定为11110。
(2) E类地址范围:240.0.0.0—255.255.255.254
IP地址如果只使用ABCDE类来划分,会造成大量的浪费:一个有500台主机的网络,无法使用C类地址。但如果使用一个B类地址,6万多个主机地址只有500个被使用,造成IP地址的大量浪费。因此,IP地址还支持VLSM技术,可以在ABC类网络的基础上,进一步划分子网。

IP地址按作用范围可分成两类,一类是在大网使用的公共IP地址,另一类是只在内网使用的私有地址。 IP按用途可分五大类:A类(政府)、B类(公司)、C类(公用)、D类(组播)和E类(实验),地址格式为网络地址+主机地址或网络地址+子网地址+主机地址形式。

2.3、特殊IP 地址

在IP地址中,有一些特殊地址被赋予特殊的作用。
1)广播地址:
主机地址全为1的IP地址称为广播地址。广播地址专门用于同时向网络中所有主机发送数据。例如,对于IP地址为192.168.10.0的C类网段,当发出一个目的地址为192.168.10.255的分组时,它将被分发给该网段上的所有主机。广播地址又分为直接广播地址和有限广播地址两种。直接广播地址有网络号,但主机字段通常全为1,这类广播会被送到专门网络(由网络号决定)上的每台主机。有限广播地址是指网络字段和主机字段全为1的地址,即255.255.255.255,它不被路由但会被送到相同物理网络段上的所有主机。
2)组播地址
组播地址就是前面讲的D类地址,主要用于视频广播和视频点播系统,IP地址范围从224.0.0.0到239.255.255.255。其中,224.0.0.1特指所有主机,224.0.0.2特指所有路由器。组播地址和广播地址是不一样的:广播地址按主机的物理位置来划分各组,而组播地址指定一个特定的逻辑组,参与该组的计算机可能遍布整个Internet。
3)环回地址
网络地址是127的IP地址称为环回地址或者回送地址,主要用于对本地回路测试及实现本地机进程间的通信。在实际中经常使用的环回地址是127.0.0.1,它还有一个别名叫做localhost。

事实上,只要第一字节为127的任意IP地址(甚至是非法的IP地址),系统都会自动识别为127.0.0.1。

4)私有地址
一般的IP地址是由网络信息中心(Network Information Center,NIC)统一管理并分配给提出注册申请的组织机构的,这类IP地址称为公有地址,通过它可以直接访问因特网。而私有地址属于非注册地址,专门为组织机构内部使用。常用的私有地址分类如表所示。

私有地址类别 范围
A类 10.0.0.0~10.255.255.255
B类 172.16.0.0~172.31.255.255
C类 192.168.0.0~192.168.255.255

使用私有地址的私有网络由于不与外部互连,因而可能使用随意的IP地址。私有网络在接入Internet时,要使用地址翻译(NAT),将私有地址翻译成公用合法IP地址。

在实际生活中,一些宽带路由器往往使用192.168.1.1作为缺省地址。

不同类型的特殊IP地址总结如表所示。

网络地址 主机地址 地址类型 用 途
全0 全0 本机地址 启动时使用
有网络号 全0 网络地址 标识一个网络
有网络号 全1 直接广播地址 在专门网络上广播
全1 全1 有限广播地址 在本地网上广播
127 任意 环回地址 回送测试

2、子网技术

补充知识点:二进制与十进制转换:
1、十进制转二进制:
采用”除2取余,逆序排列“法:

1.首先用2整除一个十进制整数,得到一个商和余数
2.然后再用2去除得到的商,又会得到一个商和余数
3.重复操作,一直到商为小于1时为止
4.然后将得到的所有余数全部排列起来,再将它反过来(逆序排列),切记一定要反过来!

假设我们现在需要将156转为二进制,那我们怎么做呢,如下图所示:
image.png
所以156转二进制应为:10011100
2)、二进制转十进制
采用按权相加法
比如将10011100转为十进制,那我们怎么做呢,如下所示:
10011100
127+026+025+124+123+122+021+020
=
128+0+0+16+8+4+0
= 156

补充知识点:按位与运算符(&)

参加运算的两个数据,按二进制位进行“与”运算。

运算规则:0&0=0; 0&1=0; 1&0=0; 1&1=1;

即:两位同时为“1”,结果才为“1”,否则为0

例如:3&5 即 0000 0011& 0000 0101 = 00000001 因此,3&5的值得1。

1)、子网

在实际使用过程中,许多单位会把单一网络划分为多个物理网络,并使用路由器将它们连接起来,如图4-10所示。这些物理网络通称为子网,这种操作方法称为子网划分。
image.png
划分子网的好处有很多,主要体现在以下3个方面。

  • 充分利用IP地址:由于A类网和B类网的地址空间太大,致使在不使用路由设备的单一网络中无法使用全部地址。因此,为了能更有效地使用地址空间,有必要把可用地址分配给更多较小的网络。
  • 易于管理网络:当一个网络被划分为多个子网时,每个子网变得易于控制,管理变得简单,减轻了大型网络的管理难度。
  • 提高网络性能:将一个大型的网络划分为若干个子网,其中的路由器设备可以把不同的子网隔离开来。同一子网中的主机之间只能在各自的子网中进行广播和通信,不会转到其他子网中。另外,用路由器隔离还可以将网络分为内外两个子网,限制外部网络用户对内部网络的访问,从而提高内部子网的安全性。

    2)、划分子网的方法

    对于标准的A类、B类和C类地址来说,它们只具有网络号和主机号两层结构。为了划分子网,可以将其主机号分为两个部分,其中一部分用于子网号的编制,剩余部分用于主机号的编制。这样就形成了一个三层结构,即网络号、子网号和主机号,如图4-11所示。
    image.png
    子网号的位数取决于组网的实际需要:子网号所占的比特位越多,则可以分配给主机的位数就越少。也就是说,在一个子网中所包含的主机就少。
    (1)假设当前主机号有M位,向主机位部分借用n位来划分子网,则可以划分出2n个子网。反之,知道所需网络数,也可以计算出所需借用的主机位位数。
    (2)假设当前主机号有M位,划分子网后主机位有m位,则最多可容纳主机数量为2m-2台。反之,知道子网中的主机数量,也可以计算出所需主机位数。用当前主机位M减去划分子网后的m位,即可得到需借用的主机位位数。

    如果网络不是无类别域间路由(CIDR)的环境,则必须去除全0和全1的子网号,因此只能划分出2n-2个子网,每个子网中最多容纳2m-n-2台主机。

例如,将一个C类网络203.66.77.0划分为4个子网,那么需要借用3位主机位作为子网号,每个子网可以容纳25-2=30台主机。又例如,一个B类网络172.17.0.0,将主机号的前8位作为子网号,另外8位作为主机号,那么这个B类网络就被分为28-2=254个子网,每个子网可以容纳28-2=254台主机。

3)、子网掩码

图4-12中给出了两个B类IP地址,这两个IP地址从外观上没有任何差别,那么应该如何区分这两个地址呢?这就要用到子网掩码。
image.png
子网掩码(或称子网屏蔽码)与IP地址相同,也是一个32位的二进制数。对于子网掩码的取值,通常是将对应于IP地址中网络地址(网络号和子网号)的所有位设置为“1”,对应于主机地址(主机号)的所有位都设置为“0”。
子网掩码有两种表示方法,一是“点分十进制”表示法,二是网络前缀标记法。
(1)“点分十进制”表示法与IP地址中相同。
(2)子网号是从IP地址高字节以连续方式选取的,即从左到右连续地取若干位作为网络号。因此,可用网络地址(网络号和子网号)的位数来表示子网掩码,形式为“/<网络地址位数>”,这种表示方法称为“网络前缀标记法”。例如,一个子网掩码为255.255.0.0的B类网络地址156.81.0.0,用网络前缀标记法可以表示为156.81.0.0/16。
标准的A类、B类、C类网络地址的默认子网掩码如表4-6所示。
image.png
用子网掩码判断IP地址的方法是用IP地址与子网掩码进行“按位与&(AND)”运算,运算结果即为网络地址。
image.png
image.png
image.png
通过例4-1和例4-2可以看出,使用子网掩码可以区分一个IP地址是否使用子网划分,还可以计算出其网络地址。

4)、划分子网的步骤

划分子网的步骤如下:image.png
image.pngimage.pngimage.png

5)、可变长子网划分

当用户选择了一个普通子网掩码之后,就不能支持不同尺寸的子网了,这对于网络内部不同网段需要不同大小子网的情形来说非常不方便。相对于普通子网掩码,在RFC 1878中定义了可变长子网掩码(Variable Length Subnet Mask,VLSM),它在划分子网并保留足够的主机数的同时,将子网进一步分成多个小子网,这种方法能将网络划分为三级或更多级子网,使子网划分具有更大的灵活性,也使IP地址具有更高的利用率。
如果对一个网络进行了可变长子网划分,那么就可以用不同长度的子网网络号来唯一标识每个子网,并能通过对应的子网掩码进行区分。VLSM规定了如何在一个进行了子网划分的网络中的不同部分使用不同的子网掩码。
例4-4:某公司有两个主要部门:市场部和技术部。市场部有员工100人;技术部又分为硬件设计部和软件设计部两个部门,各有员工52人。该公司申请到了一个完整的C类IP地址段:210.31.233.0,子网掩码255.255.255.0。为了便于分级管理,该公司准备采用VLSM计算,将原主网络划分为两级子网,请给出可变长子网掩码划分方案。

image.png (1)一个能容纳100台主机的子网。
用主机号中的1位(第4个字节的最高1位)进行子网划分,产生2个子网,分别为210.31.233.0/25、和210.31.233.128/25两个子网段。这种子网划分允许每个子网有126台主机(27-2)。选择210.31.233.0/25(子网掩码为255.255.255.128)作为网络号,该一级子网共有126个IP地址可供分配,能够满足市场部的需求。表4-7中给出了能容纳126台主机的一个子网。

image.png

image.png (2)两个能容纳52台主机的子网。
为满足2个子网各能容纳52台主机的需求,可以使用一级子网中的第2个子网210.31.233.128/25(子网掩码为255.255.255.128),取出其主机号的1位进一步划分成两个二级子网,其中第1个二级子网为210.31.233.128/26(子网掩码为255.255.255.192),划分给硬件部门,该二级子网共有62个IP地址可供分配;第2个二级子网为210.31.233.192/26(子网掩码为255.255.255.192)划分给软件部门,该二级子网共有62个IP地址可供分配。表4-8给出了能容纳62台主机的两个子网。

image.png
对这个可变长子网的划分结果如图4-16所示。
image.png

6)、超网和无类域间路由

目前,在Internet上使用的IP地址是在1978年确立的协议,它由4段8位二进制数字组成。由于Internet协议当时的版本号为4,因而称为“IPv4”。尽管这个协议在理论上有大约43亿个IP地址,但是,并不是所有的地址都得到了充分的利用。A类和B类地址所包含的主机数又太多,而C类地址包含的主机数又太少,如一个B类网络其中所包含的主机数可以达到65 534个,一个C类网络中只能容纳254台主机,这对于拥有上千台主机的单位来说,选择哪类网络地址都是不合适的。
此外,由于Internet的迅猛发展,主机数量急剧增加,它正以非常快的速度消耗着IP地址。为了解决当前IP地址面临的严重资源不足的问题,InterNIC设计了一种新的网络分配方法:对于一个主机数量介于B类网络和C类网络的单位,InterNIC给它分配多个C类网络的范围,该范围能够容纳足够的网络和主机。这种方法实质上就是将若干个C类网络合并成一个网络,这个合并后的网络就称为超网。例如,假设一个单位拥有2 000台主机,那么InterNIC并不是给它分配一个B类网络,而是分配8个C类网络。每个C类网络可以容纳254台主机,总共2 032台主机,能够满足实际需求。
虽然这种方法有助于节约B类网络,但它又导致新的问题:采用通常的路由选择计算,在Internet上每个路由器的路由表中必须有8个C类网络表项才能把IP包路由到该单位。为防止Internet路由器被过多的路由淹没,必须采用一种称为无类域间路由(Classless Inter-Domain Routing,CIDR)的计算,把多个表项缩成一个表项。使用了CIDR后,路由表中只用一个路由表项就可以表示分配给该单位的所有C类网络。在概念上,CIDR创建的路由表项可以表示为:image.png
其中,“起始网络”表示的是所分配的第一个C类网络地址,“数量”是分配的C类网络的总个数。实际上,它可以用一个超网子网掩码来表示相同的信息。
例4-5 某公司申请到1个网络地址块(共8个C类网络地址):210.31.224.0~210.31.231.0/24,为了对这8个C类网络地址块进行汇总,该采用什么样的超网子网掩码呢?CIDR前缀为多少

image.png 将8个C类网络地址的二进制表示形式列出,如表4-9所示。
image.png

CIDR实际上是借用部分网络号来充当主机号。在表4-9中,因为8个C类地址网络号的前21位完全相同,变化的只是最后3位网络号,因此,可以将网络号的后3位看成是主机号,由此得到超网的子网掩码的二进制数为“11111111 11111111 11111000 00000000”,即255.255.248.0。若用网络前缀表示法来表示,可表示为210.31.224.0/21。
利用CIDR实现地址汇总有两个基本条件:
(1)待汇总地址的网络号拥有相同的高位。如表4-9所示,8个待汇总的网络地址的第3个位域的前5位完全相等,均为11100。
(2)待汇总的网络地址数目必须是2n个,如2个,4个,8个,16个等;否则,可能会使汇总后的网络可能包含实际中并不存在的子网,导致路由黑洞。使用可变长子网划分、超网和CIDR配置网络时,要求相关的路由器和路由协议必须能够提供支持,IP路由信息协议版本2(RIPv2)和边界网关协议版本4(BGPv4)都支持可变长子网划分和CIDR,而路由信息协议版本1(RIPv1)则不支持。具体路由协议将在第六章进行讲解。

3、IP数据报

TCP/IP协议定义了一个在Internet上传输的基本数据单元,称为IP数据报(IP Datagram),其格式如图4-17所示。IP数据报包含报头区和数据区两个部分,数据区是高层传输的数据,而报头区是为了正确传输高层数据而增加的控制信息。
image.png
IP数据报报头包含了一些必要的控制信息,由20个字节的固定部分和变长的可选项部分组成。已知最高位在左边,记为0位;最低为在右边,记为31位。那么报头中各字段的内容如下:
(1)版本。版本字段占4位,用来表明IP协议的版本。目前广泛使用的IP协议版本号为4(即IPv4),其版本字段为0100。
(2)首部长度。首部长度字段占4位,表示数据报头的长度。
(3)区分服务。区分服务字段占8位,指示数据报内容的优先权或者优先级。这个字段在旧标准中叫做服务类型,在一般情况下都不使用该字段。只有在使用区分服务时,这个字段才起作用。
(4)总长度。总长度字段是指整个IP数据报的长度(以字节为单位),包括数据报头和数据。由于该字段占16位,所以IP数据报最长可达65 535字节。
在IP层下面的每一种数据链路层协议都规定了一个数据帧中的数据字段的最大长度,这个最大长度被称为最大传送单元(Maximum Transmission Unit,MTU)。当一个IP数据报在链路层封装成帧时,此IP数据报的总长度一定不能超过数据链路层所规定的MTU。
(5)标识符。标识符占16位,每个数据报都必须由唯一的标识符来标识,以便使接收端能重装被分段的数据包。当IP对数据段进行分段的时候,它将给所有的段分配一组编号,然后将这些编号放入标识符字段,保证分段不会被错误地进行重组。
(6)标志。标志字段占用3位,但只有低两位有效:

  • 标志字段的最低位记为MF(More Fragment),又称最终分段标志。当MF=1时,表示该数据报后还有分片的数据报;当MF=0时,表示该数据报是最后一个分片。
  • 标志字段的中间一位记为DF(Don’t Fragment),又称禁止分段标志。当DF=1时,表示该数据包不能分片;当DF=0时,才允许分片。

(7)片偏移。片偏移字段占13位,用于指出在较长的分组在分片后,某片在原分组中的相对位置。片偏移以8个字节为偏移单位,也就是说,每个分片的长度一定是8字节(64位)的整数倍。
(8)生存周期(Time To Live,TTL)。TTL值用于限制数据报在网络中的生存时间。数据报每经过一个路由器,该路由器将减少TTL的值;当TTL的值为0的时候,该数据报将被丢弃。这样可以防止一个数据报在网络中无限循环地转发下去。
(9)协议。协议字段占8位,用于指定数据区中携带的消息是由哪种高级协议建立的。常用的协议和相应的协议字段值如下:image.png
(10)首部校验和。首部校验和是一个16位的循环冗余校验码,其值等于IP报头内每一个字段中包含的值的和。该字段用于保证头部数据的完整性和传输的正确性。IP数据报每经过一个路由器,路由器都检查该校验和的值并进行更新,这是因为报头中的TTL值、标志、片偏移等值可能发生变化。
(11)源IP地址和目的IP地址。源IP地址及目的IP地址均占32位,分别用于指定发送IP数据报的源主机地址和接收IP数据报的目的主机地址。
IP数据报报头的可选字段长度可变,从1个字节到40个字节不等,用来支持排错、测量以及安全等措施。增加可选字段是为了增加IP数据报的功能,但同时也使得IP数据报的首部长度不固定,增加了路由器处理数据报的开销。

4、地址解析协议

1)、IP地址与物理地址

实际通信时,在一个网络中对其内部的一台计算机进行寻址所使用的地址称为物理地址。通常将物理地址固化在网卡的ROM中,因此也称其为硬件地址或MAC地址
MAC地址的长度为48位(6个字节),通常表示为12个十六进制数,每两个十六进制数之间用冒号隔开,如“08:00:20:0A:8C:6D”。网络中每个以太网设备都具有唯一的MAC地址。这个地址与网络无关,也就是说无论将这个硬件(如网卡、集线器、路由器等)接入到网络的何处,它都有相同且唯一的MAC地址。
MAC地址和IP地址的相同点是它们都唯一,不同点主要体现在以下几个方面:

  • 可变性不同:对于网络上的某一设备,其IP地址可变(但必须唯一),而MAC地址不可变。
  • 长度不同:IP地址长度为32位,MAC地址长度为48位。
  • 分配依据不同:IP地址的分配是基于网络拓扑的,而MAC地址的分配是由制造商决定的。寻址协议层不同:IP地址应用于网络层,而MAC地址应用在数据链路层。

在OSI参考模型中,网络层的数据传输依赖于32位的IP地址,而当一台主机把以太网数据帧发送到位于同一局域网上的另一台主机时,物理网络实际是根据48位的物理地址来传输数据的。因此,对于网络中的任一硬件设备而言,它既有一个逻辑地址(IP地址),又有一个物理地址(MAC地址),需要有一种机制能够把IP地址与对物理地址进行映射才能完成数据的通信。
IP地址和物理地址的映射包含两个方面:从IP地址到物理地址的映射从物理地址到IP地址的映射。这种地址之间的映射关系也称为地址解析,实现地址解析的协议有两种:地址解析协议(Address Resolution Protocol,ARP)和反向地址解析协议(Reverse Address Resolution Protocol,RARP),如图4-18所示。
image.png

2)、地址解析协议ARP

ARP为IP地址到对应的物理地址提供动态的映射。之所以用“动态”这个词是因为这个过程是自动完成的,一般应用程序和系统管理员并不关心或干涉这个过程。ARP协议的工作过程如图4-19所示。
image.png
(1)主机A首先查看自己的高速缓存中的ARP表中是否有主机B对应的ARP表项。如果找到,则直接利用该ARP表项中的物理地址将IP数据报封装成帧发送给主机B。
(2)如果缓存表中没有所需的表项,则主机A首先广播发送一个ARP请求数据报文,请求IP地址为IPB的主机返回自己的物理地址。ARP请求数据报文中含有主机B的IP地址,以及主机A本身的IP地址和物理地址的映射关系。
(3)本局域网上包括主机B在内的所有主机都会接收到这个查询请求,然后将主机A的IP地址与物理地址的映射关系存入各自的ARP表中。
(4)主机B识别ARP请求报文后,发送一个ARP响应报文给主机A,该报文中包含主机B的IP地址和物理地址的映射关系。
(5)主机A收到主机B的响应报文后,就在其ARP高速缓存中写入主机B的IP地址和物理地址的映射。

每台主机都要在各自的高速缓存区中存放一张IP地址到物理地址的映射表,这张表称为ARP表。在主机初始启动时,ARP表为空;在不断地通信过程中,主机会逐渐添加ARP表项。ARP表的内容是定期更新的,如果一条ARP表项很长时间没有使用了,则它将被从ARP表中删除。

3)、反向地址解析协议RARP

反向地址解析RARP一般用于无盘工作站和终端,解决已知物理地址获取IP地址的问题。RARP的基本思想是:网络中有一个RARP服务器,保存了本网中各个无盘工作站的地址绑定,并负责响应这些节点的地址请求;新启动的无盘工作站广播一个RARP请求分组,分组中给出自己的物理地址;RARP服务器查找地址绑定表,用单播方式发回RARP应答分组,给出所请求的IP地址。
RARP的缺点在于要求每个网络都要有一个RARP服务器,并且RARP响应中只包含很少的信息。它在概念上很简单,但是RARP服务器的实现却与系统相关。因此,并不是所有的TCP/IP实现都提供RARP服务器。使用RARP的常见协议是BOOTP(BOOTstrap Protocol,自举协议)和DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)。

5、网际控制报文协议

1)、概述

image.png
通过之前的学习了解到IP协议并不是一个可靠的协议,它不保证数据被送达。那么,保证数据送达的工作应该由其他的模块来完成。其中一个重要的模块就是网际控制报文协议(Internet Control Message Protocol,ICMP)。
ICMP属于网络层协议,允许主机或路由器报告差错情况和提供有关异常情况的报告。当传送IP数据报发生错误,比如主机不可达,路由不可达等,ICMP将会把错误信息封包,然后传送回给主机,给主机一个处理错误的机会。这也就是为什么说建立在IP层以上的协议是可能做到安全的原因。

2)、ICMP报文的种类

ICMP报文大致分为两类:一种是查询报文,一种是差错报文

  • 查询报文:是成对出现的,它帮助主机或网络管理员从一个路由器或另一个主机得到特定的信息,主要有以下几种用途:Ping查询、子网掩码查询和时间戳查询。
  • 差错报文:用于报告路由器或主机在处理一个IP数据报时可能遇到的一些问题。差错报文产生在数据传送发生错误的时候。

尽管在大多数情况下,数据的传送错误应该给出ICMP报文。但是在如下几种特殊情况下,是不产生ICMP差错报文的:
(1)ICMP差错报文不会产生ICMP差错报文(ICMP查询报文却可能产生);
(2)目的地址是广播地址或多播地址的IP数据报不产生ICMP差错报文;
(3)作为链路层广播的数据报不产生ICMP差错报文;
(4)不是IP分片的第一片的不发送ICMP差错报文;
(5)源地址不是单个主机的数据报(零地址、环回地址、广播地址或多播地址)不产生ICMP差错报文。

3)、ICMP的应用举例

a)、ping
Ping是TCP/IP网络中一个最简单而又非常有用的ICMP应用程序,常用于验证两个主机之间的连通性。
ping在不同的实现中语法格式不同,在Windows操作系统下的应用格式为:image.png
其中,target_name是目的主机的名字或其IP地址。

可选参数 含 义
-t 连续ping指定的主机,直到中断
-a 将地址解析为主机名
-n count 定义用来测试所发出的测试包的个数,缺省值为4
-l size 定义所发送缓冲区的数据包的大小,在默认的情况下windows的ping发送的数据包大小为32 byte
-w timeout 等待每次回复的超时时间,单位为毫秒(ms),默认值为1 000
-4 强制使用IPv4版本
-6 强制使用IPv6版本

表4-10 ping命令的常用可选参数及其含义
当使用ping命令时,实际上是当前主机发送一个ICMP回送请求报文;如果目的主机能接收到这个请求报文并且愿意作出回应,则发送一个回送回答的ICMP报文;当这个回应报文能顺利抵达当前主机时,就完成了一个ping的动作。
image.png
例如,在IP地址为192.168.1.19的主机上测试与IP地址为192.168.1.51的主机的连通性,可执行“开始”>“命令提示符”命令,在打开的“命令提示符”窗口输入“ping 192.168.1.51”,按【Enter】键执行,结果如图4-21所示。可以看出,两台主机网络相连通。
b)、tracert
ICMP另一个非常有用的应用是tracert(Windows操作系统下的名字,在UNIX操作系统下称为traceroute)。tracert命令用于确定IP数据报访问目标所采取的路径,其命令格式如下:image.png
其中,target_name是目的主机的名字或其IP地址。tracert命令的可选参数可在“命令提示符”窗口中执行“tracert -?”命令进行查看。
image.png
例如,查看当前主机访问新浪网的邮件服务器(mail.sina.com.cn)时所采取的路径,可以在“命令提示符”窗口输入“tracert mail.sina.com.cn”,即可显示出经过的每一个路由器及使用的时间,如图4-22所示。

6、IPv6

现在使用的IPv4采用32位地址长度,只有大约43亿个地址,估计在未来的若干年间将被分配完毕。1990年,因特网工程任务组(IETF)开始启动IP新版本的设计工作。经过多次讨论、修订和定位之后,在1993年得到了一个名为SIPP(Simple Internet Protocol Plus)的协议,即IPv6(网际协议第6版)。

1)、IPv6地址

a)、IPv6地址的表示方法
Pv6地址采用十六进制的表示方法,共128位,分8组表示,每组16位。因为一个十六进制数可以表示4位,所以每组由4个十六进制数组成,各组之间用“:”隔开。每组中前面的0可以省略,但每组必须有一个数,例如:1080:0:0:0:8:800:200C:417A,FEDC:BA98:7654:3210:FEDC:BA98:7654:3210。
在IPv6地址段中有时会出现连续的几组0,为了简化书写,这些0可以用“::”代替,但一个地址中只能出现一次“::”。例如:
image.png
在某些情况下,IPv4地址需要包含在IPv6地址中,这时,最后两组用现在习惯使用的IPv4的十进制表示方法,前六组表示方法同上,例如,IPv4地址61.1.133.1包含在IPv6地址中时表示为0:0:0:0:0:0:61.1.133.1,或者是::61.1.133.1。
b)、IPv6地址的结构
image.png
128位的IPv6地址由64位网络地址和64位主机地址组成。其中,64位的网络地址又分为48位的全球网络标识符和16位的本地子网标识符,如图4-23所示。

2)、IPv6的特点

IPv6协议不仅是为网络上的计算机设计,还应用于所有的通信设备,如手机、无线设备、电话等。IPv6的主要特点如下。
(1)更大的地址空间。IPv6地址长度为128位(16字节),即有2128-1(3.4E+38)个地址,这一地址空间是IPv4地址空间的1E28倍。在IPv6的庞大地址空间中,目前全球连网设备已分配掉的地址仅占其中的极小一部分,有足够的余量可供未来的发展之用。
(2)简化的报头和灵活的扩展。IPv6对数据报头作了简化,将其基本报头长度固定为40字节,减少了处理器开销并节省了网络带宽。此外,IPv6定义了多种扩展报头,使得IPv6变得极其灵活,能提供对多种应用的强力支持,同时又为以后支持新的应用提供了可能。
(3)层次化的地址结构。IPv6的设计者把IPv6的地址空间按照不同的地址前缀来划分,采用了层次化的地址结构,以利于骨干网路由器对数据包的快速转发。
在IPv6网络中,网络被分为多个区域,每个区域中都有多个骨干节点,每个骨干节点汇聚多个接入网(站)点,通过接入网点连接终端网点(企业或个人用户)提供服务。
IPv6定义了3种不同的地址类型:单点传送地址、多点传送地址和任意点传送地址。所有类型的IPv6地址都属于接口(Interface)而不是节点(Node)。一个IPv6单点传送地址被赋给某一个接口,而一个接口又只能属于某一个特定的节点,因此一个节点的任意一个接口的单点传送地址都可以用来标识该节点。
(4)即插即用的连网方式。IPv6允许主机发现自身地址并自动完成地址更改,这种机制既不需要用户花精力进行地址设定,又可以大大减轻网络管理者的负担。IPv6有两种自动设定功能,一种是和IPv4自动设定功能相同的名为“全状态自动设定”功能,另一种是“无状态自动设定”功能。
(5)网络层的认证与加密。IP安全协议(IPSec)是IPv4的一个可选扩展协议,是IPv6的一个必须组成部分,主要功能是在网络层对数据分组提供加密和鉴别等安全服务。IPSec提供了认证和加密两种安全机制。

  • 认证机制:使IP通信的数据接收方能够确认数据发送方的真实身份以及数据在传输过程中是否遭到改动。
  • 加密机制:通过对数据进行编码来保证数据的机密性,以防数据在传输过程中被他人截获而失密。

(6)服务质量的满足。服务质量(Quality of Service,QoS)通常是指通信网络在承载业务时为业务提供的品质保证。基于IPv4的Internet在设计之初,只有一种简单的服务质量,即采用“尽最大努力(Best effort)”传输。但是随着IP网上多媒体业务增加(如IP电话、VoD、电视会议),对传输延时和延时抖动均有严格的要求,因此对服务质量的要求也就越来越高。
IPv6数据包的格式包含一个8位的业务流类别(Class)和一个新的20位的流标签(Flow Label)。它的目的是允许发送业务流的源节点和转发业务流的路由器在数据包上加上标记,中间节点在接收到一个数据包后,通过验证它的流标签,就可以判断它属于哪个流,然后就可以知道数据包的QoS需求,并进行快速地转发。
(7)对移动通信更好的支持。未来移动通信与互联网的结合将是网络发展的大趋势之一。移动互联网将成为我们日常生活的一部分,改变我们生活的方方面面。IPv6为用户提供可移动的IP数据服务,让用户可以在世界各地都使用同样的IPv6地址,非常适合未来的无线上网。

3)、IPv4到IPv6的过渡技术

如何完成从IPv4到IPv6的转换,是IPv6发展中需要解决的首要问题。目前,IETF已经成立了专门的工作组研究IPv4到IPv6的转换,并且提出了很多方案,主要包括以下几个类型。
a)、网络过渡技术

  • 隧道技术:路由器将IPv6的数据分组封装入IPv4,IPv4分组的源地址和目的地址分别是隧道入口和出口的IPv4地址。当分组到达隧道的出口处,再将IPv6分组取出转发给目的站点。利用隧道技术,可以通过运行IPv4协议的Internet骨干网络(即隧道)将局部的IPv6网络连接起来,因而是IPv4向IPv6过渡的初期最易于采用的技术。
  • 网络地址转换/协议转换技术:网络地址转换/协议转换(Network Address Translation - Protocol Translation,NAT-PT)技术,通过与无状态IP/ICMP翻译(SIIT)协议转换和传统的IPv4下的动态地址翻译(NAT)以及适当的应用层网关(ALG)相结合,可以实现只安装IPv6的主机和只安装了IPv4机器的大部分应用的相互通信。

b)、主机过度技术
IPv6和IPv4是功能相近的网络层协议,两者都基于相同的物理平台,而且加载于其上的传输层协议TCP和UDP又没有任何区别。可以看出,如果一台主机同时支持IPv6和IPv4两种协议,那么该主机既能与支持IPv4的主机通信,又能与支持IPv6的主机通信,这就是双协议栈技术的工作机理。
c)、应用服务系统过渡技术
在IPv4到IPv6的过渡过程中,作为Internet基础架构的应用服务系统DNS也要支持这种网络协议的升级和转换。IPv4和IPv6的DNS在记录格式等方面有所不同。为了实现IPv4网络和IPv6网络之间的DNS查询和响应,可以采用应用层网关DNS-ALG结合NAT-PT的方法,在IPv4和IPv6网络之间起到一个翻译的作用。
IPv6正在赢得越来越多的支持,而且很多网络硬件和软件制造商已经表示支持这个协议。开发者正计划为UNIX、Windows、Novell和Macintosh开发IPv6版本软件。从IPv4向lPv6的过渡是人们未来实现全球Internet不可跨越的步骤,它决不是一朝一夕就可以办得到的,它将是一个相当缓慢和长期的过程。
随着IPv6应用探索的进一步深入,IPv6将在视频应用、VoIPv6、网络家电、移动IPv6业务、传感器网络和智能交通系统等方面有着更加广阔的应用情景。

师说:

哲学就是解决“如何处理问题”的问题 学习方法、学科的基本思路、研究历程(历史)、背景(学习只是一种为了解决某些问题而需要去做的事情,找找那个问题吧💡)