计算机网络

计算机网络

一、网络模型

image-20230904112233143

网络协议

我们用手机连接上网的时候,会用到许多网络协议。

从手机连接 WiFi 开始,使用的是 802.11 (即 WLAN ) 协议,通过 WLAN 接入网络;手机自动获取网络配置,使用的是 DHCP 协议,获取配置后手机才能正常通信

这时手机已经连入局域网,可以访问局域网内的设备和资源,但还不能使用互联网应用,例如: 微信、抖音等。

想要访问互联网,还需要在手机的上联网络设备上实现相关协议,即在无线路由器上配置 NAT、 PPPOE 等功能,再通过运营商提供的互联网线路把局域网接入到互联网中,手机就可以上网玩微信、刷抖音了。

  • 局域网 : 小范围内的私有网络,一个家庭内的网络、一个公司内的网络、一个校园内的网络都属于局域网。
  • 广域网: 把不同地域的局域网互相连接起来的网络。运营商搭建广域网实现跨区域的网络互连。
  • 互联网: 互联全世界的网络。互联网是一个开放、互联的网络,不属于任何个人和任何机构,接入互联网后可以和互联网的任何一台主机进行通信。

OSI参考模型

OSI 参考模型将网络协议提供的服务分成 7 层,并定义每一层的服务内容,实现每一层服务的是协议,协议的具体内容是规则。上下层之间通过接口进行交互,同一层之间通过协议进行交互。

分层 分层名称 功能
7 应用层 针对特定应用的协议
6 表示层 设备固有数据格式和网络标准数据格式的转换
5 会话层 通信管理。负责建立和断开逻辑通信连接
4 传输层 管理两个主机之间的数据传输。负责可靠传输
3 网络层 地址管理和路由选择
2 数据链路层 互连设备之间传送和识别数据帧
1 物理层 比特流与电子信号之间的切换

应用层

OSI模型的的第7层(最高层),应用程序和网络之间的接口,直接向用户提供服务,应用层有电子邮件、远程登录等协议。

表示层

OSI参考模型的第 6 层。负责数据格式的互相转换,如编码、数据格式转换和加密解密等。保证一个系统应用层发出的信息可被另一系统的应用层读出。

会话层

OSI参考模型的第 5 层。主要是管理和协调不同主机上各种进程之间的通信(对话),即负责建立、管理和终止应用程序之间的会话。

传输层

OSI参考模型的第 4 层。为上层协议提供通信主机间的可靠和透明的数据传输服务,包括处理差错控制和流量控制等问题。只在通信主机上处理,不需要在路由器上处理。

网络层

OSI参考模型的第 3 层。在网络上将数据传输到目的地址,主要负责寻址和路由选择。

数据链路层

OSI参考模型的第 2 层。负责物理层面上两个互连主机间的通信传输,将由 01 组成的比特流划分成数据传输给对端,即数据帧的生成与接收。通信传输实际上是通过物理的传输介质实现的。

数据链路层的作用就是在这些通过传输介质互连的设备之间进行数据处理网络层与数据链路层都是基于目标地址将数据发送给接收端的,但是网络层负责将整个数据发送给最终目标地址, 而数据链路层则只负责发送一个分段内的数据。

物理层

OSI参考模型的第 1 层 (最底层) 。负责逻辑信号 (比特流) 与物理信号 (电信号、光信号)之间的互相转换,通过传输介质为数据链路层提供物理连接。

TCP/IP模型

TCP/IP 是有由 IETF 建议、推进其标准化的一种协议,是 IP 、TCPHTTP 等协议的集合。TCP/IP 是为使用互联网而开发制定的协议族,所以互联网的协议就是 TCP/IP。

image-20230904140443195

网络接入层

设备之间通过物理的传输介质互连, 而互连的设备之间使用 MAC 地址实现数据传输。采用 MAC 地址,目的是为了识别连接到同一个传输介质上的设备。

网络层

相当于 OSI 模型中的第 3 层网络层,使用 IP 协议

IP 协议基于 IP 地址转发分包数据,作用是将数据包从源地址发送到目的地址
TCP/IP 分层中的网络层与传输层的功能通常由操作系统提供。路由器就是通过网络层实现转发数据包的功能

网络传输中,每个节点会根据数据的地址信息,来判断该报文应该由哪个网卡发送出去。

各个地址会参考一个发出接口列表, MAC 寻址中所参考的这张表叫做 MAC 地址转发表,而 IP 寻址中所参考的叫做路由控制表

MAC 地址转发表自动生成。

路由控制表则根据路由协议自动生成。

MAC 地址转发表中所记录的是实际的 MAC 地址本身,而路由表中记录的 IP 地址则是集中了之后的网络号 (即网络号与子网掩码)。

IP

IP 是跨越网络传送数据包,使用 IP 地址作为主机的标识,使整个互联网都能收到数据的协议。

IP 协议独立于底层介质,实现从源到目的的数据转发IP 协议不具有重发机制,属于非可靠性传输协议

ICMP

用于在IP主机、路由器之间传递控制消息,用来诊断网络的健康状况

ARP

从数据包的IP地址中解析出MAC地址的一种协议。

传输层

相当于 OSI 模型中的第 4 层传输层,主要功能就是让应用程序之间互相通信,通过端口号识别应用程序,使用的协议有面向连接的 TCP 协议和面向无连接的 UDP 协议

面向连接:

在发送数据之前, 在收发主机之间连接一条逻辑通信链路。好比平常打电话,输入完对方电话号码拨出之后,只有对方接通电话才能真正通话,通话结束后将电话机扣上就如同切断电源。

面向无连接:

不要求建立和断开连接。发送端可于任何时候自由发送数据。如同去寄信,不需要确认收件人信息是否真实存在,也不需要确认收件人是否能收到信件,只要有个寄件地址就可以寄信了。

TCP

TCP 是一种面向有连接的传输层协议,能够对自己提供的连接实施控制。适用于要求可靠传输的应用,例如文件传输。

UDP

UDP 是一种面向无连接的传输层协议,不会对自己提供的连接实施控制。适用于实时应用,例如: IP电话、视频会议、直播等。

应用层

相当于 OSI 模型中的第 5 - 7 层的集合,不仅要实现 OSI 模型应用层的功能,还要实现会话层和表示层的功能。

HTTP 、 POP3 、 TELNET 、SSHFTP .SNMP都是应用层协议。

TCP/IP 应用的架构绝大多数属于客户端/服务端模型。 提供服务的程序叫服务端接受服务的程序叫客户端。客户端可以随时发送请求给服务端。

HTTP

是 WWW 浏览器和服务器之间的应用层通信协议,所传输数据的主要格式是HTTP 定义高级命令或者方法供浏览器用来与Web服务器通信HTML 。

POP3

简单邮件传输协议,邮件客户端和邮件服务器使用。

TELNET 和 SSH

远程终端协议,用于远程管理网络设备。TELNET 是明文传输,SSH 是加密传输。

SNMP

简单网络管理协议,用于网管软件进行网络设备的监控和管理。

封装与解封装

通常,为协议提供的信息为包头部,所要发送的内容为数据。每个分层中,都会对所发送的数据附加一个头部,在这个头部中包含了该层必要的信息, 如发送的目标地址以及协议相关信息。在下一层的角度看,从上一分层收到的包全部都被认为是本层的数据。

封装

数据发送前,按照参考模型从上到下,在数据经过每一层时,添加协议报文头部信息,这个过程叫封装。

image-20230904142151934

解封装

数据接收后,按照参考模型从下到上,在数据经过每一层时,去掉协议头部信息,这个过程叫解封装。

image-20230904142241918

经过传输层协议封装后的数据称为,经过网络层协议封装后的数据称为包,经过数据链路层协议封装后的数据称为,物理层传输的数据为比特

TCP/IP 通信中使用 MAC 地址、 IP 地址、端口号等信息作为地址标识。甚至在应用层中,可以将电子邮件地址作为网络通信的地址

实际数据传输举例

image-20230904142820260

发送数据包

访问 HTTP 网站页面时,打开浏览器,输入网址,敲下回车键就开始进行TCP/IP 通信了。

应用程序处理

image-20230904143522696

首先,应用程序中会进行 HTML 格式编码处理,相当于 OSI 的表示层功能编码转化后,不一定会马上发送出去,相当于会话层的功能。在请求发送的那一刻,建立 TCP 连接,然后在 TCP 连接上发送数据。接下来就是将数据发送给下一层的 TCP 进行处理。

TCP模块处理

image-20230904143627708

TCP 会将应用层发来的数据顺利的发送至目的地。实现可靠传输的功能,需要给数据封装 TCP 头部信息。 TCP 头部信息包括源端口号和目的端口号 (识别主机上应用)、序号 (确认哪部分是数据) 以及校验和 (判断数据是否被损坏)。随后封装了 TCP 头部信息的段再发送给 IP。

IP模块处理

image-20230904143946690

IP 将 TCP 传过来的数据段当做自己的数据,并封装 IP 头部信息。 IP 头部信息中包含目的 IP 地址和源 IP 地址,以及上层协议类型信息
IP 包生成后,根据主机路由表进行数据发送。

网络接口处理

image-20230904144025382

网络接口对传过来的 IP 包封装上以太网头部信息并进行发送处理。以太网头部信息包含目的 MAC 地址、源 MAC 地址,以及上层协议类型信息。然后将以太网数据顿通过物理层传输给接收端。发送处理中的 FCS 由硬件计算, 添加到包的最后。设置 FCS 的目的是为了判断数据包是否由于噪声而被破坏。

接收数据包

包的接收流程是发送流程的反向过程。

网络接口处理

收到以太网包后,首先看头部信息的目的 MAC 地址是否是发给自己的包。如果不是发送给自己的包就丢弃。如果是发送给自己的包,查看上层协议类型是IP 包,以太网顿解封装成 IP 包,传给 IP 模块进行处理。如果是无法识别的协议类型,则丢弃数据。

image-20230904145612198

IP模块处理

收到 IP 包后,进行类似处理。根据头部信息的目的 IP 地址判断是否是发送给自己包,如果是发送给自己的包,则查看上一层的协议类型。上一层协议是,就把 IP 包解封装发送给 TCP 协议处理TCP。

image-20230904150830695

假如有路由器,且接收端不是自己的地址,那么根据路由控制表转发数据。

TCP模块处理

收到 TCP 段后,首先查看校验和,判断数据是否被破坏。然后检查是否按照序号接收数据。最后检查端口号,确定具体的应用程序。

确认回执 ”给发送端。如果这个回执信息未能达数据接收完毕后,发送一个到发送端,那么发送端会认为接收端没有接收到数据而一直反复发送
数据被完整接收后,会把 TCP 段解封装发送给由端口号识别的应用程序。

应用程序处理

应用程序收到数据后,通过解析数据内容获知发送端请求的网页内容,然后按照HTTP 协议进行后续数据交互。

网络构成

image-20230904151142957

常见的硬件设备

设备 作用
网卡 使计算机连网的设备
二层交换机 从数据链路层上延长网络的设备
路由器/三层交换机 通过网络层转发数据的设备
四至七层交换机 处理传输层以上各层网络传输的设备

通信介质与数据链路

设备之间通过线缆进行连接。有线线缆有双绞线、光纤、串口线等。根据数据链路不同选择对应的线缆。传输介质还可以被分为电波、微波等不同类型的电磁波。

传输速率:

单位为 bps,是指单位时间内传输的数据量有多少。又称作带宽,带宽越大网络传输能力就越强。

吞吐量:

单位为 bps ,主机之间实际的传输速率。吞吐量这个词不仅衡量带宽, 同时也衡量主机的 CPU 处理能力、网络的拥堵程度、报文中数据字段的占有份额等信息。

网卡

任一主机连接网络时,必须要使用网卡。可以是有线网卡,用来连接有线网络也可以是无线网卡连接 WiFi 网络。每块网卡都有一个唯一的 MAC 地址,也叫做硬件地址或物理地址。

二层交换机

image-20230904151623231

二层交换机位于 OSI 模型的第 2 层 (数据链路层) 。

它能够识别数据链路层中的数据帧,并将帧转发给相连的另一个数据链路。数据帧中有一个数据位叫做 FCS,用以校验数据是否正确送达目的地。

二层交换机通过检查这个值,将损坏的数据丢弃。二层交换机根据 MAC 地址自学机制判断是否需要转发数据帧。

路由器/三层交换机

路由器是在 OSI 模型的第 3 层 (网络层) 上连接两个网络、并对报文进行转发的设备。

二层交换机是根据 MAC 地址进行处理,而路由器 / 三层交换机则是根据 IP 地址进行处理的。 因此 TCP/IP 中网络层的地址就成为了 IP 地址。
路由器可以连接不同的数据链路。比如连接两个以太网,或者连接一个以太网与个无线网。家庭里面常见的无线路由器也是路由器的一种。

四至七层交换机

image-20230904152025938

四至七层交换机负责处理 OSI 模型中从传输层至应用层的数据。以 TCP 等协议的传输层及其上面的应用层为基础,分析收发数据,并对其进行特定的处理。例如,视频网站的一台服务器不能满足访问需求,通过负载均衡设备将访问分发到后台多个服务器上,就是四至七层交换机的一种。还有带宽控制、广域网加速器、防火墙等应用场景。

总结

image-20230904152142408

应用层设备有电脑、手机、服务器等。应用层设备不转发数据,它们是数据的源或目的,拥有应用层以下的各层功能。

发送数据时,从上而下的顺序,逐层对数据进行封装,再通过以太网将数据发送出去。接收数据时,从下而上的顺序,逐层对数据进行解封装,最终恢复成原始数据。

数据链路层设备有二层交换机、网桥等。二层网络设备只转发数据,通过识别数据的 MAC 地址进行转发。二层交换机接收数据后,对数据最外层封装的以太网头部信息进行查看,看到数据的目的 MAC 地址后,把数据顿从对应端口发送出去。交换机并不会对数据顿进行解封装,只要知道 MAC 地址信息就可以正确地将数据转发出去。

