1. 什么是网络
随着时代的发展,越来越需要计算机之间互相通信,共享软件和数据,即以多个计算机协同⼯作来完成业务,于是有了网络互连。
网络互连:将多台计算机连接在⼀起,完成数据共享。
数据共享本质是网络数据传输,即计算机之间通过网络来传输数据,也称为网络通信。
根据网络互连的规模不同,可以划分为局域网和广域网。
1.1 局域网
局域网(Local Area Network,简称LAN)是指在一个小范围内,例如学校、企业或家庭中的计算机和其他网络设备通过高速传输媒介连接起来的计算机网络。局域网内的主机之间能⽅便的进行网络通信,又称为内网;局域网和局域网之间在没有连接的情况下,是无法通信的。
局域网的组成方式:
- 基于网线直连:
基于网线直连是一种简单的局域网组建方式,只需要将计算机和其他设备通过网线直接连接在一起。这种方式适合小型局域网,例如家庭或小办公室环境。每个设备都可以直接与其他设备进行通信和数据传输。 - 基于集线器组建:
基于集线器组建的局域网使用一个集线器(Hub)作为中心节点,将所有计算机和其他设备连接在一起。集线器接收到的数据包会被广播给所有连接的设备。这种方式适用于较小规模的局域网,但由于数据包的广播特性,可能会影响网络性能。 - 基于交换机组建:
基于交换机组建的局域网使用交换机(Switch)作为中心节点,将所有计算机和其他设备连接在一起。交换机具有智能的数据包转发功能,可以根据设备的MAC地址来选择性地将数据包转发给目标设备。相比集线器,交换机能够提供更高的网络性能和较低的冲突率。 - 基于交换机和路由器组建:
基于交换机和路由器组建的局域网结构更为复杂,但也更加灵活和可扩展。交换机用于连接局域网内的设备,而路由器(Router)则用于连接不同的局域网或连接到广域网。通过路由器,不同的局域网可以相互通信和共享资源。这种方式适用于大型企业、学校等需要多个局域网之间进行联网的场景。
名词解释:
- 集线器(Hub):
集线器是一种被动式网络设备,可以连接多个计算机或其他网络设备。当一个设备向集线器发送数据时,集线器会将这个数据包广播到所有连接在它上面的设备,每个设备都需要检查MAC地址来判断数据包是否属于自己。由于集线器采用广播方式传输数据,因此可能会出现数据冲突和重复,影响网络性能。 - 交换机(Switch):
交换机是一种智能型网络设备,可以连接多个计算机或其他网络设备,并且能够根据MAC地址来选择性地将数据包转发给目标设备。交换机采用单播方式传输数据,只有目标设备能够接收到数据包,避免了数据冲突和重复,提高了网络性能。交换机还可以实现虚拟局域网(VLAN)等高级网络功能。 - 路由器(Router):
路由器是一种网络设备,用于连接不同的局域网或连接到广域网。路由器可以根据IP地址来选择最佳的数据传输路径,实现不同网络之间的通信和资源共享。路由器还可以实现端口转发、网络地址转换(NAT)等高级网络功能。
1.2 广域网
广域网(Wide Area Network,简称WAN)通过路由器,将多个局域网连接起来,在物理上组成很⼤范围的网络,就形成了广域网。广域网内部的局域网都属于其子网。
2. IP地址与端口号
网络互连的目的是进行网络通信,也即是网络数据传输,更具体⼀点,是网络主机中的不同进程间,基于网络传输数据。
那么,在组建的网络中,如何判断到底是从哪台主机,将数据传输到那台主机呢?这就需要使用IP地址来标识。
IP地址: IP地址是互联网中用于标识主机(计算机或其他网络设备)的唯一数字标识符。它由32位或128位二进制数组成,用点分十进制表示(IPv4)或用冒号分隔的十六进制表示(IPv6)。IP地址的作用是在网络中准确定位并寻找目标主机。
端口号: 端口号是一种用于标识特定应用程序或服务的数字标识符。它是一个16位的整数,范围从0到65535,被分为三个范围:知名端口(0-1023),注册端口(1024-49151)和动态/私有端口(49152-65535)。通过端口号,计算机可以将接收到的数据包交给正确的应用程序或进程。
3. 协议
有了IP地址和端口号,可以定位到网络中唯⼀的⼀个进程,但还存在⼀个问题,网络通信是基于二进制0/1数据来传输,如何告诉对方发送的数据是什么样的呢?网络通信传输的数据类型可能有多种:图片,视频,文本等。同⼀个类型的数据,格式可能也不同,如发送⼀个文本字符串“好!”:如何标识发送的数据是文本类型,及文本的编码格式呢?基于网络数据传输,需要使用协议来规定双方的数据格式。
3.1 概念
协议,网络协议的简称,网络协议是网络通信(即网络数据传输)经过的所有网络设备都必须共同遵从的⼀组约定、规则。如怎么样建立连接、怎么样互相识别等。只有遵守这个约定,计算机之间才能相互通信交流。协议(protocol)最终体现为在网络上传输的数据包的格式。
3.2 协议分层
协议分层是指将计算机网络通信过程划分为若干个层次,每个层次负责不同的功能,各层之间通过协议进行交互和传输,最终完成数据的传输和接收。协议分层的主要作用包括以下几点:
- 简化网络设计和管理:通过将网络通信过程划分为多个层次,可以将网络复杂度降低为多个简单的组件,便于网络的设计、实现和管理。
- 促进协议的标准化:每个层次负责不同的功能,不同层次的协议可以独立地设计和优化,有助于促进协议的标准化和统一。
- 提高网络的可靠性和性能:通过分层设计,可以使网络设备不同层次之间的交互更加清晰和明确,有助于提高网络的可靠性和性能。
- 支持灵活的网络架构:协议分层可以支持不同类型的网络架构,例如星型网络、环形网络、网状网络等,使网络更加灵活和可扩展。
3.3 OSI七层模型
OSI(Open Systems Interconnection)七层模型是国际标准化组织(ISO)制定的通信协议参考模型,用于描述计算机网络中不同层次之间的功能和交互关系。该模型将计算机网络通信过程划分为七个层次,每个层次负责不同的功能。以下是对每个层次的详细介绍:
- 应用层(Application Layer):
功能:为用户提供网络服务和应用程序接口。
特点:包括各种应用协议(如HTTP、FTP、SMTP等),实现用户与网络之间的交互。 - 表示层(Presentation Layer):
功能:处理数据的格式和表示,实现数据的加密、压缩和转换。
特点:提供数据格式转换、数据加密和数据压缩等功能。 - 会话层(Session Layer):
功能:建立、管理和终止会话,实现进程之间的通信和同步。
特点:提供会话控制、对话管理和同步点等。 - 传输层(Transport Layer):
功能:提供端到端的可靠数据传输和错误恢复机制。
特点:定义了传输协议(如TCP和UDP),实现数据分段、流量控制和拥塞控制。 - 网络层(Network Layer):
功能:实现不同网络之间的数据传输和路由选择。
特点:通过IP地址标识设备和网络,使用路由算法选择最佳路径进行数据传输。 - 数据链路层(Data Link Layer):
功能:提供可靠的数据传输,将比特流划分为数据帧,并进行差错检测和纠正。
特点:定义了数据帧的结构、物理地址(MAC地址)和帧同步等。 - 物理层(Physical Layer):
功能:负责传输比特流,通过物理介质传输数据。
特点:定义了物理接口的标准和电气特性,例如传输速率、电压等。
OSI七层模型提供了一个通用的框架,可以帮助理解和设计计算机网络中不同层次的功能和交互关系。每个层次都有自己独特的责任和功能,通过协议在不同层次之间进行交互和传输,最终完成数据的传输和应用。
3.4 TCP/IP 五层模型
OSI七层模型既复杂又不实用,所以OSI七层模型没有落地、实现。实际组建网络时,只是以OSI七层模型设计中的部分分层,即TCP/IP五层模型来实现。
TCP/IP是⼀组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇。
TCP/IP通讯协议采⽤了5层的层级结构,每⼀层都呼叫它的下⼀层所提供的网络来完成自己的需求。
- 应用层:负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。我们的网络编程主要就是针对应用层。(管理传输的数据使用)
- 传输层:负责两台主机之间的数据传输。如传输控制协议(TCP),能够确保数据可靠地从源主机发送到目标主机。(管理通信的起点终点)
- 网络层:负责地址管理和路由选择。例如在IP协议中,通过IP地址来标识一台主机,并通过路由表的方式规划出两台主机之间的数据传输的线路(路由)。路由器(Router)工作在网络层。(管理通信中的路线规划)
- 数据链路层:负责设备之间的数据帧的传送和识别。例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作。有以太网、令牌环网,无线LAN等标准。交换机(Switch)工作在数据链路层。(管理相邻节点之间的通信)
- 物理层:负责光/电信号的传递方式。比如现在以太网通用的网线(双绞线)、早期以太网采用的同轴电缆(现在主要用于有线电视)、光纤,现在的Wi-Fi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等。集线器(Hub)工作在物理层。(网络通信的基础设施)
⽹络设备所在分层:
- 对于⼀台主机,它的操作系统内核实现了从传输层到物理层的内容,也即是TCP/IP五层模型的四层;
- 对于⼀台路由器,它实现了从⽹络层到物理层,也即是TCP/IP五层模型的下三层。
- 对于⼀台交换机,它实现了从数据链路层到物理层,也即是TCP/IP五层模型的下两层。
- 对于集线器,它只实现了物理层。
注意我们这里说的是传统意义上的交换机和路由器,也称为二层交换机(工作在TCP/IP五层模型的下两层)、三层路由器(工作在TCP/IP五层模型的下三层)。
随着现在网络设备技术的不断发展,也出现了很多三层或四层交换机、四层路由器。我们以下说的网络设备都是传统意义上的交换机和路由器。
3.5 封装和分用
不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报(datagram),在链路层叫做帧(frame)。应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装(Encapsulation)。首部信息中包含了一些类似于首部有多长,载荷(payload)有多长,上层协议是什么等信息。数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,根据首部中的"上层协议字段"将数据交给对应的上层协议处理。
接下来简单模拟一下数据的封装分用的过程:
假设场景:A 通过 QQ 给 B 发送了一个hello
1. 应用层:
QQ接收到A输入的hello,就会把这个字符串按照构QQ内部的应用层协议造成一个应用层的数据包,这个数据包的格式就是这个协议约定好了的。(应用层的协议往往是程序员自己定义的)
现在我们假设这个格式为:发送方QQ号;接收方QQ号;发送时间;发送内容。
于是就可以构造出数据包:1234;5678;2024/01/20 15:20;hello
接下来应用程序就会调用操作系统提供的API把这个数据交给传输层。
2. 传输层:
传输层会把接收到的数据包,看作一个整体再构造成一个传输层的数据包。传输层涉及到的主要协议有 TCP和UDP(后续会详细说明),这里假定使用UDP来通信,这里就会构成一个UDP的数据包。
编辑
UDP报头提供了源端口号,目的端口号,长度,校验等重要信息。
构建好数据包之后,就会调用下一层协议即网络层提供的API把这个数据包交给网络层了。
3. 网络层
网络层的核心协议是IP协议
同样的,这里以IP协议,再把接收到的数据包整体作为一个载荷,拼接上IP协议的报头,构造成 IP数据包。 编辑
IP报头中包含了源IP地址和目的IP地址,用于唯一标识数据的发送方和接收方
然后IP协议调用数据链路层的API把数据交给数据链路层。
4. 数据链路层
数据链路层涉及到的核心协议是 以太网
这里会把接收到的数据包看作整体拼接上一个帧头和帧尾,构成一个以太网数据帧。 编辑
最后把这个数据帧交给物理层
5. 物理层
把以太网数据帧的二进制信号转换为 光信号/电信号/电磁波 发送出去
不考虑中间过程,假设B的网卡已经接收到了数据,这个数据需要处理后才能呈现出来,这个处理的过程就叫分用。
1. B的物理层接收到了光信号/电信号/电磁波,就会把这些数据转为数字信号,(二进制)得到一个以太网数据帧,进一步把这个数据帧交给数据链路层处理
2. 数据链路层按照以太网数据包的格式解析出其中的载荷,再交给上层协议,即网络层
3. 网络层同样按照IP协议的格式进行解析,取出载荷再交给上层协议
4.传输层同样按照UDP协议解析出载荷交给应用层
5.应用层就按照内部的协议解析出了数据,在B的聊天窗口中弹出消息和时间
分用的过程就是封装的逆向过程