计算机网络由两台或多台计算机组成,这些计算机通过电缆(有线)或 WIFI(无线)连接起来,目的是传输、交换或共享数据和资源。通过使用硬件(例如:路由器、交换机、接入点和电缆)和软件(例如:操作系统或业务应用程序)构建计算机网络。
计算机网络的核心是数据通信,它通过将数据划分为小的数据包,并通过网络传输这些数据包来实现信息的传递。计算机网络通常由以下几个要素组成:
独立模式:计算机之间相互独立
在计算机网络的早期阶段,计算机之间先相互独立运行,没有连接在一起,每台计算机独立完成自己的任务,数据共享和通信较为困难。
如上所示,如果多个计算机要协同完成某种任务,那么只能等其中一台计算机完成将数据传递给下一台,然后吓一跳计算机再进行相应的任务处理,这样效率是非常低的。
网络互联: 多台计算机连接在一起, 完成数据共享
随着计算机数量的增加,人们意识到将多台计算机连接在一起可以实现数据共享和协同工作。这促使了计算机网络的发展,通过网络连接,计算机可以相互通信和共享数据。
局域网LAN:计算机数量更多了,通过交换机和路由器连接在一起
随着计算机网络的普及,人们开始在局域范围内连接更多的计算机,形成局域网。局域网通常由交换机和路由器等网络设备连接起来,实现跨地域的数据通信和资源共享。
广域网WAN:将远隔千里的计算机都连在一起
连接不同地理位置的局域网,形成广域网。广域网通过路由器和其它网咯设备将多个局域网连接起来,实现跨地域的数据通信和资源共享。
所谓的 “局域网” 和 “广域网” 只是一个相对的概念。
“协议” 是一种约定或规范,用于定义通信双方在进行交互时必须遵守的规则和步骤。在计算机网络中,网络协议是指通信计算机之间必须共同遵守的一组约定,以确保数据的可靠传输和有效处理。
网络协议可以被视为一种语言,它规定了通信的格式、数据的编码方式、消息的传递顺序以及错误处理等细节。通过遵循相同的协议,通信双方能够理解和解释对方发送的数据,从而实现有效的数据交换和通信。
一个生活中关于 “协议” 的简单例子:
生活中的交通规则就是一种协议,用于规范道路上的车辆和行人如何行驶和交互。如红绿灯信号、交通标志等都是交通规则的一部分,它们确保了交通的有序和安全。
协议提供了一种通信服务,主要定义设备之间通信所使用的语言。当通信简单时,我们可以只使用一种简单的协议。当通信复杂时,我们必须将任务分解到不同的层次中,因为我们需要在每个层次上遵循一个协议,这种技术被称为协议分层。
这种分层使我们能够将服务与实现分离。每个层次需要从较低层次接收一组服务,并向较高层次提供服务。对任何一个层次的修改都不会影响其它层次。
为什么引入分层设计?
网络协议栈设计成层状结构,其目的就是为了解耦不同功能和任务,并提供更好的可维护性和可扩展性。
例如:在打电话的时候,真正的通话过程并不是直接将 A 所说的话直接传递给 B ,而是先将 A 所说的话记录下来,再将其进行编码,然后通过网络将其发送到 B 的手机上,然后 B 的手机中对应的器件对通话数据进行解码,然后得到 A 所通话的数据。
若 A 与 B 进行通过都是使用的汉语,我们将其称为语言层。手机与手机之间通信使用的是手机设备相关的一些接口,我们将其称为通信设备层。
随着科技全球化的发展,手机也不仅仅是在一个国家进行使用,手机售卖到其它国家之后,此时上层的通信语言变了,但是依旧可以正常使用。
分层的一个主要优势就是封装。分层架构将通信系统划分为多个层次,每个层次负责特定的功能和任务。每个层次都有定义明确的接口和协议,它们之间通过这些接口进行通信。
当某个层次的协议需要进行更改或替换时,由于每个层次都有清晰的接口定义,只需在该层次进行修改,而不影响其它层次的实现。这种封装性使得系统更加灵活和可扩展。
网络协议分层结构的好处主要有以下几方面:
1️⃣ 分工明确:每一层协议都有自己的功能和职责,可以避免功能冗余。如:物理层负责数据的传输,网络层负责数据包的路由,传输层负责提供端到端的数据传输服务。
2️⃣ 灵活性:对每一次协议的修改或替换都不会影响到其他层。如:可以在不改变网络层和传输层的情况下,更换物理层的传输介质。
3️⃣ 可维护性:协议分层结构可以使得设计和维护工作更加简单,每一次都是独立的,可以单独的进行设计和维护。
4️⃣ 复用性:上层可以复用下层提供的服务。如:TCP 和 UDP 协议都复用了 IP 协议提供的数据包传输服务。
5️⃣ 兼容性:不同的网络设备和系统可通过共同遵守的协议来进行通信,实现了不同设备和系统之间的可操作性。
6️⃣ 扩展性:协议分层结构可以方便地添加新的协议和服务。
在网络协议中,同一层的协议可以看作是直接在进行通信,而不需要考虑下层协议的具体细节。
OSI 七层模型(Open System Interconnection Reference Model)是一个用于理解和描述计算机网络通信的参考模型。它将网络通信划分为七个不同的层次,每个层次负责特定的功能和任务。
OSI 七层模型如下:
OSI 七层模型提供了一种通用的参考框架,用于理解和描述计算机网络通信的不同层次和功能。每个层次都有特定的协议和功能,它们通过顶柜明确的接口实现相互之间的通信。
TCP/IP 是一组协议的代名词,它还包括许多协议,组成了 TCP/IP 协议簇。TCP/IP 通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。
物理层: 负责光/电信号的传递方式。比如现在以太网通用的网线(双绞线)、早期以太网采用的同轴电缆(现在主要用于有线电视)、光纤,现在的 WiFi 无线网使用电磁波等都是属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等。集线器(Hub)工作在物理层。
数据链路层: 负责设备之间的数据帧的传送和识别。例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验工作。有以太网、令牌环网、无线 LAN 等标准。交换机(Switch)工作在数据链路层。
网络层: 负责地址管理和路由选择。例如在 IP 协议中,通过 IP 地址来标识一台主机,并通过路由表的方式规划出两台主机之间的数据传输。如传输控制协议(TCP),能够确保数据可靠的从源主机发送到目标主机。
传输层: 负责两台主机之间的数据传输。如传输控制协议(TCP),能够确保数据可靠的从源主机发送到没目标主机。
应用层: 负责应用程序间沟通,如简单电子邮件传输(SMTP),文件传输协议(FTP)、网络远程访问协议(Telnet)等。我们的网络编程主要是针对应用层。
OSI 模型将网络层细分为网络层和数据链路层,形成七层模型。而 TCP/IP 模型将网络层和数据链路层合并为一个层级,形成了四层模型。
一般而言:
但是并不绝对,很多交换机也实现了网络层的转发;很多路由器也实现了部分传输层的内容(如端口转发)。这些设备的功能范围并不是绝对的,实际上也会有一些交叉和重叠。
下面是同一个网段内两台主机进行文件传输的简化网络传输流程图:
在同一个局域网内的两台主机可以直接进行通信。局域网的设计初衷就是为了让局域网内的主机能够方便地相互通信。
当用户要将文件传输给另一台主机时,文件数据需要经过网络协议栈的封装和解包。
发送端:
数据封装完毕后,通过局域网发送给目标主机。
接收端:
数据在发送端经过协议栈的封装后,通过局域网发送给目标主机。接收端的协议栈对数据进行解包和分用,将数据送达至应用层进行处理。在这个过程中,每一次协议都会负责添加或提取对于的报头信息,以确保数据正确的传输和处理。自顶向下的封装和自底向上的解包过程就是计算机网络中数据通信的基本原理。
跨网段的主机的文件传输。数据从一台计算机到另一台计算机传输的过程中要经过一个或多个路由器。
局域网之间都是通过路由器连接起来的,因此一个路由器至少横跨两个局域网。这些被路由器级联的局域网都认为,该路由器就是该局域网内的一台主机,因此路由器可以和这些局域网中的任意一台主机进行直接通信。
当路由器级联的两个局域网采用不同的通信标准时,路由器会负责将数据从一个局域网发到另一个局域网,并进行适当的转换和处理。
在这种情况下,路由器会根据接收到的数据的源和目的地址以及对于的网络层协议进行路由选择和转发。当路由器接收到从局域网1发送过来的数据时,路由器会解析以太网的报头,并将剩余的数据传送到网络层。在网络层,路由器会根据目的地址和路由表等信息,将数据转发到适当的局域网2在转发过程中,路由器会根据局域网2采用的通信标准(如令牌环网),为数据添加相应的报头信息,以确保数据能够在局域网2中正确传输。
即通过路由器的处理,不同通信标准的局域网之间的数据传输得以实现。路由器在网络层中起到了关键的作用,负责解析和转发数据,以及进行不同通信标准之间的转换和适配。
关于网络层相关的问题解释
什么是报头(Header)和有效载荷(Payload)?
报头指的是网络数据包或消息的元数据部分,报头一般通过位段实现,它包含了关于数据包的控制信息和描述信息。报头通常位于数据报或消息的首部,用于帮助网络设备或软件识别和处理数据。报头中的信息可以包括源地址、目的地址、协议版本、数据长度、校验和等。
有效载荷是指在数据传输中携带的实际数据部分。它是报头之后的内容。有效载荷包含了需要在网络中传输或处理的实际信息。有效载荷的内容可以根据应用程序或协议的需要而有所不同。
报头和有效载荷的区分,有助于在数据传输过程中对数据进行灵活的控制和处理。报头提供了必要的元数据,用于指示和控制数据的传输和处理过程;而有效载荷则是传输的实际数据内容,是数据传输的核心部分。
如何将报头与有效载荷进行正确的分离?
需要将报头与有效载荷进行分离,需要明确报头的大小。在协议设计中,可以采用以下的方法来获取报头的大小:
无论是定长字段还是子描述字段,都需要在协议设计中明确规定报头的格式和大小,并确保发送端和接收端在解析报头时能够正确地识别和分离报头和有效载荷。
在局域网中传输数据时,所有主机都能收到数据包,但只有目标主机会对该数据进行处理
局域网内传输数据时,数据通常是通过广播或多播的方式发出。广播是将数据发送到局域网中的所有主机,多播是将数据发送到局域网中指定的一组主机。当数据包通过广播或多播的方式发出时,局域网中的所有主机都能收到该数据包。因为局域网是一个共享的物理网络。
即使所有的数据都能收到该数据包,实际上只有目标主机会对该数据包进行处理。每个主机收到数据包时会检测数据包的目的地址,如果匹配自身的地址,就会进行处理,否则丢弃。
在局域网中传输数据时,若只想要特定的主机才能收到,可以使用单播的方式发出。
在网络数据发送时,什么是数据碰撞,怎么避免和处理?
在以太网等共享介质的网络中,多个主机可同时发送数据包到同一个物理网络中。多个主机同时发送数据时,由于信号传播的延迟以及网络中传输介质有限宽带等原因,数据包可能会在传输途中发送碰撞,导致数据包损坏或者丢失。
为了避免数据碰撞,以太网等共享介质的网络采用一种称为 CSMA/CD(Carrier Sense Multiple Access with Collision Detection)的协议。使用该协议的主机会在发送数据前监听网络中是否有其它主机正在发送数据。如检测到有主机正在发送数据,发送主机会等待特定的时间之后再次尝试发送,以减少碰撞。现在的以太网采用了全双工的通信和交换机技术。全双工通信允许同时发送和接收操作,交换机则可以将数据包从一个端口发送到另一个端口,避免了数据碰撞的发生。
局域网中的碰撞攻击
在这种攻击中,攻击者会发送大量的垃圾数据到局域网中,导致其它主机发送的有效数据与这些垃圾数据发生碰撞,从而造成网络瘫痪和阻塞。为了绕过 “碰撞避免” 算法,攻击者可能会采用多种手段。
碰撞攻击可能对局域网造成严重的影响,它会导致网络瘫痪或拥塞。为了防范碰撞攻击,可以采用很多措施,如:使用入侵检测系统、实施流量检测等。
网络主机中的 MAC 地址
MAC 地址(Media Access Control Address)是网络中的一个唯一标识符,用于在局域网中识别和寻址网络设备。
在局域网中,每个主机都可以通过 MAC 地址来判断数据包是不是发给自己的。每个主机都有一个 MAC 地址,该地址在网络接口卡(INC)中预先配置。当一个主机收到一个 MAC 数据帧时,它会检测该数据帧的目的 MAC 地址字段。如果与自己的 MAC 地址相匹配,则该主机继续处理该数据包,若不匹配,则丢弃。
MAC 地址是在数据链路层进行识别和判断的。在网络层和传输层以上的协议中,主机会使用 IP 地址和端口号来确定数据是不是发给自己的。MAC 地址是在局域网范围内使用的,在不同的局域网之间是无法直接进行传输的。在通过路由器连接到不同的网络情况下,数据包会被封装成 IP 数据包,然后使用 IP 地址寻址和路由。
IP地址的存在屏蔽了网络底层实现的差异
IP地址是在网络层使用的,它提供了一种统一的寻址方式,使得不同的网络可以通过IP地址进行通信。使用IP地址,网络设备可以将数据包传输到目标设备,而不需要关心网络底层的实现细节。
下图为数据分用的过程:
IP协议有两个版本,IPv4 和 IPv6。在没有特殊说明的情况下,通常所说的 IP 地址都是 IPv4。