网络层设备有路由器、三层交换机等。三层网络设备只转发数据,通过识别数据的 IP 地址进行转发。路由器接收数据后,首先查看最外层封装的以太网头部信息,当目的 MAC 地址是自己时,就会将以太网头部解封装,查看数据的 IP地址。根据 IP 路由表做出转发决定时,路由器会把下一跳设备的 MAC 地址作为以太网头部的目的 MAC 地址,重新封装以太网头部并将数据转发出去。

二、数据链路层

image-20230904153312055

MAC地址

每个网卡或三层网口都有一个 MAC 地址, MAC 地址是烧录到硬件上,因此也称为硬件地址。

MAC 地址作为数据链路设备的地址标识符,需要保证网络中的每个 MAC 地址都是唯一的,才能正确识别到数据链路上的设备。
MAC 地址由 6 个字节组成。前 3 个字节表示厂商识别码,每个网卡厂商都有特定唯一的识别数字。

后 3 个字节由厂商给每个网卡进行分配。厂商可以保证生产出来的网卡不会有相同 MAC 地址的网卡。

image-20230904153458004

现在可以通过软件修改 MAC 地址,虚拟机使用物理机网卡的 MAC 地址,并不能保证 MAC 地址是唯一的。但是只要 MAC 地址相同的设备不在同一个数据链路上就没问题。为了查看方便, 6 个字节的 MAC 地址使用十六进制来表示每个字节的 8位二进制数分别用 2 个十六进制数来表示,例如:EO06-E6-39-86-31。

比特

英文名 bit ,也叫位。二进制中最小单位,一个比特的值是 0 或 1。

字节

英文名 Byte 。一个字节由八个比特构成字节。

MAC地址使用方式

最常用的以太网和无线局域网,都是使用 MAC 地址作为地址标识符进行通信的。

以太网

有线局域网中普遍使用以太网,以太网标准简单,传输速率高。常见的网络拓扑结构如下图。

image-20230904153853163

网络拓扑

网络的连接和构成的形态称为网络拓扑。它不仅可以直观的看到网络物理连接方式,还可以表示网络的逻辑结构。

以太网数据格式

当今最常用的以太网协议标准是ETHERNET II 标准。ETHERNET II 标准定义的数据帧格式如下图。

image-20230904154006754

前导码(Preamble)

前导码由 7 个字节组成,每个字节固定为 10101010 。之后的 1 个字节称为帧起始定界符,这个字节固定为 10101011 。这 8 个字节表示以太网帧的开始,也是对端网卡能够确保与其同步的标志。顿起始定界符的最后两位比特被定义为 11 ,之后就是以太网数据帧的本体。

image-20230904154318172

目的地址(Destination Address)

目的地址由 6 个字节组成,用来标识数据顿的目的设备,类似于快递的收件人地址。

源地址(Source Address)

源地址由 6 个字节组成,用来标识数据顿的始发设备,类似于快递的发件人地址。

类型(Type)

类型字段由 2 个字节组成。类型字段是表明上一层 (即网络层) 的协议类型,可以让接收方使用相同的协议进行数据帧的解封装。

数据(Data)

帧头后就是数据。一个数据所能容纳的最大数据范围是 46 ~ 1500 个字节。如果数据部分不足 46 个字节,则填充这个数据帧,让它的长度可以满足最小长度的要求。

FCS(Frame Check Sequence)

FCS 由 4 个字节组成,位于数据帧的尾部,用来检查帧是否有所损坏。通过检查 FCS 字段的值将受到噪声干扰的错误帧丢弃。

最小数据帧

数据帧的各字段加起来一共是 64 字节,其中数据是 46 字节。再加上前导码就是 72 字节。因此最小的数据帧是 72 字节。在传输过程中,每个数据帧还有 12 字节的数据顿间隙,所以最小的可传输数据帧长度是 84 字节,672 比特

交换机二层转发原理

交换机有多个网络端口,它通过识别数据帧的目标 MAC 地址,根据 MAC 地址表决定从哪个端口发送数据。MAC 地址表不需要在交换机上手工设置,可以自动生成。

image-20230904161033099

交换机如何增删改MAC地址表

在初始状态下,交换机的 MAC 地址表是空的,不包含任何条目。当交换机的某个端口接收到一个数据时,它就会将这个数据的源 MAC 地址、接收数据帧的端口号作为一个条目保存在自己的 MAC 地址表中,同时在接收到这个数据帧时重置这个条目的老化计时器时间。这就是交换机自动添加 MAC 地址表条目的方式。

image-20230904162034983

在新增这一条 MAC 地址条目后,如果交换机再次从同一个端口收到相同 MAC地址为源 MAC 地址的数据时,交换机就会更新这个条目的老化计时器,确保活跃的的条目不会老化。但是如果在老化时间内都没收到匹配这个条目的数据帧,交换机就会将这个老化的条目从自己的 MAC 地址表中删除。

image-20230904162501859

还可以手动在交换机的 MAC 地址表中添加静态条目。静态添加的 MAC 地址条目优先动态学习的条目进行转发,而且静态条目没有老化时间,会一直保存在交换机的 MAC 地址表中。

使用MAC地址表进行转发

当交换机的某个端口收到一个单播数据帧时,它会查看这个数据帧的二层头部信息,并进行两个操作。

一个操作是根据源 MAC 地址和端口信息添加或更新MAC 地址表。

另一个操作是查看数据顿的目的 MAC 地址,并根据数据的目的 MAC 地址查找自己的 MAC 地址表。

在查找 MAC 地址表后,交换机会根据查找结果对数据帧进行处理,这里有 3种情况:

情况1

交换机没有在 MAC 地址表中找到这个数据的目的 MAC 地址,因此交换机不知道自己的端口是否有连接这个 MAC 地址的设备。于是,交换机将这个数据帧从除了接收端口之外的所有端口泛洪出去。

image-20230904162712314

情况2

交换机的 MAC 地址表中有这个数据的目的 MAC 地址,且对应端口不是接收到这个数据帧的端口,交换机知道目的设备连接在哪个端口上,因此交换机会根据 MAC 地址表中的条目将数据帧从对应端口单播转发出去,而其它与交换机相连的设备则不会收到这个数据帧。

image-20230904163158205

情况3

交换机的 MAC 地址表中有这个数据的目的 MAC 地址,且对应端口就是接收到这个数据帧的端口。这种情况下,交换机会认为数据帧的目的地址就在这个端口所连接的范围内,因此目的设备应该已经收到数据帧。这个数据帧与其它端口的设备无关,不会将数据帧从其它端口转发出去。于是,交换机会丢弃数据帧。

image-20230904163235824

单播

主机一对一的发送数据。单播地址是主机的 MAC 地址。

广播

向局域网内所有设备发送数据。只有全 1 的 MAC 地址为广播 MAC 地址,即 FF-FF- FF-FF-FF- FF。

泛洪

将某个端口收到的数据从除该端口之外的所有端口发送出去。泛洪操作广播的是普通数据帧而不是广播帧。

VLAN

广播域是广播帧可以到达的区域。换句话说,由多个交换机和主机组成的网络就是一个广播域。网络规模越大,广播域就越大,泛洪流量也越来越大,降低通信效率。在一个广播域内的任意两台主机之间可以任意通信,通信数据有被窃取的风险。

image-20230904165056720

为了解决广播域扩大带来的性能问题和安全性降低问题, VLAN 技术应运而生。 VLAN 技术能够在逻辑上把一个物理局域网分隔为多个广播域,每个广播域称为一个虚拟局域网 (即 VLAN ) 。每台主机只能属于一个 VLAN,同属个 VLAN 的主机通过二层直接通信,属于不同 VLAN 的主机只能通过 IP路由功能才能实现通信。通过划分多个 VLAN ,从而减小广播域传播的范围过滤多余的包,提高网络的传输效率,同时提高了网络的安全性。

VLAN原理

VLAN 技术通过给数据插入 VLAN 标签 (又叫 VLAN TAG ) 的方式,让交换机能够分辨出各个数据帧所属的 VLAN。
VLAN 标签是用来区分数据顿所属 VLAN 的,是 4 个字节长度的字段,插入到以太网帧头部上。 VLAN 标签会插入到源 MAC 地址后面, IEEE 802.1Q标准有这个格式定义和字段构成说明。

image-20230905090537291

TPID(标签协议标识符)

长度 2 个字节,值为 0x8100 ,用来表示这个数据帧携带了 802.1Q 标签。不支持 802.1Q 标准的设备收到这类数据帧,会把它丢弃。

TCI (标签控制信息) :

长度 2 个字节,又分为三个子字段,用来表示数据帧的控制信息:

优先级 ( Priority ) :

长度为 3 比特,取值范围 0 ~ 7用来表示数据帧的优先级。取值越大,优先级越高。当交换机发送拥塞是,优先转发优先级高的数据帧。

CFI (规范格式指示器) :

长度为 1 比特,取值非 0 即 1VLAN ID ( VLAN 标识符) : 长度为 12 比特,用来表示 VLAN 标签的数值。取值范围是 1~ 4094。

划分VLAN后,交换机如何处理报文?

交换机上划分了多个 VLAN 时,在交换机接收到广播数据帧时,只会将这个数据顿在相同 VLAN 的端口进行广播。

image-20230905090836382

划分 VLAN 后,交换机如何处理目的 MAC 地址不在 MAC 地址表中的单播数据帧?

image-20230905091140895

划分VLAN后,不同VLAN的主机能否通信?

划分多 VLAN 的环境中,即使交换机 MAC 地址表里保存了某个数据的目的MAC 地址条目,若这个目的 MAC 地址所对应的端口与数据的入端口在不同的 VLAN 中,交换机也不会通过 MAC 地址表中的端口发送数据帧。

image-20230905091247751

小结: 在不使用路由转发的前提下,交换机不会从一个 VLAN 的端口中接收到的数据帧,转发给其它 VLAN 的端口。

怎样区分不同的VLAN?

通过 VLAN ID 进行区分,例如 VLAN 10 和 VLAN 20 就是不同的 VLAN。

VLAN技术的好处?

增加了广播域的数量,减小了每个广播域的规模,也减少了每个广播域中终端设备的数量;
增强了网络安全性,保障网络安全的方法增加了 ;

提高了网络设计的逻辑性,可以规避地理、物理等因素对于网络设计的限制。

划分VLAN

我们可以使用不同的方法,把交换机上的每个端口划分到某个 VLAN 中,以此在逻辑上分隔广播域。
交换机通常会使用基于端口划分 VLAN 的方法。在交换机上手动配置,绑定交换机端口和 VLAN ID 的关系。
优点: 配置简单。想要把某个端口划分到某个 VLAN 中,只需要把端口的PVID (端口 VLAN ID ) 配置到相应的 VLAN ID 即可。
缺点:当终端设备移动位置是,可能需要为终端设备连接的新端口重新划分VLAN。
除了这种方法外,还可以使用基于 MAC 地址划分 VLAN 、基于 IP 地址划分VLAN 、基于协议划分 VLAN 、基于策略划分 VLAN 等方法来划分VLAN。
PVID :接口默认 VLAN ID ,是交换机端口配置的参数,默认值是 1。

跨交换机VLAN原理

终端设备不会生成带 VLAN 标签的数据帧,它们发出的数据叫做无标记帧(Untagged )。它们连接的交换机会给无标记帧打上 VLAN 标签。交换机通过每个端口的 PVID ,判断从这个接口收到的无标记帧属于哪个 VLAN ,并在转发时,插入相应的 VLAN 标签,从而将无标记帧变为标记帧 ( Tagged )

image-20230906173328030

如果交换机接口收到无标记顿,由交换机根据这个接口所在 VLAN 为数据顿打上 VLAN 标签;同时接口发送数据顿时,也不携带 VLAN 标签。应该把这类接口配置为 Access (接入) 接口, Access 接口连接的链路称为Access 链路。

如果交换机接口收到多个 VLAN 的流量,也就是收到了标记顿;同时为了让对端设备能够区分不同 VLAN 的流量,通过接口发出的流量会打上 VLAN 标签。应该把这类接口配置为 Trunk (干道) 接口,相应的链路称为 Trunk链路。

image-20230907100049220

主机 A 以主机 F 的 MAC 地址作为目的 MAC 地址封装了一个数据,从网卡发送出去。
交换机 A 在 Access 接口收到数据。查询 MAC 地址表,发现数据的目的地址是与交换机 B 相连的 Trunk 接口。于是交换机给数据帧打上 Access接口的 PVID 配置,即给数据打上 VLAN 10 的标签,并从 Trunk 接口转发给交换机 B 。
交换机 B 在 trunk 接口收到数据。查看 MAC 地址表,发现是 VLAN 10的数据,目的地址设备是连接在 VLAN 10 的一个 Access 接口上。于是去掉数据帧的 VLAN 标签,并从这个 Access 接口转发给主机 F。

Hybrid接口配置
Access 接口:

这种接口只能属于一个 VLAN,只能接收和发送一个 VLAN的数据。通常用于连接终端设备,比如主机或服务器等。

Trunk 接口:

这种接口能够接收和发送多个 VLAN 的数据,通常用于连接交换机。

Hybrid 接口:

这种接口能够接收和发送多个 VLAN 的数据,可用于交换机的链路,也可用于终端设备。

与 Trunk 接口的区别是,发送数据时 Trunk 接口只会摘掉 PVID 标签,而 Hybrid 接口能够不携带 VLAN 标签发送多个VLAN 数据。

总结
Access接口接收数据帧处理过程

image-20230907101313806

Access接口发送数据帧处理过程

image-20230907101643065

Truck接口接收数据帧处理过程

image-20230907101938437

Truck发送数据帧处理过程

image-20230907102005919

三、网络层

image-20230907103103427

前言

IP 协议是基于 IP 地址将数据包发送给目的主机,能够让互联网上任何两台主机进行通信。

image-20230907103727152

网络层的主要作用是实现终端节点之间的通信。这种终端节点之间的通信,也叫点对点通信。

image-20230907103832782

主机:

配置有 IP 地址,不进行路由控制的设备。

路由器:

既有 IP 地址又具有路由控制功能的设备。

节点:

主机和路由器的统称。

数据如何传输到目的地?

image-20230907104024143

IP地址的基础知识

在 TCP/IP 通信中使用 IP 地址识别主机和路由器。 IP 地址是逻辑地址,需要手工配置或自动获取,为了保证正常通信,每个设备必须配置 IP 地址。

