计算机网络是一个将众多分散的计算机,通过通信设备与线路连接起来的,实现资源共享与信息传递的系统。不同的设备通过网络连接在一起,完成数据共享。计算机网络可以简单分为局域网与广域网。
局域网与广域网
不同的计算机之间通过交换机(switch)和路由器进行连接,就组成了一个局域网。交换机是一种网络设备,用于在局域网中连接多个设备,如计算机、打印机、服务器等,并在它们之间转发数据。路由器(Router)也是一种网络设备,用于连接不同的网络,并在它们之间转发数据包。
局域网通常覆盖较小的地理区域,如一个办公室、一栋大楼或一个校园。其传输速率通常较高,可以达到10Mbps到10Gbps不等。局域网的建立和维护成本也相对较低,其主要用于组织内部的计算机和设备之间的通信。局域网内部的设备也只能直接与内部的计算机通信。
在大型组织中,可能会有多个局域网需要互联。路由器可以用来连接这些局域网,允许不同网络之间的通信,这就组成了一个广域网。局域网" 和 "广域网" 只是一个相对的概念. 比如, 我国的广域网, 也可以看做一个比较大的局域网。
网络协议
计算机之间的传输媒介是光信号和电信号. 通过 "频率" 和 "强弱" 来表示 0 和 1 这样的信息. 要想传递各种不同的信 息, 就需要约定好双方的数据格式。网络协议就是约定的数据格式。
网络协议定义了数据格式和传输规则,确保数据能够正确地在网络中的不同设备之间传输。协议涵盖了从物理层到应用层的多个层面。 是计算机网络中不可或缺的组成部分,它们确保了不同类型和制造商的设备能够互相通信,支持了互联网和各种网络服务的运行。
- 计算机生产厂商有很多;
- 计算机操作系统, 也有很多;
- 计算机网络硬件设备, 还是有很多;
- 如何让这些不同厂商之间生产的计算机能够相互顺畅的通信? 就需要有人站出来, 约定一个共同的标准, 大家都来遵守, 这就是网络协议。
数据的传输是一个复杂的过程。网络协议将网络通信分解为一系列的层次结构,每个层次处理特定的功能。
Q:为什么要分层
A:分层是计算机网络设计的核心原则,它将网络通信分解为多个简单的层次,将复杂问题分解为小问题,便于理解和解决。同时每层有明确的协议,确保不同设备间的兼容性。也易于维护**,**独立更新和修复特定层次,不影响其他层次。新技术可以轻松集成到适当的层次中。也隔离了故障。
OSI七层模型
OSI七层网络模型称为开放式系统互联参考模型, 是一个逻辑上的定义和规范,它把网络从逻辑上分为了7层.。每一层都有相关、相对应的物理设备,比如路由器,交换机。 OSI 七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输,它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整.。通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯。
OSI模型的分层方法使得网络设计、实施和故障排除更加系统化和模块化。每一层都可以独立于其他层进行开发和优化,同时每一层都为上一层提供服务。这种分层架构是现代网络通信的基础,并且对网络技术的发展产生了深远的影响。但它既复杂又不实用,现代网络通信主要采用的是TCP/IP模型。
TCP/IP模型
TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇. TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。
- 物理层: 负责光/电信号的传递方式. 比如现在以太网通用的网线(双绞 线)、早期以太网采用的的同轴电缆 (现在主要用于有线电视)、光纤, 现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决 定了最大传输速率、传输距离、抗干扰性等. 集线器(Hub)工作在物理层.
- 数据链路层: 负责设备之间的数据帧的传送和识别. 例如网卡设备的驱动、帧同步(就是说从网线上检测 到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作. 有以太 网、令牌环网, 无线LAN等标准. 交换机(Switch)工作在数据链路层.
- 网络层: 负责地址管理和路由选择. 例如在IP协议中, 通过IP地址来标识一台主机, 并通过路由表的方式规 划出两台主机之间的数据传输的线路(路由). 路由器(Router)工作在网路层.
- 传输层: 负责两台主机之间的数据传输. 如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到目标 主机.
- 应用层: 负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问 协议(Telnet)等. 我们的网络编程主要就是针对应用层.
一般而言 对于一台主机,它的操作系统内核实现了从传输层到物理层的内容, 对于一台路由器,,它实现了从网络层到物理层, 对于一台交换机, 它实现了从数据链路层到物理层,对于集线器, 它只实现了物理层;但是并不绝对,很多交换机也实现了网络层的转发。很多路由器也实现了部分传输层的内容(比如端口转发)。
网络中的地址管理
网络中的地址管理是确保每个设备在网络中具有唯一标识符的过程。
1. IP地址
IP协议有两个版本, IPv4和IPv6. 我们整个的课程, 凡是提到IP协议, 没有特殊说明的, 默认都是指IPv4
- IP地址是在IP协议中, 用来标识网络中不同主机的地址;
- 对于IPv4来说, IP地址是一个4字节, 32位的整数;
- 我们通常也使用 "点分十进制" 的字符串表示IP地址, 例如 192.168.0.1 ; 用点分割的每一个数字表示一个 字节, 范围是 0 - 255;
- 随着IPv4地址的耗尽,IPv6被引入以提供更多的地址空间。
- IPv6地址更长,提供几乎无限的地址数量,并支持更高效的网络配置和安全性。
2. MAC地址
- 每个网络接口卡(NIC)都有一个唯一的MAC地址,也称为物理地址或硬件地址。
- MAC地址用于局域网内设备的唯一标识,并且在数据链路层进行通信。
- MAC地址在网卡出厂时就确定了, 不能修改. mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址, 可 能会冲突; 也有些网卡支持用户配置mac地址).
3. 子网划分
- 子网划分是将一个大的IP地址空间划分为多个小的子网,以提高网络效率和管理性。
- 子网掩码用于定义网络中的IP地址哪些部分表示网络,哪些部分表示主机。
网络传输基本流程
要进行通信需要找到目标主机,在网络中如何确定目标主机呢?
判断网络段
首先路由器会通过将目标IP地址与本网络的子网掩码进行逻辑AND运算,确定目标地址是否属于同一网络段。
同一网络段
如果目标IP地址在局域网内,发送主机通过ARP获取目标的MAC地址,并直接发送数据包,数据包会被封装上目标设备的MAC地址。ARP请求会在局域网内广播,询问拥有特定IP地址的设备的MAC地址。拥有该IP地址的设备会响应ARP请求,提供其MAC地址。
每个网络设备都有一个唯一的MAC地址。交换机会查看数据帧中的目标MAC地址,并仅将数据帧转发到与该MAC地址相关联的端口。其他端口上的设备不会收到这个数据帧。交换机会学习每个端口连接的设备的MAC地址,并构建一个MAC地址表来优化数据帧的转发。
跨网段
如果目标IP地址不在局域网内,数据包被发送到连接到上级网络或互联网的路由。路由器根据其路由表中的信息来决定如何转发数据包。路由表包含目的网络和下一跳路由器的映射。
路由器将数据包转发到路由表指定的下一跳路由器,下一跳路由器再根据其路由表继续转发,直到数据包接近目标网络。当数据包到达目标网络的边缘路由器时,该路由器会识别出目的IP地址属于其直连的网络。如果两个局域网采用了不同的通信标准,路由器会在转发数据包时进行适当的转换。
最后,数据包被发送到目标网络,并由那里的设备接收。数据包将通过ARP解析目标MAC地址,然后交付给目标主机。
碰撞
在传统的有线以太网中,多个设备连接到同一个物理媒介(如双绞线、同轴电缆或光纤)上。当两个或多个设备在同一时间发送数据时,它们的信号会在传输介质上相互重叠,导致碰撞。
碰撞的影响:
- 数据损坏:碰撞会导致数据包损坏,使得接收方无法正确解析数据。
- 传输效率降低:发生碰撞后,发送的设备必须重新发送数据,这会降低网络的传输效率。
- 网络拥塞:频繁的碰撞会导致网络拥塞,影响整体网络性能。
碰撞检测和避免:
- 在传统的以太网中,CSMA/CD协议用于检测碰撞。
- 发送设备在发送数据前会检测传输介质是否空闲。
- 如果介质空闲,设备开始发送数据,并在发送过程中持续检测是否有碰撞发生。
- 如果检测到碰撞,设备会停止发送,等待随机时间后再次尝试发送。
- 在现代以太网中,使用交换机代替集线器可以大大减少碰撞的发生。
- 交换机会为每个连接的设备分配独立的传输路径,从而避免信号的直接碰撞。
碰撞是早期以太网技术中的一个主要问题,随着网络技术的发展,特别是在交换机和全双工通信的广泛应用下,碰撞在现代网络中已经变得相对罕见。
数据包封装和分用
- 不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报 (datagram),在链 路层叫做帧(frame).
- 应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装 (Encapsulation).
- 首部信息中包含了一些类似于首部有多长, 载荷(payload)有多长, 上层协议是什么等信息.
- 数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部, 根据首部中的 "上层协议字段" 将数据交给对应的上层协议处理.
下图为数据封装的过程
下图为数据分用的过程:
报头
报头是附加在数据包前面的控制信息。报头包含了确保数据包正确传输和处理所需的元数据。不同类型的网络层和协议有自己的报头结构,报头通常包含以下几类信息:
源地址:发送方的网络地址,如IP地址。
目的地址:接收方的网络地址,如IP地址。
序列号:用于确保数据包的顺序传输和重传机制。
端口号:用于区分发送到同一IP地址的不同服务或进程。
校验和 或CRC(循环冗余校验):用于错误检测。
协议类型:指示数据包中封装的是什么类型的数据,以及应该如何处理。
长度:数据包的长度信息。
控制位 或标志:用于指示特定的控制信息。
选项 或填充:用于协议的灵活性,可能包含额外的配置信息或对齐报头。
- 数据封装,实际就是不断给数据加上各种对应的报头,这些报头里面填充的就是对应的各种协议细节。
- 数据解包,实际就是不断从数据中提取对应的报头,并对提取出来的报头进行数据分析。
报头封装过程:
- 数据生成:在源主机的应用层生成数据。
- 传输层封装:传输层(如TCP或UDP)添加自己的报头。
- 网络层封装:网络层(如IP)添加网络层报头。
- 数据链路层封装:数据链路层(如以太网)添加数据链路层报头和尾部。
- 物理层传输:物理层将数据链路层封装的数据转换为电信号或光信号进行传输。
报文分用:
在接收方,相应的层会解析报头中的信息,以确定如何正确处理数据包。例如,传输层会根据端口号将数据分用到正确的进程。
报头是网络通信中不可或缺的部分,它们使得复杂的网络系统能够高效、可靠地传输和处理数据。