image-20230907104240211

IP地址的定义

IP 地址由 32 位二进制数组成。为了方便记录,将 32 位的 IP 地址分为 4组,每 8 位为一组,每组以“.”隔开,再将每组数转换为十进制数。

image-20230907104418084

实际上,网络的发展超乎想象,互联网上的设备远超 43 亿, 2019 年 11 月25 日全球的 IPv4 地址已经彻底耗尽,但是直到现在大家仍然还在用 IPv4并没有因为地址没了而无法上网。是因为除了 IPv6 之外,我们使用 NAT 技术缓解了地址不足的问题。这篇文章里的 IP 全是指的 IPv4 ,非 IPv6。

IP地址的组成

IP 地址由网络号 (网段地址) 和主机号 (主机地址) 两部分组成。

image-20230907104616493

网络号是设备所在区域的一种标识,网络号相同的设备位于同一个网段内,网络号不同的设备通过路由器实现通信。主机号是在同一个网段中不同设备的标识不允许同一个网段内出现重复的主机号。

image-20230907104808764

路由器是根据目的 IP 地址的网络号进行路由。

image-20230907104846707

IP地址的分类

A类

A 类 IP 地址是首位以“ 0”开头的地址。从第 1 位到第 8 位是它的网络号网络号的范围是 0 ~ 127 。其中 0 和 127 属于保留地址,减去两个保留地址,因此有 126 个可用的 A 类地址。

后 24 位是主机号,一个 A 类地址的主机地址数量就是 2 的 24 次方,即16777216 个主机地址。

image-20230907105551800

B类

B 类 IP 地址是前两位以“10开头的地址。从第 1 位到第 16 位是它的网络号,网络号的范围是 128.0 ~ 191.255 。其中 128.0 和 191.255 属于保留地址,减去两个保留地址,因此有 16382 个可用的 B 类地址。

后 16 位是主机号,一个 B 类地址的主机地址的数量就是 2 的 16 次方,即65536 个主机地址。

image-20230907105646388

C类

C 类 IP 地址是前三位以“110”开头的地址。从第 1 位到第 24 位是它的网络号,网络号的范围是 192.0.0 ~ 223.255.255 。其中 192.0.0 和223.255.255 属于保留地址,减去两个保留地址,因此有 2097150 个可用的类地址。

后 8 位是主机号,一个 C 类地址的主机地址的数量就是 2 的 8 次方,即256 个主机地址。

image-20230907105812132

D类

D 类 IP 地址是前四位以“ 1110“开头的地址。从第 1 位到第 32 位是它的网224.0.0.0 ~ 239.255 .255.255 。D 类地址络号,网络号的范围是没有主机号,用于组播。

image-20230907105831656

网段地址和广播地址

当主机号全为 0 时,表示的是网段地址,非主机地址。当主机号全为 1 时是广播地址,也不是主机地址。因此在分配 IP 地址过程中,需要排除这两个地址例如一个 C 类地址 192.168.1.0/24 最多只有 254 个可用主机地址,而不是 256 个。

image-20230907110105634

IP 地址中的主机号全部为 1 的就是广播地址,它是向同一个网段中的所有主机发送数据包。例如一个 B 类主机地址 172.20.1.100 的广播地址是172.20.255.255

子网掩码

早期网络地址采用固定网络位长度的方式,使 IPv4 地址遭到大量浪费。如今网段地址的长度可变,同时也需要一种标识来获取网段地址,以便路由器对数据包进行转发,这种识别码就是子网掩码。
子网掩码用 32 位的二进制表示, IP 地址的网段地址部分设置为 1, IP 地址的主机地址部分设置为 0 。换句话说, P 地址有多少位网段地址,子网掩码就有多少位取 1 ,其余都取 0 。为了方便记录,每 8 位为一组,以“.”隔开,再转换为十进制数。

image-20230907112134768

将子网掩码和 IP 地址进行与 ( AND ) 运算,可得到这个 IP 地址的网段地址。

CIDR与VLSM

解决 IP 地址浪费问题,除了使用子网掩码,还使用了 CIDR 和 VLSM 技术。

CIDR

为什么CIDR技术可以更有效的分配IP地址呢?因为前缀可调节的网络更灵活。比如一个办公室人比较少,仅有5个人左右,那么他们分配一个网络前缀为32-3=29位的网络(IP地址共32位,主机号位数为3,因为2-2=6>5);若一个办公室有100个人,那么就可以分配一个网络前缀为32-7=25位的网络(2-2=126>100)。

他可以把多个网段聚合到一起,生成一个更大的网段;汇总路由表 IP 地址,分担路由表压力。

image-20230907135906632

VLSM

VLSM ,即可变长子网掩码,它可以对 A 、B、C类的地址再进行子网划分,以达到充分利用 IP 地址的目的。
假如一家企业有 100 台电脑,按以前的办法,只能分配一个 C 类地址222.222.222.0 。但是 VLSM 可以在一个 C 类地址上划分出多个子网地址,再分配其中一个容纳主机数量与稍大于企业需求数量的子网地址给企业,这样就可以实现 IP 地址的合理使用。

image-20230907140338395

计算子网地址: 当主机号有 7 位时,网络号有 32 - 7 = 25 位,也就是222.222.222.0/24 向主机位借了一位作为子网位,那么子网掩码也就是255.255.255.128。可分配 222.222.222.0/25 使用。

image-20230907140429246

222.222.222.0/25子网详情:

image-20230907140523701

image-20230907140542388

CIDR和VLSM的区别

CIDR 是主机号向网络号借位,目的是把几个网络汇总成一个大的网络,增加子网主机数量;
VLSM 是网络号向主机号借位,目的是把一个标准的网络划分成几个子网,减少子网主机数量。

公网地址和私有地址

IP 地址分为公网地址和私有地址。公网地址是在互联网上使用的,私有地址是在局域网中使用的。
公网地址由 Internet NIC 负责分配,通过它直接访问互联网。

image-20230907140823310

私有地址是一段保留的 IP 地址。只在局域网中使用,无法在互联网上使用。但是私有地址可以通过 NAT 技术,将私有地址转换为公网地址接入互联网

image-20230907140859384

公网 IP 地址在互联网范围内是唯一的,私有 IP 地址只要在同一个局域网内唯一即可。在不同局域网内出现相同的私有 IP 不会影响使用。

IP路由

路由是设备根据 P 地址对数据进行转发的操作。当一个数据包到达路由器时,路由器根据数据包的目的地址查询路由表,根据查询结果将数据包转发出去,这个过程就是 IP 路由。

image-20230907162634311

路由表

为了将数据包发给目的节点,所有节点都维护着一张路由表。路由表记录 IP 数据在下一跳应该发给哪个路由器。 IP 包将根据这个路由表在各个数据链路上传输。

image-20230907162722261

一种是手动设置,也叫静态路由。另一种是路由器之路由表的生成方式有两种:间通过交换信息自动刷新,也叫动态路由

目的地址 来源 下一跳
198.48.10.0/24 静态路由 192.1.1.1
202.16.88.0/24 OSPF 10.0.12.1

Hop ,中文叫“跳”。它是指网络中的一个区间。 IP 包就是在网络中一跳一跳的转发,在每一个区间内决定 IP 包下一跳的路径。

跳是指数据链路中广播域的区间,也就是说不经过路由器而能直接到达的相连主机或路由器网卡的一个区间。

image-20230907163400375

IP 数据包就像包裹,而送货车就像数据链路。包裹不可能自己移动,必须有送货车承载转运。

而一辆送货车只能将包裹送到某个区间范围内。每个不同区间的包裹将由对应的送货车承载、运输。 IP 的工作原理也是如此。

image-20230907163654401

路由条目类型

默认路由

默认路由是指路由表中任何一个地址都能与之匹配的条目。所有数据包都可以使用默认路由进行数据转发。默认路由为 0.0.0.0/0 或 default。

image-20230907164029362

主机路由

“IP地址/32”被称为主机路由,它是路由表中指向单个 IP 地址或主机名的路由条目。例如: 192.168.153.15/32 就是一条主机路由,表示整个 IP 地址的所有位都将参与路由。

环回地址

以 127 开头的 IP 地址都是环回地址,其所在的回环接口可以理解为虚拟网卡。使用回环地址时,数据包会直接被主机的 IP 层获取,而不经过链路层,也不会流向网络。一般用来检查主机上运行的网络服务是否正常。

路由汇总

路由汇总主要是为了减少路由条目,把可以聚合的路由汇聚为一个大网络。
路由表越大,查找路由表所需的内存和 CPU 也就越多,时间也会越长,导致转发 IP 数据包的性能下降。如果想要搭建大规模、高性能的网络,就需要尽可能的路由表的大小。

image-20230907164300916

IP分片与重组

数据链路不同,MTU不同

每种数据链路的最大传输单元 ( MTU )不同,网络层的 IP 是数据链路的上一层, IP 通过分片屏蔽数据链路的差异,实现不同数据链路互通。从 IP 的一层看,它完全可以忽略各个数据链路上的 MTU ,只需要按照源 IP 地址发送的长度接收数据包。

image-20230907164504067

IP报文的分片与重组

当遇到 IP 数据包大于数据链路 MTU 时,往往无法直接发送出去,主机或路由器就会对 IP 数据包进行分片处理。
经过分片后的 IP 数据,只会在目标主机上进行重组,中途经过路由器时不会进行重组。

image-20230907164557048

路径MTU发现

分片机制有两点不足:加重路由器的处理性能;在分片传输中,一旦某个分片丢失,会造成整个 IP 数据包作废。
为了解决这个问题,要使用路径 MTU 发现 ( Path MTU Discovery ) 技术路径 MTU 是指从发送端主机到接收端主机之间不需要分片时最大 MTU值。即路径中存在的所有数据链路中最小的 MTU 。路路径MTU 发现是从发送主机按照路径 MTU 的值将数据报分片后进行发送,避免在中途的路由器上进行分片处理。

image-20230907165803200

路径MTU发现的工作原理

  1. 发送端主机发送 IP 数据包时将其头部的分片禁止标志位设置为 1 。根据这个标志位,途中的路由器即使收到需要分片的大包,也不会分片,而是直接将包丢弃。之后通过一个 ICMP 不可达消息将数据链路上 MTU 值给发送端主机。

  2. 发送端主机根据收到的 MTU 值对数据包进行分片处理,再把 P 数据包发送给相同的目的主机。如此重复,直到数据包被发送到目标主机为止没有再收到任何 ICMP ,就认为最后一次 ICMP 所通知的 MTU 即是一个合适的 MTU值。 MTU 值至少可以缓存约 10 分钟,在这 10 分钟内使用刚得到的 MTU过了 10 分钟后就重新做一次路径 MTU 发现。
    上面的例子是 UDP ,如果是在 TCP 的情况下,根据路径 MTU 的大小计算出最大段长度 ( MSS),然后再根据这些信息进行数据包的发送。因此,在TCP 中如果使用路径 MTU 发现, IP 层则不会再分片。

路由器三层转发原理

路由器有多个端口,分别连接不同的数据链路。它通过识别目的 IP 地址的网络号,再根据路由表进行转发,路由表中有匹配的路由条目才会转发,无匹配的路由条目则直接丢弃。路由条目既可以手动设置静态路由,也可以通过路由协议自动生成动态路由。

如何进行三层转发

当一台路由器收到一个数据包时,会执行如下步骤:

  1. 对数据包进行解封装。
    通过解封装,查看网络层头部信息的目的 IP 地址

  2. 在路由表中查找匹配的路由条目
    查找匹配的路由条目,就需要将数据包的目的 IP 地址与各个路由条目的网段地址先进行二进制与 ( AND ) 运算,再将运算结果与路由条目的网段地址进行比较,若一致则该条目与目的 IP 地址相匹配。最后,与所有路由条目完成运算和比较,可得到一条或多条相匹配的路由条目。也可能没有匹配的路由条目,那么丢弃数据包。

    image-20230907170556107

  3. 从多个匹配项中选择掩码最长的路由条目。如果路由表中有多条路由条目都匹配数据包的目的IP地址,则路由器会选择掩码长度最长的路由条目,这种匹配方式称为最长匹配原则。例如: 10.1.3.10 的网络地址与 10.1.3.0/16 和 10.1.3.0/24 两项都匹配这时应该选择匹配度最长的 10.1.3.0/24 。

    image-20230907170657757

    1. 将数据包按照相应路由条目进行转发路由条目中包含下一跳和出接口。

      当路由器找到相应的路由条目后,它就会根据对应的下一跳和出接口,将数据包从出接口发送数据给下一跳设备。

      image-20230907171135588

ARP协议

只要确定了 IP 地址,就可以向这个目标地址发送 IP 数据报文。但是在进行实际通信时,还要知道每个 IP 地址所对应的 MAC 地址。
地址解析协议,简称 ARP 协议。是根据目的设备的 IP 地址来查询对应 MAC地址的协议。

ARP的工作原理

当主机 A 向同一个网段内的主机 C 发送数据,但是不知道主机 C 的 MAC地址。

image-20230907171552380

  1. ARP 请求: 主机 A 以主机 C 的 IP 地址为目的IP地址,以广播 MAC 地址为目的 MAC 地址,在同网段内发送这个广播报文,这个报文就叫 ARP 请求报文
    二层交换机不查看 IP 地址,根据目的 MAC 地址将报文除接收端口外的所有端口发送。

  2. ARP 响应: 主机 C 发现目的 IP 地址是自己的 IP 地址,于是主机 C 以自己 MAC 地址和 IP 地址作为源 MAC 地址和源 IP 地址以主机 A 的MAC 地址和 IP 地址作为目的 MAC 地址和目的 IP 地址,发送响应报文给主机 A ,这个报文就叫 ARP 响应报文

    其它主机收到主机 A 的 ARP 请求报文,因为目的 IP 地址不是自己的 IP 地址,因此不会进行响应。当主机 A 在发送 ARP 广播请求报文时,二层交换机已经有主机 A 的 MAC地址表条目。当收到主机 C 发送的单播 ARP 响应报文时,二层交换机将报文从相应端口发送出去。并将主机 C 的 MAC 地址和对应端口记录到 MAC地址表中。

    image-20230907171848709

    1. 更新 ARP 缓存表: 主机 A 收到 ARP 响应报文后,将主机 C 的 IP 地址和 MAC 地址记录到 ARP 缓存表中。下次再向主机 C 发送数据时,直接将缓存的目的 MAC 地址进行封装。

      image-20230907171937931

当主机 A 向不同网段的主机 C 发送数据,但是不知道主机 C 的 MAC 地址。

image-20230907172523772

  1. 主机 A 使用主机 C的 IP 地址查询 ARP,ARP 发现主机 C 不在同一个网段,需要通过默认网关 (即默认路由的下一跳地址) ,但是没有网关 MAC地址。

image-20230907173202463

  1. 主机 A 先将发送给主机 C 的数据放入缓存中,然后发送 ARP 请求报文,主机 A 以网关 IP 地址为目的 IP 地址发送 ARP 广播请求报文。

    image-20230907173607965

  2. 路由器收到 ARP 广播请求报文后,将主机 A 的 MAC 地址和对应端口添加到自己的 MAC 表中,然后查看目的 IP 地址发现是请求自己的 MAC 地址于是单播发送 ARP 响应报文

    image-20230907173633948

  3. 主机 A 收到 ARP 响应报文后,将发送给主机 C 的数据封装网关 MAC 地址为目的 MAC 地址进行发送。

    image-20230908090349801

  4. 路由器收到报文后,查看目的 IP 地址,是发送给主机 C 的,于是查询路由表从相应端口发送数据。由于没有主机 C 的 MAC 地址,路由器发送 ARP请求报文,源 MAC 地址和源 IP 地址替换为发送端口的MAC 地址和 IP 地址。

    image-20230908090401724

  5. 主机 C 收到 ARP 请求报文后,添加路由器的端口和 MAC 地址到 MAC 地址表,单播发送 ARP 响应报文。

    image-20230908090415223

  6. 路由器收到主机 C 的 MAC 地址后,将其添加到 MAC 地址表中。将主机 A发送给主机 C 的报文重新封装,以自己的 MAC 地址为源 MAC 地址,以主机 的 MAC 地址为目的 MAC 地址,发送给主机 C。

    image-20230908090716354

  7. 主机 C 收到主机 A 发送的数据,发送过程结束。

    当主机 C 向主机 A 发送回复报文时,同主机 A 向主机 C 发送数据的步骤。

ARP代理

如果 ARP 请求是从一个网络的主机发往同一网段却不在同一物理网络上的另-台主机,那么连接它们的具有代理 ARP 功能的设备就可以回答该请求,这个过程称作代理 ARP。代理 ARP 功能屏蔽了分离的物理网络,让用户使用起来,跟在同一个物理网络上一样。

免费ARP

免费 ARP 是一种特殊的 ARP 请求,它并非通过 IP 找到对应的 MAC 地址,而是当主机启动的时候,发送一个免费 ARP 请求,即请求自己的 IP 地址的 MAC 地址。
与普通 ARP 请求报文的区别在于报文中的目标 IP 地址。普通 ARP 报文中的目标 IP 地址是其它主机的 IP 地址;而免费 ARP 的请求报文中,目标 IP地址是自己的 IP 地址

免费ARP的作用

起到一个宣告作用。它以广播的形式将数据包发送出去,不需要得到回应,只为了告诉其它主机自己的 IP 地址和 MAC 地址。

可用于检测 IP 地址冲突。当一台主机发送了免费 ARP 请求报文后,如果收到了 ARP 响应报文,则说明网络内已经存在使用该 IP 地址的主机。

可用于更新其它主机的 ARP 缓存表。如果该主机更换了网卡,而其它主机的ARP 缓存表仍然保留着原来的 MAC 地址。这时,通过免费的 ARP 数据包,更新其它主机的 ARP 缓存表。

ICMP

IP 提供尽力而为的服务,指为了把数据包发送到目的地址尽最大努力。它并不做对端目的主机是否收到数据包的验证,无法保证服务质量

ICMP (互联网控制消息协议) 是提供这类功能的一种协议。ICMP 的主要功能包括,确认 IP 包是否成功送达目的地址通知发送过程中 IP 包被丢弃的原因
ICMP 报文像 TCP/UDP 一样通过 IP 进行传输,但是 ICMP 的功能不是传输层的补充,应该把它当做网络层协议

ICMP头部封装字段如下

image-20230908092529447

通过类型字段和编码字段的取值判断这个 ICMP 消息的类型。常见的 ICMP消息所对应的类型和编码值如下图。

image-20230908092602926

从功能上,ICMP 的消息分为两类: 一类是通知出错原因的错误消息,另一类是用于诊断的查询消息。

image-20230908092703828

ping

我们常用的 ping 工具就是通过 ICMP 消息测试网络层连通性的。源主机发出Echo request 消息,目的主机回应 Echo reply 消息,则两台主机间的网络层通信正常。也可以通过 ping 命令来判断目标主机是否启用。

image-20230908092924885

一些名词补充解释

IPv4头部

IP 提供最简单的服务:

实现从源到目的的数据转发。不会在传输数据前先与接收方建立连接,也不保证传输的可靠性,它只提供尽力而为的服务。
IP 通信时传输的是 IP 报文, IP 报文由 IP 头部和数据两部分组成。 IP 头部包含控制报文转发的必要信息。

image-20230908093113718

版本(Version)

字段长度为 4 比特,表示 IP 的版本号。IPv4 的版本号是 4 ,所以这个字段的值也是 4 。常见的版本号有 IPv4 和 IPv6。

头部长度(IHL :Internet Header Length )

字段长度为 4 比特,表示 IP 头部大小,单位是 4 字节 ( 32 比特)。没有可选项的 IP 包,头部长度为 5 ,即 20 字节 ( 4 x 5 = 20 )。

区分服务(TOS :Type Of Service)

字段长度为 8 比特,用来说明数据是要加速传输还是精确传输,以及数据在传输过程中是否遇到了拥塞。

总长度(Total Length)

字段长度为 16 比特,表示 IP 头部和数据加起来的总字节数。 IP 包的最大长度为 65535 字节。

标识(ID:identification)

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

标志(Flags)

字段长度为 3 比特,表示分片信息。每比特的具体含义如下表。

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

字段长度为 13 比特,表示分片在整个数据包中的位置。作用是告诉重组分片的设备,应该按照什么样的顺序重组数据包。

生存时间(TTL: Time To Live)

字段长度为 8 比特,表示数据包可以经过的中转路由器数量。每经过一个路由器, TTL 会减少 1 ,直到变成 0 则丢弃改包,避免数据包在网络中无限传递。

协议(Protocol)

字段长度为 8 比特,表示 IP 上一层所使用的协议。常见的 IP 上层协议有TCP 和 UDP。

分配编号 协议
1 ICMP
2 IGMP
4 IP
6 TCP
17 UDP
41 IPv6
50 ESP
51 AH
88 EIGRP
89 OSPF
112 VRRP
115 L2TP
头部校验和(Header Checksum)

字段长度为 16 比特,用来校验数据包的头部是否被破坏。设备会丢弃校验失败的数据包。

IPv6 以取消头部校验和字段,通过上层的 TCP 或 UDP 校验协议是否正确。

源地址(Source Address)

字段长度为32比特(4字节),表示发送端IP地址。

目的地址(Destination Address)

字段长度为32比特(4字节),表示接收端IP地址。

可选项(Options)

很少使用,在IPv6中已经取消。

填充(Padding)

在有可选项的情况下, 头部长度不是 32 比特的整数倍时,通过向字段填充0,调整为 32 比特的整数倍。

数据(Data)

IP数据字段,用于存放数据。把IP上一层协议的头部也作为数据进行处理。

比特

英文名bit,也叫位。二进制中最小单位,一个比特的值要么是0要么是1。

字节

英文名Byte,1 Byte=8 bit

四、路由协议

路由的概念

在 TCP/IP 通信中,网络层的作用是实现终端的点对点通信。IP 协议通过 IP地址将数据包发送给目的主机,能够让互联网上任何两台主机进行通信。IP 地址可以识别主机和路由器,路由器可以把全世界的网络连接起来。

什么是路由器

路由器可以连接多个网络。它有多个端口,分别连接不同的网络区域。通过识别目的 IP 地址的网络号,再根据路由表进行数据转发。路由器会维护一张路由表,通过路由表的信息,路由器才能正确的转发 IP 报文

image-20230911082929304

什么是路由表

为了将数据包发给目的节点,所有节点都维护着一张路由表路由表是路由器通过各种途径获得的路由条目,每一个路由条目包含目的网段地址、子网掩码、路由协议、出接口、下一跳 IP 地址、路由优先级和度量值等信息。路由表记录IP 包在下一跳应该发给哪个路由器IP 包根据路由表在各个数据链路上传输

路由表来源

路由表的来源分为三类,直连路由,静态路由和动态路由

直连路由:路由器直接连接的路由条目,只要路由器接口配置了 IP 地址,接口状态正常,就会自动生成对应的直连路由。

静态路由:通过命令手动添加的路由条目就是静态路由。

动态路由:通过路由协议从相邻路由器动态学习到的路由条目。

路由优先级:不同来源的路由有不同的优先级,优先级的值越小,则路由的优先级就越高。当存在多条目的网段相同,但来源不同的路由时,具有最高优先级的路由成为最优路由,将被加入到路由表中,而其它路由则处于未激活状态,不显示在路由表中。

路由协议的默认优先级如下:

路由来源 优先级
直连路由 0
OSPF 10
静态路由 60
RIP 100
BGP 255

路由环路

数据转发形成死循环,不能正确到达目的地。

image-20230912142655636

路由环路的主要生成原因是配置错误的路由网络规划错误导致。比如:在两台路由器上配置到相同目的地址的路由表项,下一跳互相指向对方,就会造成路由环路。另外某些动态路由协议配置不当,也有可能产生环路。

黑洞路由

一条路由条目,无论是静态的还是动态的,都需要关联到一个出接口,出接口指的是设备要到达目的网络是的出站接口。路由的出接口可以是这个设备的物理接

口,如千兆网口,也可以是逻辑接口,如 VLAN 接口,或者是隧道接口等。其中有一种接口非常特殊,那就是Null0接口,只有一个编号,那就是 0 。

Null0 是一个系统保留的逻辑接口,当网络设备在转发数据包时,如果使用出接口 Null0 的路由,那么数据包将被丢弃,就像被扔进了一个黑洞里,因此出

接口为Null0的路由条目又被称为黑洞路由

image-20230912142938714

黑洞路由是一种非常有用的路由条目,适用于如下场景:

在网络使用中,按需将数据包指向黑洞路由,实现流量过滤。

在已经部署路由汇总的网络中,用于防止数据转发出现环路。

在部署了 NAT 的网络中,用于防止数据转发出现环路。

在 BGP 网络中,用于发布特定网段的路由。

动态路由协议

静态路由是手动添加完成的。

如果有 100 个网段,一个路由器就需要设置将近100 条路由信息。网络使用过程中,不可避免的出现网段新增、删除、修改等情况,这些更新的路由信息需要在所有路由器上进行设置。还有一个不可忽视的问题,一旦某个路由器出现故障,数据传输无法自动绕过故障节点,只能通过手动设置才能恢复正常。

image-20230912143203816

如果是使用动态路由,提前设置好路由协议,路由器之间会定期交换路由信息,路由器会知道网络中其它网段的信息,动态生成路由表。如果网络出现变化,网段需要增删改时,只需要在相应的路由器上配置动态路由即可。不需要像静态路由那样,在所有路由器上进行修改。对于大型网络,路由器个数较多时,主要使用动态路由协议。

即使网络上的节点出现故障,只要有一个可绕行的其它路径,那么路由器的路由表会自动重新设置,数据包也会自动选择这个路径。

采用路由协议后,网络拓扑结果变化的响应速度会大大提升。无论网络正常的增删改,还是异常的网络故障,相邻的路由器都会检测到变化,会把拓扑的变化通知网络中其它的路由器,使它们的路由表产生相应的变化。这个过程比手动对路由表的修改要快很多,也准确很多。

对于少于10个路由器的小型网络,静态路由或许已经能够满足需求,但是在大中型网络中,通常会使用动态路由协议,或者动态路由与静态路由协议相结合的方式来建设这个网络。

路由协议基本原理

路由器之间需要运行相同的路由协议,才能相互交换路由信息。每种路由协议都有自己的语言,即相应的路由协议报文。如果两台路由器启动了相同的路由协议,那么就有了相互通信的基础。不同的路由协议,有相同的目的,就是计算和维护路由表。通常工作过程包含 4 个阶段:

邻居发现阶段:运行了路由协议后,路由器会主动把自己的网段信息发送给相邻的路由器。既可以使用广播发送路由协议消息,也可以单播将路由协议消息发送给指定的邻居路由器。

交换路由信息阶段:发现邻居后,每台路由器都将自己的路由信息发送给相邻的路由器,相邻路由器又发送给下一个相邻的路由器。经过一段时间后,每台路由器都会收到网络中所有的路由信息。

计算路由阶段:每一台路由器都会运行某种算法,计算出最终的路由表来。

维护路由阶段:为了感知突然发送的网络故障,比如:设备故障或线路中断等,路由协议规定相邻两台路由器之间,应该周期性发送协议报文。如果路由器在一段时间内,没收到邻居发来的协议报文,就认为邻居路由器失效。

image-20230912143649554

自治系统

随着 IP 网络的发展,网络规模已经很大了,无论哪种路由协议都不能完成全网的路由计算,因此网络分成了很多个自治系统( AS , Autonomous System

)或路由选择域 ( Routing Domain )。自治系统可以制定自己的路由策略,并管理自治系统内进行具体路由控制的路由器集合。

每个自治系统都有一个唯一的自治系统编号,它的基本思路是希望通过不同的编号来区分不同的自治系统。通过路由协议和自治系统编号,路由器可以确定路由路径和路由信息的交换方式。某个自治系统缺乏足够的安全机制,就可以利用编号改变路径回避它。

自治系统的编号范围是 1 ~ 65535 ,其中 1 ~ 64511 是注册的因特网编号, 64512 ~ 65535 是专用网络编号。

image-20230912143908319

EGP和IGP

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

IGP 和 EGP 的关系,跟 IP 地址网络号和主机号的关系类似。根据 IP 地址的网络号在网络中进行路由选择,根据主机号在网段内部进行主机识别一样。

既可以根据 EGP 在区域网络之间进行路由选择,也可以根据 IGP 在区域网络内部进行主机识别

路由协议被分为 EGP 和 IGP 两个层次。

没有 EGP 就不可能有世界上各个不同机构网络之间的通信,没有 IGP 机构内部也就不可能进行通信。

IGP 是指在同一个自治系统内交换路由信息的路由协议。RIP 、RIP2 、OSPF 属于 IGP 。IGP 的主要目的是发现和计算自治系统内的路由信息。

EGP 与 IGP 不同,EGP 用于连接不同的自治系统,并在不同自治系统间交换路由信息。BGP 属于 EGP

EGP 的主要目的是使用路由策略和路由过滤等手段,控制路由信息在自治系统间的传播。

动态路由协议类型

按照路由的算法和路由信息的交换方式,路由协议可以分为距离矢量(Distance-Vector ,D-V )路由协议和链路状态( Link-State )路由协议。

其中典型的距离矢量协议是 RIP ,典型的链路状态协议是 OSPF 。

距离矢量路由协议

距离矢量路由协议指的是基于距离矢量的路由协议,RIP 是最具代表性的距离矢量路由协议。距离矢量这个概念包含两个关键的信息:距离方向,其中距离是指到达目的网络的度量值(即所要经过路由器的个数),而方向指的是到达目的网络的下一跳设备。

image-20230912145705508

每一台运行距离矢量路由协议的路由器会周期性的将自己的路由表通告出去,相邻的路由器收到路由信息并更新自己的路由表,再继续向其它直连的路由器通告路由信息,最终网络中的每台路由器都能知道各个网段的路由,这个过程称为路由的泛洪过程。

image-20230912145741776

路由器之间互换目的网络的方向和距离的信息,并以这些信息更新路由表。这种方法在处理上比较简单,不过由于只有距离和方向的信息,所以当网络构造变得复杂时,在获得稳定的路由信息之前需要消耗一定时间(即路由收敛时间长),也极易发生路由循环等问题。

image-20230912145814291

链路状态路由协议

运行链路状态路由协议的路由器会使用一些特殊的信息描述网络的拓扑结构和IP 网段,这些信息被称为链路状态信息( LSA ),所有路由器都会产生自己直连接口的链路状态信息。

image-20230912150010525

路由器将网络中泛洪的链路状态信息搜集起来,存入一个数据库中,这个数据库就是 LSDB (链路状态数据库),LSDB 是对整个网络的拓扑结构及 IP 网段的描述,路由器拥有相同的 LSDB 。对于任何一台路由器,网络拓扑都完全一样。

image-20230912150033627

接下来所有的路由器都基于 LSDB 使用最短路由优先算法进行计算,得到一棵已自己为根的、无环路的最短路径树,并将得到的路由加载到路由表中。

链路状态算法使用增量更新机制,只有当链路的状态发生变化时,才发送路由更新信息。

相比距离矢量路由协议,链路状态路由协议具有更大的扩展性和更快的收敛速度,但是它的算法消耗更多的内存和 CPU 处理能力。

路由协议的性能指标

协议计算的正确性:是指路由协议的算法会不会产生错误的路由导致网络环路。不同的路由协议使用的算法不同,因此路由正确性也不相同。

链路状态路由协议(如 OSPF )在算法上杜绝了产生路由环路的可能性,比距离矢量路由协议更优。

路由收敛速度:路由收敛是指全网路由器的路由表达到一致状态。收敛速度快,意味着网络拓扑结构发生变化时,路由器能够更快的感知,并及时更新相应的路由信息。

OSPF 、BGP 等协议的收敛速度快于 RIP 。

协议所占的系统开销:路由器在运行路由协议时,需要消耗的系统资源,比如:CPU 、内存等。工作原理的不同,各个路由协议对系统资源的需求也不同。

OSPF 路由技术的系统开销要大于 RIP 协议。

协议自身的安全性:是指协议设计时,有没有考虑防止网络攻击。

OSPF 、RIPv2 有相应的防止攻击的认证方法,而 RIPv1 没有。

协议适用网络规模:不同路由协议所适用的网络规模、拓扑结构不同。

RIP 协议有 16 跳的限制,所以只能应用在较小规模的网络中;

而 OSPF 可以应用在几百台路由器的大规模网络中;

BGP 能够管理全世界所有的路由器,其所管理的网络规模大小只受系统资源的限制。

主要路由协议

各种路由协议都需要使用 IP 来进行报文封装,但其细节有所不同。

RIP

RIP 协议是最早的路由协议,是为小型网络中提供简单易用的动态路由。RIP协议报文采用 UDP 封装,端口号是 520 。由于 UDP 是不可靠的传输层协议,所以 RIP 协议需要周期性的广播协议报文来确保邻居收到路由信息。

OSPF

OSPF 是目前应用最广泛的路由协议,可为大中型网络提供分层的、可靠的路由服务。OSPF 直接采用 IP 进行封装,所有协议报文都由 IP 封装后进行传输,协议号是 89

IP 是尽力而为的网络层协议,本身是不可靠的,所以为了保证传输的可靠性,OSPF 采用了复杂的确认机制来保证传输可靠

BGP

BGP 采用 TCP 来保证协议传输的可靠性,TCP 端口号是 179BGP 不需要自己设计可靠传输机制,降低了协议报文的复杂度和开销

image-20230912150920166

主要协议的路由协议表如下:

路由协议名称 下一层协议 方式 适用范围 循环检测
RIP UDP 距离矢量 IGP 不可以
RIPv2 UDP 距离矢量 IGP 不可以
OSPF IP 链路状态 IGP 可以
BGP TCP 路径矢量 EGP 可以

五、传输层

image-20230912151457585

初识传输层

传输层的作用是建立应用程序间的端到端连接,为数据传输提供可靠或不可靠的通信服务。传输层有两个重要协议,分别是 TCP 和 UDP

TCP是面向连接的可靠传输协议,UDP 是无连接的不可靠传输协议。

一个 IP 地址可以标识一台主机,IP 报文头部有一个字段,用来标识上层协议类型。根据这个字段的协议号,来识别 IP 传输的数据是 TCP 还是 UDP 。IP 用协议号 6 标识 TCP ,用协议号 17 标识 UDP 。但一台主机可能同时有多个程序,传输层的 TCP 和 UDP ,为了识别上一层的应用程序类型,使用端口号来识别具体的程序,从而使这些程序可以复用网络通道。

image-20230912151625626

二层的帧通信和三层的包通信都是无连接的、不可靠的通信方式,四层的 TCP却是一种可靠的通信方式。如果帧在传输中丢失,通信双方的二层功能模块发现不了;如果包在传输中丢失,通信双方的三层功能模块发现不了。

一个TCP 段丢失了,TCP 模块一定能够发现。一个 TCP 段的丢失,意味着一个IP 包的丢失,因为 TCP 段是封装在 IP 包里的;同理,一个 IP 包的丢失,意味着一个帧的丢失。因此,二层和三层通信的不可靠性在 TCP 这里得到补偿。

image-20230912151737142

应用程序其实就是 TCP/IP 的应用协议,应用协议大多以客户端/服务端的形式运行。

客户端( Client ,使用服务的一方。)是请求的发起端。而服务端(Server ,提供服务的程序或主机。)则是请求的处理端。

作为服务端的程序有必要提前启动,随时准备接收客户端的请求。否则即使有客户端的请求发过来,也无法进行处理。

image-20230912151837636

确认一个请求究竟是发给哪一个服务端,可以通过收到数据包的目的端口号轻松识别。当收到 TCP 的建立连接请求时,如果目的端口号是 22 ,则转给SSH ,如果是 80 则转给 HTTP 。

TCP

TCP 是面向连接的、可靠的流协议。流就是不间断的数据,当应用程序采用TCP 发送消息时,虽然是按顺序发送,但接收端收到是没有间隔的数据流。比如,在发送端应用程序发送了 10 次 100 字节的数据,那么在接收端,应用程序可能会收到一个 1000 字节连续不间断的数据。

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

UDP

UDP 是不具有可靠性的协议,可靠性功能交给上层的应用去完成。UDP 虽然可以确保发送数据的大小,比如:发送端应用程序发送一个 100 字节的消息,那么接收端应用程序也会以 100 字节为长度接收数据。但不能保证数据一定会到达。因此,应用有时会根据需要进行重发处理。

TCP和UDP的区别

TCP 是可靠的传输协议,一定会优于 UDP 吗?其实不然,TCP是面向连接的,并且具备顺序控制、重发控制等机制,可以为应用提供可靠传输。而 UDP主要用于对高速传输和实时性有较高要求的通信。比如:通过 IP 电话进行通话。如果使用 TCP ,数据如果丢失会重发,这样就无法流畅地传输通话的声音,导致无法进行正常交流。而采用 UDP ,它不会进行重发处理。也就不会有声音大幅度延迟到达的问题。即使有部分数据丢失,也只会影响小部分的通话。

因此,TCP UDP 需要根据应用的目的选择使用

端口号

数据链路层和网络层的地址,分别是 MAC 地址和 IP 地址。MAC 地址用来标识同一网段中不同的设备,IP 地址标识网络中的主机或路由器。

传输层的地址就是端口号,端口号用来识别同一台主机中不同的应用程序,也被称为程序地址

一台主机可以同时运行多个程序,比如 WWW 服务的 Web 浏览器、电子邮箱客户端等程序都可同时运行。传输层协议正是利用这些端口号,识别主机正在进行通信的应用程序,并准确的传输数据。

image-20230912152839717

仅仅通过目的端口来识别某一个通信是不准确的。两台主机访问的目的端口号80相同,可以根据源端口号区分这两个通信。

目的端口号和源端口号相同,但是两台主机的源 IP地址不同;IP 地址和端口号都一样,只是协议号不同。这些情况,都会认为是两个不同的通信。

因此,网络通信中通常采用 5 个信息来识别一个通信。

它们是 IP 地址目的 IP 地址协议号源端口号目的端口号。只要其中一项不同,就会认为是不同的通信。

image-20230912152933561

TCP/UDP 的端口号是一个 16 位二进制数,端口号范围为 0 ~ 65535 。在实际进行通信时,要事先确定端口号。确定端口号的方法分为两种:

标准端口号

这种方法也叫静态方法。它是指每个应用程序都有指定的端口号。HTTP 、TELNET 、FTP 等常用的应用程序所使用的端口号是固定的,这些端口号又

称为知名端口号。知名端口号范围是 0 ~ 1023 。除了知名端口号外,还有一些端口号也被正式注册,称为注册端口。它们分布在 1024 ~ 49151 之间。

端口号 对应协议
20 FTP data
21 FTP control
22 SSH
23 Telnet
25 SMTP
53 DNS
69 TFTP
80 HTTP
110 POP3
161 SNMP
162 SNMP Trap
179 BGP
443 HTTPS
520 RIP

时序分配法

这种方法也叫动态分配法。服务端有必要确定监听的端口号,但是接受服务的客户端不需要确定端口号。客户端应用程序不用设置端口号,由操作系统进行分配。操作系统可以为每个应用程序分配不冲突的端口号。比如:每需要一个新的端口号时,就在之前分配号码的基础上加 1 。这样,操作系统就可以动态管理端口号了。

动态分配的端口号范围是 49152 ~ 65535 之间。

UDP

UDP ,全称 User Datagram Protocol 。UDP 不提供复杂的控制机制,利用 IP 提供面向无连接的、不可靠的通信服务。

并且它是将应用程序发来的数据,在收到的那一刻,立即按照原样发送到网络上的一种机制。

即使在网络出现拥堵的情况下,UDP 也无法进行流量控制

传输途中出现丢包,UDP 也不负责重发。当出现包的到达顺序错误时也没有纠正的功能。

如果需要这些细节控制,那么需要交由上层的应用程序去处理。也可以说,是损失信息传输的可靠性来提升信息传输的效率

特点

  • UDP 是无连接的:UDP 发送数据前不与对方建立连接。
  • UDP 不对数据进行排序:UDP 报文的头部没有数据顺序的信息。
  • UDP 对数据不发送确认,发送端不知道数据是否被正确接收,也不会重发数据。
  • UDP 传送数据比 TCP 快,系统开销也少。
  • UDP 缺乏拥塞控制机制,不能够检测到网络拥塞。

用途

由于 UDP 面向无连接,它可以随时发送数据。再加上 UDP 本身的处理既简单又高效,因此常用于以下几个方面:

包总量较少的通信( DNS 、SNMP 等)

视频、音频等多媒体通信(即时通信)

只在局域网使用的应用通信广播通信(广播、多播)

一些UDP知名端口号

UDP端口号 对应协议
53 DNS
69 TFTP
161 SNMP
520 RIP

TCP

UDP 将部分控制转移给应用程序去处理,只提供作为传输层协议的最基本功能。与 UDP 不同,TCP 是对传输、发送、通信进行控制的协议。主要特点如下:

  • 三次握手建立连接:确保连接建立的可靠性。
  • 端口号:通过端口号识别上层协议和服务,实现网络的多路复用。
  • 完整性校验:通过计算校验和,保证接收端能检测出传输过程中可能出现的错误。
  • 确认机制:对于正确收到的数据,接收端通过确认应答告知发送方,超出一定时间后,发送方将重传没有被确认的段,确保传输的可靠性。
  • 序列号:发送的数据都有唯一的序列号,标识了每一个段。接收端可以利用序列号实现丢失检测、乱序重排等功能。
  • 窗口机制:通过可调节的窗口,TCP 接收端可以告知希望的发送速度,控制数据流量。
  • TCP 实现了数据传输时各种控制功能,可以进行丢包时的重发控制,还可以对次序错误的分包进行顺序控制

作为一种面向有连接的协议,只有在确定对端存在时,才会发送数据,从而可以控制通信流量的浪费。由于 UDP 没有连接控制,即使对端不存在或中途退出网络,数据包还是能够发送出去。

连接

连接是指网络中进行通信的两个应用程序,为了相互传递消息而专有的、虚拟的通信线路,也叫做虚拟电路。一旦建立了连接,进行通信的应用程序只使用这个虚拟线路发送和接收数据,就可以保障信息的传输。应用程序可以不用考虑 IP 网络上可能发生的各种问题,依然可以转发数据。TCP 则负责连接的建立、断开、保持等管理工作。

为了在不可靠的 IP 通信实现可靠性传输,需要考虑很多事情,数据的破坏、丢包、重复以及分片顺序混乱等问题。

TCP 通过校验和、序列号、确认应答、重发控制、连接管理以及窗口控制等机制实现可靠性传输

一些TCP知名端口号

TCP端口号 对应协议
20 FTP data
21 FTP control
22 SSH
23 Telnet
25 SMTP
53 DNS
80 HTTP
110 POP3
179 BGP
443 HTTPS

序列号和确认应答

在 TCP 中,当发送端的数据到达接收主机时,接收端主机会返回一个已收到的消息。这个消息叫做确认应答( ACK )。

image-20230912154547303

TCP 通过确认应答实现可靠的数据传输。当发送端将数据发出后,会等待对端的确认应答。如果有确认应答,说明数据已经成功到达对端。否则,数据可能已经丢失。

在一定时间内没有等到确认应答,发送端会认为数据已经丢失,并进行重发。这样,即使有丢包,仍能保证数据到达对端,实现可靠传输。

image-20230912154613658

未收到确认应答,不一定是数据丢失。也可能对端已经收到数据,返回的确认应答在途中丢失,也会导致发送端重发。此外,也可能确认应答延迟到达,发送端重发数据后才收到。

image-20230912154646479

每一次传输数据时,TCP 都会标明段的起始序列号,以便对方确认。在 TCP中并不直接确认收到哪些段,而是通知发送方下一次应该发送哪一个段,表示前面的段已经收到。

比如:收到的确认应答序列号是 N + 1 时,表示 N 以及 N之前的数据都收到了。

image-20230912154717223

由于每一个段都有唯一的编号,这样的话,当接收端收到重复的段时容易发现,数据段丢失后也容易定位,乱序后也可以重新排列。

超时重发

超时重发是指在重发数据之前,等待确认应答到来的那个间隔时间。如果超过RTT(往返时间),仍未收到确认应答,发送端将进行数据重发。

image-20230912154810269

数据被重发后,若还收不到确认应答,则再次发送。这时,等待确认应答的时间将会以 2 倍、4 倍的指数函数增长。数据也不会无限地重发,达到一定的重发次数后,还没收到确认应答,就会认为网络或对端主机发送异常,强制关闭连接,并通知应用通信异常强行终止。

RTT 时间是一个非常重要的参数。过大的 RTT 会导致 TCP 重传非常慢,降低传输的速度;过小的 RTT 会导致 TCP 频繁重传,降低资源的使用效率。在实际情况下,通过实时跟踪数据往返的时间间隔来动态调整 RTT 的数值。

连接管理

TCP 提供面向有连接的通信传输,面向有连接是指在数据通信前做好通信两端的准备工作。在数据通信前,发送一个 SYN 作为建立连接的请求。如果对端发来确认应答,则认为可以开始数据通信。如果对端的确认应答未能到达,就不会进行数据通信。在通信结束时,会使用 FIN 进行断开连接的处理。

SYN 包和 FIN 包是通过 TCP 头部的控制字段来管理 TCP 连接。一个连接的建立与断开,正常过程至少需要来回发送 7 个包才能完成。

建立一个 TCP连接需要发送 3 个包,这个过程叫作三次握手

断开一个 TCP 连接需要发送4 个包,这个过程也称作四次挥手

创建一个 TCP 连接,会产生一个 32 位随机序列号,因为每一个新的连接使用一个新的随机序列号。

image-20230912155050671

三次握手

主机 A 想向主机 B 发送数据,TCP 模块通过三次握手建立连接 TCP 会话。

  1. 三次握手,是指 TCP 会话建立过程中共交换了 3 个 TCP 控制段,它们分别是 SYN 段、SYN + ACK 段、ACK 段。详细过程如下:
  2. 发送端主机 A 向接收端主机 B 发出 SYN 段,表示发起建立连接请求,同时把自己的状态告诉主机 B 。将段的序列号设为 a ,SYN 置位,表示 SYN管理段。
  3. 主机 B 收到连接请求后,回应 SYN + ACK 段,将序列号设为 b ,确认号设为 a + 1 ,同时将 SYN 和 ACK 置位。
  4. 主机 A 收到主机 B 的连接确认后,发送 ACK 段再次进行确认,确认会话的建立,将 ACK 置位。主机 A 收到确认号是 a + 1 、序列号是 b 的段后,发送序列号为 a + 1 、确认号为 b + 1 的段进行确认。
  5. 主机 B 收到确认报文后,连接建立。双方可以开始传输数据。

image-20230912155150727

经过 3 次握手后,A B 之间其实是建立了两个 TCP 会话,一个是从 A 指向 B 的 TCP 会话,另一个是从 B 指向 A 的 TCP 会话。

A 发送的 SYN段,表示 A 请求建立一个 从 A 指向 B 的 TCP 会话,目的是控制数据能够正常、可靠的从 A 传输到 B 。

B 在收到 SYN 段后,会发送一个 SYN +ACK 段作为回应。

SYN + ACK 的含义是:B 一方面同意了 A 的请求,另一方面也请求建立一个从 B 指向 A 的 TCP 会话,这个会话目的是控制数据能够正确、可靠的从 B 传输到 A 。

A 收到 SYN + ACK 段后,回应一个 ACK,表示同意 B 的请求。

四次挥手

当 TCP 数据段的传输结束时,双方都需要发送 FIN 段和 ACK 段来终止TCP 会话。这个方式叫做四次挥手,详细过程如下:

  1. 主机 A 想要终止连接,发送序列号为 p 的段,FIN 置位,表示 FIN 管理段。
  2. 主机 B 收到主机 A 发送的 FIN 段后,发送 ACK 段,确认号为 p + 1 ,同时关闭连接。
  3. 主机 B 发送序列号为 q的段,FIN 置位,通知连接关闭。
  4. 主机 A 收到主机 B 发送的 FIN 段后,发送 ACK 段,确认号为 q + 1 ,同时关闭连接。TCP 连接至此结束。

image-20230912155444510

TCP 会话的终止分为两个部分。

首先 A 发送 FIN 控制段,请求终止从 A 到B 的 TCP 会话。B 回应 ACK 段,表示同意 A 的终止会话请求。A 收到 B的 ACK 段后,才开始终止这个会话。

同理,B 也会向 A 发起请求,终止从 B到 A 的 TCP 会话。

单位段

经过传输层协议封装后的数据称为。在建立 TCP 连接时,可以确定数据段的大小,也就是最大消息长度( MSS )。TCP 在传输大量数据时,是以 MSS的大小将数据进行分割发送,重发也是以 MSS 为单位。

image-20230912155803015

MSS 是在三次握手时,由两端主机计算出来的。两端主机在发出建立连接的请求时,会在 TCP 头部写入 MSS 值。然后在两者间选择较小的值使用。MSS默认值为 536 字节,理想值是 1460 字节,加上 IP 头部 20 字节和 TCP头部 20字节,刚好在 IP 层不会被分片。

image-20230912155840491

窗口控制

TCP 是以 1 个段为单位,每发一个段进行一次确认应答。如果包的往返时间越长,通信性能就越低。

image-20230912160014792

为解决这个问题,TCP 引入了窗口的概念。确认应答不再是每个分段,而是以窗口的大小进行确认,转发时间被大幅度的缩短。

窗口大小就是指无需等待确认应答,而可以继续发送数据的最大值。窗口大小是一个 16 位字段,因此窗口最大是 65535 字节。在 TCP 传输过程中,双方通过交换窗口的大小来表示自己剩余的缓冲区( Buffer )空间,以及下一次能够接受的最大数据量,避免缓冲区的溢出。

image-20230912160326715

发送数据中,窗口内的数据即使没有收到确认应答也可以发送出去。如果窗口中的数据在传输中丢失,也需要进行重发。因此,发送端主机在收到确认应答前,必须在缓冲区保留这部分数据。

收到确认应答后,将窗口滑动到确认应答中的序列号位置。这样可以按顺序将多个段同时发送,这种机制也被称为滑动窗口控制

image-20230912160357450

窗口控制和重发控制

在使用窗口控制时,如果出现确认应答未能返回的情况,数据已经到达对端,是不需要再进行重发的。然而,在没有使用窗口控制时,没收到确认应答的数据是会重发的。而使用了窗口控制,某些确认应答即使丢失也无需重发。

image-20230912161635682

如果某个报文段丢失,接收主机收到序号不连续的数据时,会为已经收到的数据返回确认应答。即使接收端收到的包序号不是连续的,也不会将数据丢弃,而是暂时保存至缓冲区。出现报文丢失时,同一个序号的确认应答将会被重复发送。如果发送端收到连续 3 次同一个确认应答,就会将对应的数据进行重发。这种机制比超时管理更高效,也被称为高速重发机制

image-20230912161847772

流控制

接收端处于高负荷状态时,可能无法处理接收的数据,并丢弃数据,就会触发重发机制,导致网络流量无端浪费。

为了防止这种情况,TCP 提供一种机制可以让发送端根据接收端的实际接收能力控制发送的数据量,这就是流控制。它的具体操作是,接收端主机通知发送端主机自己可以接收数据的大小,于是发送端会发送不超过这个限度的数据。这个限度的大小就是窗口大小。

TCP 头部中有一个字段用来通知窗口大小。接收主机将缓冲区大小放入这个字段发送给接收端。当接收端的缓存不足或处理能力有限时,窗口大小的值会降低一半,从而控制数据发送量。也就是说,发送端主机会根据接收端主机的指示,对发送数据的量进行控制,也就形成了一个完整的 TCP 流控制。若接收端要求窗口大小为 0 ,表示接收端已经接收全部数据,或者接收端应用程序没有时间读取数据,要求暂停发送。

image-20230912162147509

如果窗口更新的报文丢失,可能会导致无法继续通信。为避免这个问题,发送端主机会时不时的发送一个叫窗口探测的数据段,此数据段仅含一个字节以获取最新的窗口大小信息。

拥塞控制

有了 TCP 的窗口控制,收发主机之间不再以一个数据段为单位发送确认应答,也能够连续发送大量数据包。在网络出现拥堵时,如果突然发送一个较大量的数据,有可能会导致整个网络瘫痪。

为了防止这个问题出现,在通信开始时,就会通过一个叫慢启动的算法得出的数值,对发送数据量进行控制。

image-20230912162233674

为了在发送端调节发送数据的量,需要使用拥塞窗口。在慢启动时,将拥塞窗口的大小设置为 1 MSS 发送数据,之后每收到一次确认应答( ACK ),拥塞窗口的值就加 1 。在发送数据包时,将拥塞窗口的大小与接收端主机通知的窗口大小做比较,选择它们当中较小的值发送数据。这样可以有效减少通信开始时连续发包导致网络拥堵,还可以避免网络拥塞的发生。

对比TCP和UDP

功能项 TCP UDP
连接服务的类型 面向连接 无连接
维护连接的状态 维持端到端的连接状态 不维护连接状态
对应用层数据的封装 对应用层数据进行分段和封装,用端口号识别应用层程序 对来自应用层数据直接封装为数据报,用端口号标识应用层程序
数据传输 通过序列号和应答机制确保可靠传输 不确保可靠传输
流量控制 使用滑动窗口机制控制流量 无流量控制机制

UDP格式

UDP 段由 UDP 头部和 UDP 数据组成。UDP 头部有源端口号、目的端口号、长度、校验和组成,UDP 头部长度为固定的 8 字节。

image-20230912162646409

  • 源端口号:字段长 16 位,表示发送端 UDP 端口号。
  • 目的端口号:字段长 16 位,表示接收端 UDP 端口号。
  • 长度:字段长 16 位,表示 UDP 头部和 UDP 数据的总长度。
  • 校验和:字段长 16 位,是错误检查的字段,包括 UDP 头和 UDP 数据的内容计算得出,用于检查传输过程中出现的错误。

TCP格式

TCP 头部比 UDP 头部复杂得多,由一个 20 字节的固定长度加上可变长的选项字段组成。

image-20230912163419177

  • 源端口号:字段长 16 位,表示发送端 TCP 端口号。
  • 目的端口号:字段长 16 位,表示接收端 TCP 端口号。
  • 序列号:字段长 32 位,是指 TCP 段数据的位置序号。根据序列号来判断是否存在重收、漏收、乱序等情况。确认号:字段长 32 位,是指下一次应该收到的数据的序列号。收到这个确认号,表示这个确认号之前的数据都已经正常收到。
  • 数据偏移:字段长 4 位,表示 TCP 数据从哪一位开始计算,也可以看作TCP 头部的长度。
  • 保留:字段长 6 位,保留给以后扩展使用。
  • 控制位:字段长 6 位,每 1 位标志位可以打开一个控制功能,也叫做控制位。从左到右分别是 URG 、ACK 、PSH 、RST 、SYN 、FIN 。

image-20230912163514090

URG:标志位为 1 时,表示有需要紧急处理的数据。

ACK:标志位为 1 时,表示确认应答有效。

PSH:标志位为 1 时,表示将数据立即上传给应用程序,而不是在缓冲区

排队。

RST:标志位为 1 时,表示 TCP 连接出现异常,必须强制断开连接。

SYN:标志位为 1 时,表示请求建立连接,并设置序列号的初始值。

FIN:标志位为 1 时,表示数据发送结束,请求断开 TCP 连接。

  • 窗口:字段长 16 位,标明滑动窗口的大小,表示自己还能接收多少字节的数据。
  • 校验和:字段长 16 位,是错误检查的字段,包括 TCP 头和 TCP 数据的内容计算得出,用于检查传输过程中出现的错误。
  • 紧急指针:字段长 16 位,表示紧急数据的长度。当 URG 位为 1 时,这个字段才有效。
  • 选项:字段的长度是可变的。通过添加不同的选项,实现 TCP 的一些扩展功能。
  • 填充:如果 TCP 段的头部不是 4 字节的整数倍,就填充一些 0 ,来保证头部长度是 4 字节的整数倍。
  • 数据:TCP 段的数据部分,不是 TCP 头部内容,字段最大是MSS。

六、应用层

image-20230912164005496

应用层

image-20230912164041553

在 TCP/IP 模型中,应用层提供的服务相当于 OSI 模型的应用层、表示层和会话层的服务总和。不仅包含了管理通信连接的会话层功能、数据格式转换的表示层功能,还包括主机间交互的应用层功能。

image-20230912164103361

应用层的目的是向应用程序提供网络接口,直接向用户提供服务。

相比于下层的网络协议,应用协议要常见得多,可能大家都听过 HTTP 、HTTPS 、SSH等应用层协议。

image-20230912164129181

TCP/IP 模型中应用层位于传输层之上,传输层的端口号用于标识数据所对应的应用层协议。也就是说,有端口号的协议都是应用层协议。应用协议是终端设备之间的应用通信规则。应用之间交互的信息叫消息,应用协议定义这些消息的格式以及消息的控制或操作的规则。

image-20230912164154402

应用协议的通信方式可分为两类:服务器和客户端模型和P2P 模型

服务器和客户端模型中,始终公开固定 IP 地址的主机为其它主机的应用程序提供服务,请求服务的主机之间不会互相通信。这些为其它主机提供服务的终端设备称为服务器,那些请求服务的主机则称为客户端。大多数应用层协议,都是这种模型。

image-20230912164240346

P2P 模型中,没有特定的服务器或客户端,这些设备上安装的应用程序,可以在主机间建立对等连接,既可以提供服务,也可以接受服务。通常是大流量的应用程序采用 P2P 模型,比如:下载器等。

image-20230912164258935

开发应用程序时,为了实现相应的功能和目的,可以使用现有的应用协议,也可以自己定义一个新的应用协议。同时,应用程序可以直接使用传输层以下的网络传输服务,开发者只需要关心选择哪种应用协议、如何开发即可,而不用考虑数据是如何传输到目的地。这也是 TCP/IP 分层模型的特点。

image-20230912164331009

应用程序有很多,包括 Web 浏览器、电子邮件、远程登录、文件传输、网络管理等。这些应用程序都会使用应用协议进行通信,应用协议正是为了实现应用程序的功能而设计和创造的。

远程登录

网络设备的管理方式,分为本地管理和远程管理。远程管理是从本地主机登录到网络对端设备,向网络对端的设备发送管理数据,以实现设备管理的操作方式。

通过远程管理,不仅可以直接使用主机上的应用,还可以对主机进行参数设置。远程登录主要使用 Telnet 和 SSH 两种协议管理网络设备。

Telnet

在实际工作中,除了个别无法远程管理设备外,大多会采用远程管理的方式,来管理设备的配置文件和系统文件。对比本地管理,远程管理不受物理位置限制,连上网络就可以对世界另一端的设备进行操控,更省去了插拔设备线缆、终端设置的过程,可以通过一个远程应用同时管理大量的网络设备。

Telnet 协议定义了一台设备通过 IP 网络向远端设备发起明文管理连接的通信标准,可以在一台设备上通过 Telnet 协议与一台远端设备建立管理连接,并对远端设备实施配置和监控,这种方式的体验与本地登录设备并无区别。发起管理的设备为 Telnet 客户端,被管理的设备是 Telnet 服务器

因此,Telnet 协议是一个典型的服务器和客户端模型的应用层协议。

image-20230912164533825

Telnet 协议通过 TCP 协议建立服务器和客户端的一条连接,并通过这条连接向服务器发送用户名、密码和命令。

Telnet 协议使用的是 TCP 23 端口,表示客户端在发起 Telnet 连接时,默认连接服务器的 TCP 23 号端口。

当 Telnet 客户端输入命令后,这些命令通过 TCP 连接发送到 23 号端口,监听请求的守护进程 Telnetd 收到后,将命令发送给 Shell ,Shell 为操作系统进行命令解释,然后操作系统执行 Telnet 客户端发出的命令。同理,操作系统按照相反的顺序,将命令执行的结果发回给 Telnet 客户端。

Telnet 协议实现了远程命令传输,但是客户端和服务器跨越不可靠的公共网络时,在命令传输过程中可以截获 Telnet 通信的所有数据,然后使用截获的用户名和密码来通过 Telnet 服务器的身份认证,并登录到设备上对配置文件进行修改。

image-20230912164815921

Telnet 协议存在重大安全隐患,不推荐在实验室之外的环境使用。

SSH

SSH 协议全程是安全外壳协议,目的就是为了取代 Telnet ,SSH 是加密的远程登录协议,提供更加安全的远程登录服务。使用 SSH 后会加密通信内容。即使信息被截获,由于无法解密,也无法了解数据的真正内容。

image-20230912164847740

SSH 协议常用版本是 SSHv2 ,SSH 客户端通过 SSHv2 协议与 SSH 服务器建立一条 TCP 的加密信道,建立这条安全信道的方式是让客户端使用服务器的 RSA 公钥来验证 SSH 服务器的身份。SSH 协议默认使用 TCP 22 端口

如果客户端成功验证了服务器的身份,它们之间就会创建出一个会话密钥,并用双方协商出来的加密算法和会话密钥,对这个信道传输的数据进行加密

这样,两台设备之间就建立了一条安全的信道,使用这条安全信道发送密码,密码以密文的形式传输,通过服务器的身份认证

SSH 就是通过这种方式建立加密信道,确保 SSH 服务器,也就是被管理设备的 Shell免遭非法用户操作。

文件传输

除了远程登录,我们还需要从远端设备传输文件,文件传输协议提供的应用服务可以满足我们的需求

FTP 是网络上文件传输的标准协议,FTP 使用 TCP 作为传输协议,支持用户的登录认证访问权限的控制

另一种常见的文件传输协议是 TFTP 协议,TFTP 是一种简单的文件传输协议,不支持用户的登录认证,也没有复杂的命令。

TFTP 使用 UDP 作为传输协议,并有重传机制

image-20230912165027763

FTP

FTP 用于服务器和客户端之间传输文件,是 IP 网络上传输文件的通用协议。

FTP 采用客户端和服务器的模式,使用 TCP 协议提供可靠传输。

FTP 可以对登录服务器的用户名和密码进行验证,允许客户端指定文件的传输类型,并且可以设置文件的传输权限

FTP 使用两条 TCP 连接实现文件传输。一条是 FTP 控制连接,用来控制管理;另一条是 FTP 数据连接,用于数据传输。

FTP 控制连接用于传输 FTP控制命令和命令执行的应答信息,比如登录用户名和密码的验证、发送文件的名称、发送方式的设置

这条连接在整个 FTP 会话过程中一直保持打开,通过ASCII 码字符串发送请求和接收应答。

在控制连接上无法发送数据,而 FTP数据连接用于文件和文件列表的传输,仅在需要传输数据时建立数据连接,数据传输完毕后终止

image-20230912165140265

FTP 控制连接使用的是 TCP 21 号端口,也是 FTP 服务器的侦听端口,等待客户端的连接。在 TCP 21 号端口进行文件 GET(RETR)、PUT(STOR),以及文件表(LIST)等操作时,每次都会建立一个用于数据传输的数据连接。数据和文件表的传输正式在这个数据连接上进行的。

数据连接的 TCP 连接通常使用端口 20 。也可以使用 PORT 命令修改为其它值。

相同的一个文件,不同的操作系统可能有不同的存储方式。为了确保文件能够准确的传送给对方,常用 2 种传输模式:

ASCII 模式

ASCII 模式是默认的文件传输模式。发送方把本地文件转换成标准的 ASCII码,然后在网络中传输;接收方收到文件后,根据自己的文件存储方式,把它转换成本地文件。ASCII 文件传输模式通常用于传输文本文件。

二进制流模式

二进制流模式也称为图像文件传输模式。发送方不做任何转换,把文件按照比特流的方式进行传输。二进制文件类型通常用于传送程序文件。

在 FTP 数据连接过程中,有两种数据传输方式:主动方式被动方式

FTP 主动传输方式,也称为 PORT 方式。采用主动方式建立数据连接时,FTP 客户端会通过 FTP 控制连接向 FTP 服务器发送 PORT 命令,PORT命令携带参数:A1 、A2 、A3 、A4 、P1 、P2 ,其中 A1 、A2 、A3 、A4 表示需要建立数据连接的主机 IP 地址,而 P1 和 P2 表示客户端用于传输数据的临时端口号,临时端口号的数值为 256*P1+P2 。当需要传输数据时,服务器通过 TCP 端口号 20 与客户端提供的临时端口建立数据传输通道,完成数据传输。

在整个过程中,由于服务器在建立数据连接时主动发起连接,因此被称为主动模式

image-20230912165427252

如果客户端在防火墙内部,主动方式可能会有问题,因为客户端的端口号是随机的,防火墙并不知道。默认安全策略,防火墙只会允许外部主机访问部分内部已知端口,阻断对内部随机端口的访问,从而无法建立 FTP 数据连接。这时,就需要使用 FTP 被动方式来进行文件传输。被动方式也被称为 PASV 方式。

FTP 控制通道建立后,希望通过被动方式建立数据传输通道的 FTP 客户端会利用控制通道向 FTP 服务器发送 PASV 命令,告诉服务器进入被动方式传输。服务器选择临时端口号并告知客户端,命令参数和主动传输方式一致。

当需要传输数据时,客户端主动与服务器的临时端口建立数据传输通道,并完成数据传输。在整个过程中,服务器是被动接收客户端的数据连接,所以被称为被动模式

image-20230912165529958

采用被动方式时,两个连接都由客户端发起。一般防火墙不会限制内部的客户端发起的连接,这样就解决了主动方式下的问题。

TFTP

TFTP 也是用于服务器和客户端之间传输文件的,对比 FTP ,TFTP 没有复杂的交互接口和认证控制,适用于不需要复杂交互的网络环境

TFTP 采用客户端和服务器的模式,使用 UDP 协议传输,服务器使用端口号69 侦听 TFTP 连接。

由于 UDP 不能提供可靠的数据传输,因此 TFTP 使用超时重传机制确保数据正确发送。TFTP 只能提供简单的文件传输能力,包括文件的上传和下载。

不支持文件目录功能,也不能对用户的身份进行验证和授权。

image-20230912165623055

TFTP 协议传输是由客户端发起的。当需要下载文件时,客户端向 TFTP 服务器发送一个读请求,然后从服务器接收数据,并向服务器发送确认;当需要上传文件时,由客户端向服务器发送一个写请求,然后向服务器发送数据,并接收服务器的确认。

image-20230912165643990

与 FTP 类似,TFTP 传输文件有两种模式:netascii 模式octet 模式。octet 传输模式对应 FTP 的二进制流模式,用于传输程序文件;netascii 模式对应 FTP 的 ASCII 模式,用于传输文本文件。

TFTP 进行文件传输时,将传输文件看成是由多个连续的文件块组成。

每一个TFTP 数据报文中包含一个文件块,同时对应一个文件块编号

每次发完一个文件块后,就等待对方的确认,确认时指明块编号。

发送方发完数据后,如果在规定时间内没收到对端的确认,那么发送方就会重新发送数据。

发送确认的一方如果在规定时间内没收到下一个文件块数据,则重发确认报文。这种方式可以确保文件的传送不会因某一个数据的丢失而失败。

每次 TFTP 发送的数据报文中包含的文件块大小固定为 512 字节,如果文件长度恰好是 512 字节的整数倍,那么在文件传送完毕后,发送方还必须在最后发送一个不包含数据的报文,用来表示文件传输完毕。

如果文件长度不是512 字节的整数倍,那么最后传送的数据报文包含的文件块肯定小于 512字节,正好作为文件结束的标志。

电子邮件

通过电子邮件,可以发送文字内容图片,还可以发送报表数据等所有计算机可以存储的信息。电子邮件不受距离限制,可以与世界上任一的互联网用户互相联系。由于使用简易、投递迅速、易于保存、不受距离限制等特点,使得电子邮件已经成为人们普遍使用的一种应用。

通信架构

而电子邮件的通信过程由简单的发送方到接收方,演变成发送方电脑到发送方邮件服务器,发送方邮件服务器到接收方邮件服务器,以及接收方邮件服务器到接收方电脑的三个通信过程。并且参与通信的四方都不是直接相连,而是分别独立连接到互联网中。

这个架构中,邮件发送方和接收方使用的电脑称为用户代理

image-20230912165945177

邮件地址

使用电子邮件时,需要拥有一个地址,这个地址叫做邮件地址,也叫邮箱地址。它相当于通信地址和姓名。

如:networkfox@qq.com

networkfox 表示用户的名称,同一个通信地址内,名称必须是唯一的,不能出现重复;@ 表示分隔符 ,qq.com 是用户邮箱的邮件接收服务器的域名

电子邮件的发送地址由 DNS 管理。DNS 中注册了邮件地址和对应邮件服务器的域名。这些映射信息被称为 MX 记录

比如:qq.com 的 MX 记录中指定了mail.qq.com。那么任何发送给 qq.com 结尾的邮件都被发送到 mail.qq. com服务器。就这样,根据 MX 记录中指定的邮件服务器,可以管理不同邮件地址与特定邮件服务器之间的映射关系。

SMTP协议

提供电子邮件服务的协议叫做 SMTP 。SMTP 用于收发双方的邮件服务器之间,而不是用户代理和邮件服务器之间的通信方式。在实际使用中,发送方用户代理与发送方服务器之间也常采用 SMTP 协议。

image-20230912172242027

SMTP 为了实现高效发送邮件内容,在传输层使用了 TCP 协议端口号是 25。在一台邮件服务器向另一台邮件服务器发送邮件时,首先向对方的 TCP 25端口发起一条连接。然后利用这条 TCP 连接发送控制消息和数据。

image-20230912172310560

尽管 SMTP 协议的逻辑简单,也足以顺利完成邮件的传输工作,但难免存在一些安全缺陷:

SMTP 传输的邮件是明文的形式,没有提供数据加密机制,可以看到邮件传输的具体内容,用户信息的机密性无法得到保障。

SMTP 没有提供任何认证机制,即使使用了伪造的发件人邮件地址也无法识别,会出现冒名顶替的安全问题。

漫天的广告邮件和包含钓鱼链接的垃圾邮件成为日益严重的问题。为了修正SMTP 出现的问题,IETF 定义了扩展的 SMTP ,即 ESMTP 。ESMTP 提供的扩展功能中包括认证机制加密机制等。

在整个邮件传输的过程中,SMTP/ESMTP 协议定义了邮件服务器之间的消息传输方式。在接收服务器收到电子邮件后,接收方(用户代理)是如何访问邮件则需要其它的协议来处理。

POP3协议

电子邮件通过 SMTP 协议到达接收方服务器,个人电脑不可能长期处于开机状态,用户希望一开机就能收到邮件,然而 SMTP 没有这种功能。

为了解决这个问题,就引入了 POP3 协议。POP3 协议是用于接收电子邮件的协议。发送端的邮件使用 SMTP 协议将电子邮件转发给一直在线的 POP3 服

务器。客户端再根据 POP3 协议从 POP3 服务器接收邮件。这个过程中,为了防止别人盗取邮件内容,还要进行用户认证。

image-20230912172524085

POP3 协议和 SMTP 协议一样,是基于 TCP 的应用层协议,使用 TCP 110端口连接邮件服务器。接收方的邮件客户端程序首先使用 TCP 连接到 POP3服务器的 TCP 端口 110 ;再进行用户认证邮件列表查询邮件下载邮件删除等操作;操作完成后,客户端与邮件服务器之间再断开 TCP 连接。

image-20230912172555017

POP3 仅负责邮件的下载,邮件从客户端上传到邮件服务器由 SMTP 协议完成。

IMAP协议

POP3 协议的邮件客户端能够在邮件服务器上执行的操作很少,而且邮件要下载到客户端本地,而不保留在邮件服务器,实际使用时很不方便。目前使用更广泛的接收电子邮件的协议是 IMAP IMAP 中邮件则由服务器进行管理。

image-20230912172713218

使用 IMAP 时,不必从服务器上下载所有的邮件也可以查看。由于 IMAP 是在服务器端处理 MIME 信息,它可以实现邮件附件的选择性下载功能。比如:一封邮件有 5 个附件时,可以只下载其中的 3 个附件。IMAP 还会在服务器上对 “ 已读/未读 ” 信息和邮件分类进行管理,所以在不同的电脑上打开邮箱,也能保持同步,使用起来非常方便。

WWW

万维网

WWW )是将互联网的信息以超文本形式展现的系统,也叫做 Web。可以显示 WWW 信息的客户端软件叫做 Web 浏览器,有时简称为浏览器。目前常用的 Web 浏览器包括微软的 Internet Explorer 、谷歌公司的Google Chrome 、腾讯公司的 QQ 浏览器以及 Apple 公司的 Safari 等。

使用浏览器,我们不需要关心信息保存在哪个服务器,只需轻轻点击鼠标,就可以访问页面上的链接并打开相关信息。

image-20230912172812473

通过浏览器进行访问后,显示在浏览器上的内容叫做 Web 。访问一个网站时看到的第一个页面称为首页(又称为主页)。很多公司的主页地址形式如下:

http://www.公司名称. com. cn

这类主页中通常有公司概况、产品信息、招聘信息等内容。我们可以点击这些标

题的图标或链接,就可以跳转到对应的页面上。这些页面上的信息不仅仅是文字

内容,还有图片或动画,甚至是声音或其它程序等各种各样的信息。我们不但可

以通过 Web 页获取信息,还可以自己制作 Web 页向全世界发布信息。

WWW 有 3 个重要的概念,它们分别是访问信息的方式和位置(URI)、信息的表现形式( HTML)以及信息传输( HTTP)等操作。

URI

URI 用于标识资源,是一种高效的识别码,被应用于主页地址、电子邮件、电话号码等。

image-20230912173004461

通常主页地址被叫做 URL 。URL 常用来表示网络资源的具体位置。但是 URI不限于标识互联网资源,可以作为所有资源的标识符。简单说就是 URL 是URI 的一个子集。

WWW 主要使用 httphttps 表示 Web 页的位置和访问 Web 页的方法。

http 的具体格式如下:

http://主机名/路径

http://主机名:端口号/路径

http://主机名:端口号/路径?访问内容#部分信息

其中主机名可以用域名或 IP 地址表示,端口号表示传输端口号。省略端口号时,表示使用 http 的默认端口 80 。路径是指主机上信息的位置,访问内容表示要传给 CGI 的信息,部分信息表示页面当中的位置等。这种表示方法可以标识互联网中特定的数据。由于 http 展现的数据随时都有可能发生变化,所以记住页面的 URI( URL ),也不能保证下次能够访问到这个页面。

HTML

HTML 是用来描述 Web 页的一种语言。它可以指定浏览器中显示的文字、文字的大小和颜色,还可以对图像、动画或音频进行设置。

在页面中 HTML 不仅可以文字或图片附加链接,点击链接时还可以呈现链接所指的内容。互联网中任何一个 WWW 服务器中的信息都可以以链接的方式展现。

HTML 也可以说是 WWW 的数据表现协议。只要是用 HTML 展现的数据,即使是在不同的计算机上,效果基本上是一样的。

HTTP

当用户在浏览器的地址栏里输入 Web 页的 URL 后,HTTP 的处理就开始了。HTTP 默认使用 80 端口。它的工作机制,首先是客户端向服务器的 80端口建立一个 TCP连接,然后在这个 TCP 连接上进行请求和应答以及数据报文的发送。

image-20230913145534645

HTTP 中常用的有两个版本,一个是 HTTP 1.0 ,另一个是 HTTP 1.1 。在HTTP 1.0 中每一个命令和应答都会触发一次 TCP 连接的建立和断开。而从HTTP 1.1 开始,允许在一个 TCP 连接上发送多个命令和应答,这种方式也叫保持连接( keep-alive )。可以大量减少 TCP 连接的建立和断开操作,提高传输效率。

image-20230913145701702

网络管理应用

很多应用层协议广为人知,是因为我们在日常上网的过程中,会大量使用与这些应用协议有关的应用程序,这类应用协议称为终端用户应用协议

另外还有一些应用协议在网络中广泛使用,但我们对它们却少有听闻,最多在网络无法正常使用时,才会意识到它们的存在,这类应用层协议称为系统应用协议

在日常工作中,网络工程师经常使用到的系统应用协议有DHCP协议和DNS协议

image-20230913145838996

image-20230913145846844

七、NAT

初识NAT

IP 地址分为公网地址私有地址公网地址有 IANA 统一分配,用于连接互联网;私有地址可以自由分配,用于私有网络内部通信。

image-20230913150439204

随着互联网用户的快速增长,2019 年 11 月 25 日全球的公网 IPv4 地址已耗尽。在 IPv4 地址耗尽前,使用 NAT( Network Address Translation)技术解决 IPv4 地址不够用的问题,并持续至今。NAT 技术的是将私有地址转换成公网地址,使私有网络中的主机可以通过少量公网地址访问互联网。

但 NAT只是一种过渡技术,从根本上解决问题,是采用支持更大地址空间的下一代 IP 技术,即 IPv6 协议,它提供了几乎用不完的地址空间。

image-20230913150553603

NAT技术

IP 地址中预留了 3 个私有地址网段,在私有网络内,可以任意使用。

image-20230913151048787

其余的 IP 地址可以在互联网上使用,由 IANA 统一管理,称为公网地址

image-20230913151107236

NAT 解决了 IPv4 地址不够用的问题,另外 NAT 屏蔽了私网用户真实地址,提高了私网用户的安全性。

典型的 NAT 组网模型,网络通常是被划分为私网和公网两部分,各自使用独立的地址空间。私网使用私有地址 10.0.0.0/24 ,而公网使用公网地址。为了让主机 A 和 B 访问互联网上的服务器 Server ,需要在网络边界部署一台 NAT设备用于执行地址转换。NAT 设备通常是路由器防火墙

image-20230913151150671

基本NAT

基本 NAT 是最简单的一种地址转换方式,它只对数据包的 IP 层参数进行转换,它可分为静态 NAT动态 NAT

静态 NAT 是公网 IP 地址和私有 IP 地址有一对一的关系,一个公网 IP 地址对应一个私有 IP 地址,建立和维护一张静态地址映射表。

动态 NAT 是公网 IP 地址和私有 IP 地址有一对多的关系,同一个公网 IP 地址分配给不同的私网用户使用,使用时间必须错开。它包含一个公有 IP 地址池和一张动态地址映射表。

举例说明动态NAT

私网主机 A( 10.0.0.1 )需要访问公网的服务器 Server(61.144.249.229 ),在路由器 RT 上配置 NAT ,地址池为219.134.180.11 ~ 219.134.180.20 ,地址转换过程如下:

image-20230913154753407

  1. A 向 Server 发送报文,网关是 10.0.0.254 ,源地址是 10.0.0.1 ,目的地址是 61.144.249.229 。

image-20230913154911334

  1. RT 收到 IP 报文后,查找路由表,将 IP 报文转发至出接口,由于出接口上配置了 NAT ,因此 RT 需要将源地址 10.0.0.1 转换为公网地址。

    image-20230913155057821

  2. RT 从地址池中查找第一个可用的公网地址 219.134.180.11 ,用这个地址替换数据包的源地址,转换后的数据包源地址为 219.134.180.11 ,目的地址不变。同时 RT 在自己的 NAT 表中添加一个表项,记录私有地址 10.0.0.1到 公网地址 219.134.180.11 的映射。RT 再将报文转发给目的地址 61.144.249.229 。

    image-20230913155111282

  3. Server 收到报文后做相应处理。

  4. Server 发送回应报文,报文的源地址是 61.144.249.229 ,目的地址是 219.134.180.11 。

    image-20230913155127529

  5. RT 收到报文,发现报文的目的地址 219.134.180.11 在 NAT 地址池内,于是检查 NAT 表,找到对应表项后,使用私有地址 10.0.0.1 替换公网地址219.134.180.11,转换后的报文源地址不变,目的地址为 10.0.0.1 。RT在将报文转发给 A 。

    image-20230913155136992

  6. A 收到报文,地址转换过程结束。

image-20230913155148702

如果 B 也要访问 Ser ver ,则 RT 会从地址池中分配另一个可用公网地址219.134.180.12 ,并在 NAT 表中添加一个相应的表项,记录 B 的私有地址10.0.0.2 到公网地址 219.134.180.12 的映射关系。

image-20230913155211124

NAPT

在基础 NAT 中,私有地址和公网地址存在一对一地址转换的对应关系,即一个公网地址同时只能分配给一个私有地址。它只解决了公网和私网的通信问题,并没有解决公网地址不足的问题。

NAPT( Network Address Port Translation )对数据包的 IP 地址、协议类型、传输层端口号同时进行转换,可以明显提高公网 IP 地址的利用率。

举例说明

私网主机 A( 10.0.0.1 )需要访问公网的服务器 Server 的 WWW 服务(61.144.249.229 ),在路由器 RT 上配置 NAPT ,地址池为219.134.180.11 ~ 219.134.180.20 ,地址转换过程如下:

  1. A 向 Server 发送报文,网关是 RT( 10.0.0.254 ),源地址和端口是10.0.0.1:1024 ,目的地址和端口是 61.144.249.229:80 。

    image-20230913160050611

  2. RT 收到 IP 报文后,查找路由表,将 IP 报文转发至出接口,由于出接口上配置了 NAPT ,因此 RT 需要将源地址 10.0.0.1:1024 转换为公网地址和端口。

  3. RT 从地址池中查找第一个可用的公网地址 219.134.180.11 ,用这个地址替换数据包的源地址,并查找这个公网地址的一个可用端口,例如 2001 ,用这个端口替换源端口。转换后的数据包源地址为 219.134.180.11:2001 ,目的地址和端口不变。同时 RT 在自己的 NAT 表中添加一个表项,记录私有地址10.0.0.1:1024 到 公网地址 219.134.180.11:2001 的映射。RT 再将报文转发给目的地址 61.144.249.229 。

    image-20230913160111569

  4. Server 收到报文后做相应处理。

  5. Server 发送回应报文,报文的源地址是 61.144.249.229:80 ,目的地址是219.134.180.11:2001 。

    image-20230913160127853

  6. RT 收到报文,发现报文的目的地址在 NAT 地址池内,于是检查 NAT 表,找到对应表项后,使用私有地址和端口 10.0.0.1:1024 替换公网地址219.134.180.11:2001,转换后的报文源地址和端口不变,目的地址和端口为10.0.0.1:1024 。RT 再将报文转发给 A 。

    image-20230913160139673

  7. A 收到报文,地址转换过程结束。

    image-20230913160150864

  8. 如果 B 也要访问 Server ,则 RT 会从地址池中分配同一个公网地址219.134.180.11 ,但分配另一个端口 3001 ,并在 NAT 表中添加一个相应的表项,记录 B 的私有地址 10.0.0.2:1024 到公网地址 219.134.180.12:3001 的映射关系。

NAT Server

从基本 NAT 和 NAPT 的工作原理可知,NAT 表项由私网主机主动向公网主机发起访问而生成,公网主机无法主动向私网主机发起连接。因此 NAT 隐藏了内部网络结构,具有屏蔽主机的作用。但是在实际应用中,内网网络可能需要对外提供服务,例如 Web 服务,常规的 NAT 就无法满足需求了。

为了满足公网用户访问私网内部服务器的需求,需要使用 NAT Server 功能,将私网地址和端口静态映射成公网地址和端口,供公网用户访问。

image-20230913160505112

A 的私网地址为 10.0.0.1 ,端口 8080 提供 Web 服务,在对公网提供Web 服务时,要求端口号为 80 。在 NAT 设备上启动 NAT Server 功能,将私网 IP 地址和端口 10.0.0.1:8080 映射成公网 IP 地址和端口219.134.180.11:80 ,这样公网主机 C 就可以通过 219.134.180.11:80 访问 A 的 Web 服务。

NAT ALG

八、ICMP

博客内容均系原创,未经允许严禁转载!
您可以通过 RSS 订阅本站文章更新,订阅地址:https://www.sunqizheng1997.com/feed/什么是 RSS ?
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