【计算机网络】网络数据传输流程详解

本文涉及的产品
数据传输服务 DTS,数据同步 small 3个月
推荐场景:
数据库上云
数据传输服务 DTS,数据迁移 small 3个月
推荐场景:
MySQL数据库上云
数据传输服务 DTS,数据同步 1个月
简介: 上一节内容已经介绍了IP地址用来定位网络中唯一的一台主机,它是一个32位的二进制数,通常用“点分十进制”来表示即a.b.c.d表示(a,b,c,d为0~255之间的数),那么它是怎样定位一台主机呢?

1. 基础知识

1.1 IP地址

上一节内容已经介绍了IP地址用来定位网络中唯一的一台主机,它是一个32位的二进制数,通常用“点分十进制”来表示即a.b.c.d表示(a,b,c,d为0~255之间的数),那么它是怎样定位一台主机呢?


IP地址的组成


网络号:标识网段,保证相互连接的两个网段具有不同标识

主机号:标识主机,同一网段内,不同的主机具有相同的网络号,但是主机号必须不同

主机号和网络号的划分


通过合理的设置网络号和主机号,就可以保证在相互连接的网络中,每台主机的IP地址都是唯一的,那么主机号和网络号是如何划分的呢?


有一种划分网络号和主机号的方案,把IP地址分为五类,但是常用的为以下三类:

image.png

各类地址的表示范围:

分类 范围 适用网络 网络数量 主机最大连接数
A类 0.0.0.0~127.255.255.255 大型网络 126 2^24-2
B类 128.0.0.0~191.255.255.255 中等规模网络 16384 2^16-2=65534
C类 192.0.0.0~223.255.255.255 小型网络 约209万 2^8-2=254


说明:最大主机连接数减去2是因为减去了两个特殊的IP地址


特殊的IP地址


IP地址全为0,成了网络号,代表这个局域网

IP地址全为1,成了广播地址,用于给同一个链路中相互连接的所有主机发送数据报

127.*用于本机环回测试,通常是127.0.0.1,本机环回测试主要用于本机到本机的网络通信

1.2 子网掩码

子网掩码的格式 :


子网掩码的格式和IP地址的格式类似,也是一个32位的二进制数,通常用“点十进制”表示,左边位网络位,用二进制数1表示,1的数目等于网络位的长度,右边为主机位,用二进制数0表示,0的个数为主机位的长度


子网掩码的作用


划分ABC三类IP地址的子网

例:一个B类IP地址为191.110.0.0,使用子网掩码255.255.128.0来划分子网

image.png


进行网络通信时,子网掩码结合IP地址可以计算出网络号和主机号(网络号和主机号都为划分子网后的),一般用于判断目的IP与本机IP是否为一个网段

划分子网后网络号和主机号的计算方式:


IP地址与子网掩码按位与,得到的就是网络号

子网掩码按位取反,再与IP地址按位与,得到的就是主机号

例:

image.png


1.3 MAC地址

MAC地址的概念


MAC地址(Media Access Control Address),用于标识网络硬件设备的物理地址


主机具有一个或多个网卡,路由器具有两个或两个以上网卡,其中每个网卡都有唯一的MAC地址

网络通信即网络数据传输,本质是网络硬件设备将数据发送到网卡上,或以网卡来接收数据

网卡出厂时,MAC地址就已经确定了不能修改

MAC地址的格式:长度为48位,一般用16进制数字加冒号的形式表示,如:08:00:27:03:fb:19


特殊的MAC地址


发送一个广播数据报,表示对同网段所有主机发送数据报,广播数据报的MAC地址:FF:FF:FF:FF:FF:FF


一跳一跳的网络传输


以下为主机B传输数据到主机C经过的网络设备:

image.png


上述经过的网络设备:


主机:配有IP地址,但是不进行路由控制

路由器:配有IP地址,又可以进行路由选择

注意:集线器和二层交换机不会对数据报封装和分用,不算在下一跳设备


IP地址与MAC地址的区别


IP地址描述的是数据传输的起点和终点,即从源主机到目的主机

MAC地址描述的是路途上的每一个区间的起点和终点,即每一跳的起点和终点

比如:唐僧西天取经,IP地址为长安和西天,MAC地址为中途的五指山,女儿国等


1.4 网络传输遇到的设备

1.4.1 集线器

集线器工作在物理层,发送到集线器的数据,集线器将数据复制并转发到其他所有端口


端口:分为物理端口和逻辑端口,物理端口指硬件设备如集线器,交换机,路由器等的物理端口,逻辑端口指进程绑定的端口,属于操作系统虚拟的一个0~65535的数字

image.png


1.4.2 交换机

交换机如何工作


交换机工作在数据链路层,交换机内部维护了一张MAC地址转换表:


MAC地址转换表主要记录MAC地址与端口之间的映射(端口指交换机后边的物理端口)

主机连接到交换机,主机发送数据的时候,交换机可以记录该主机的MAC地址与端口信息  


发送到交换机的数据(此时数据中包含了目的MAC),根据MAC地址转换表,通过目的主机的MAC地址查找到对应端口,交换机只需要将数据转发到对应端口即可

image.png



根据MAC地址找不到端口怎么办?


但是通过目的主机MAC找对应端口可能存在找不到的情况,如果找不到,交换机设置数据报目的MAC为为广播地址FF:FF:FF:FF:FF:FF,发送到其他所有端口,(因为数据中有目的IP,目的IP的主机返回返回自己的MAC地址),待目的主机返回响应后,交换机再记录该主机MAC与端口的映射信息


这个发广播数据报的过程类似在群里喊话:


a:张三在吗?这里有你的快递

张三:在的呢,在x楼xxx房间

这样就能将快递正确的交给张三


1.4.3 主机

在发送数据时,发送端主机都会先根据网络分层对数据进行封装

image.png

源主机与目的主机是否在同一个网段对应下一跳设备也有所不同:


当源主机与目的主机在同一个网段时,下一跳设备就是目的主机

当源主机与目的主机不在同一个网段时,发送端主机是无法知道目的主机在哪(不知道目的主机的MAC,所以喊话的方式也没有用了),此时会设置下一跳设备为网关设备,后续参考下面ARP寻址和路由器内容

关于网关设备,这里简单理解为不同网段的网络互联时,需要使用网关设备,通常网关设备为路由器


从上到下封装时,封装到数据链路层,下一跳设备的IP都能获取到,但是MAC地址可能不知道,此时就需要使用ARP寻址


ARP寻址


ARP协议介于数据链路层和网络层,ARP协议建立了IP地址与MAC地址的映射关系,在数据链路层,寻找下一跳MAC地址的过程称为ARP寻址


ARP寻址的过程 :


主机和路由器中都保存了一张ARP缓存表,通过IP地址可以找到MAC地址,如果找不到MAC地址,则发送ARP广播数据报,目的MAC为广播地址,询问下一跳设备的MAC地址,过程类似如下喊话:

image.png

1.4.5 路由器

路由器的介绍


路由器作为网关,可以划分公网和局域网,某些路由器还可以将局域网划分为多个子网(不同网段),公网端口为WAN口,为单独的网卡,具有公网IP地址和公网MAC地址,多个子网由局域网端口LAN口划分,每个端口都有单独的网卡,具有该网段IP地址和MAC地址


说明:企业级的路由器才能划分子网,家用的路由器不可以划分


路由器功能概述


局域网划分的多个子网,可直接通过ARP寻址找到局域网任意的一台主机


局域网内的主机发送数据到公网主机时,需要基于NAPT协议将局域网主机的IP地址和端口号转换为路由器公网的IP和端口号(指路由器中运行程序的端口)


路由器的路由功能能在复杂的网络结构中找出一条通往终点的路线,类似规划路线,找到更快到达目的的路线


路由器的功能总结


可以将局域网划分为多个子网

具有ARP缓存表,记录局域网所有主机的IP和MAC,根据IP地址能找到MAC地址

具有WAN口,绑定公网IP,如果目的主机不在局域网内,需要使用NAPT协议将局域网主机的IP和端口转换为公网的IP和端口

路由功能,在复杂的网络结构中,找到最快通往目的路线

1.5 冲突域

主机之间通过网络设备的物理端口,网线相连时,两个主机在同一时刻发送数据报,如果存在冲突,则该网络范围就为一个冲突域


集线器的冲突域


集线器的所有端口为一个冲突域,因为集线器是将数据转发到所有端口,如果有两个数据要同时转发,就会出现冲突

image.png

 


交换机的冲突域


交换机的一个端口为一个冲突域,因为交换机是将数据转发到对应的端口,两个数据转发到不同端口不存在冲突,但是转发到同一个端口就存在冲突

image.png


1.6 广播域

广播指某个网络中的主机向其他所有主机发送数据(IP,MAC地址设置为广播地址),这个数据所能传播到的范围称为广播域


集线器的广播域


集线器接收到广播数据报,转发到所有端口,集线器的所有端口为一个广播域

image.png

 


交换机的广播域


交换机接收到广播数据报,会转发到其他所有的端口

image.png



路由器的广播域


路由器可以隔离广播域,路由器某个LAN口网卡接收到广播域,如果发现是同网段,则丢弃,即广播数据不会扩散到路由器以外

image.png



2. 局域网数据传输流程

2.1 集线器相连

集线器相连的网络数据传输流程:


发送端主机发送数据时,首先要根据协议分层从上到下对数据进行封装

封装到数据链路层时,可能不知道目的主机MAC,所以要先进行ARP寻址

发送端主机在本机的ARP转换表中根根据目的IP查找对应的MAC地址

若找到了,则在以太网帧头中设置目的MAC,并发送数据

若没有找到目的MAC,则将发送ARP广播请求,让目的主机告诉它的MAC地址是多少

知道目的MAC后,发送端主机更新ARP缓存表

在以太网帧头中设置目的MAC,并发送数据

集线器将数据转发到所有端口

所有收到数据的主机看是否是给自己发的,若不是则直接丢弃,若是则从下到上进行分用,最后返回响应数据

返回的流程与发送的流程相同,只是源IP目的IP更换,源端口目的端口更换

2.2 交换机相连

交换机相连的网络数据传输流程:


发送端主机发送数据时,首先要根据协议分层从上到下对数据进行封装

封装到数据链路层时,可能不知道目的主机MAC,所以要先进行ARP寻址

发送端主机在本机的ARP转换表中根根据目的IP查找对应的MAC地址

若找到了,则在以太网帧头中设置目的MAC,并发送数据

若没有找到目的MAC,则将发送ARP广播请求,让目的主机告诉它的MAC地址是多少

知道目的MAC后,发送端主机更新ARP缓存表

在以太网帧头中设置目的MAC,并发送数据

交换机内部维护了MAC地址转换表,根据目的MAC找对应端口

若找到了,将数据转发到对应端口

若没有找到,则发送广播数据报,待目的主机返回响应后记录目的主机MAC与端口的信息转发到目的MAC地址对应端口

目的主机接收到数据后,从下到上进行分用返回响应数据

返回的流程与发送的流程相同,只是源IP目的IP更换,源端口目的端口更换

2.3 交换机与路由器相连

交换机与路由器相连的网络数据传输流程:


源主机发送数据时从上到下对数据进行封装,在封装的时候先通过子网掩码计算源主机和目的主机是否在同一个网段

若在同一个网段,数据传输流程与上述交换机的传输流程相同

若不在同一个网段,下一跳的设备就为网关

找到与源主机相连的网关设备IP,进行ARP寻址,找到对应网关的MAC地址,将目的MAC设置为网关MAC地址,再发送数据

交换机根据MAC地址转换表查找网关MAC对应的端口,并向该端口发送数据

网关设备也就是路由器对数据从下到上进行分用,先获取到目的主机IP,通过ARP寻址找到IP对应MAC地址

路由器对数据进行封装,与源主机封装数据不同的是,源MAC修改为路由器MAC,目的MAC为目的主机MAC,然后发送数据

待目的主机接收到数据后,从下到上进行分用,然后返回响应数据

返回的流程与发送的流程相同,只是源IP目的IP更换,源端口目的端口更换


3. 广域网数据传输流程(重点)

广域网数据传输流程:这里以在浏览器地址栏输入www.baidu.com后数据的传输流程为例说明


www.baidu.com为域名,通过DNS协议将该域名转化为IP地址

源主机从上到下进行封装数据,首先通过子网掩码计算源主机和目的主机是否在同一个网段

在同一个网段,下一跳设备就是目的主机,在不同网段,下一跳设备就是网关设备即路由器

通过源主机的ARP缓存表,找到网关IP对应的MAC,将目的MAC设置为网关MAC,再发送数据

交换机接收到数据,基于MAC转换表通过网关MAC找到对应的端口,往该端口发送数据

网关即路由器接收到数据, 先从下到上分用,再基于NAPT协议将源IP和源端口转化为路由器公网的IP和端口

基于路由功能,根据目的IP,计算出下一跳是哪个设备距离目的主机最近,获取到IP

根据路由器ARP缓存表,找到下一跳设备IP对应的MAC地址

路由器从上到下封装,修改源IP为公网IP,源端口为公网端口,源MAC为路由器MAC,目的MAC为下一个设备的MAC

途中经过的设备从下到上分用,基于路由技术计算路线,获取下一跳设备的IP,通过ARP寻址找到IP对应的MAC,封装数据发送下一个设备

目的主机接收到,从下到上分用,返回响应数据

返回的流程与发送的流程相同,只是源IP目的IP更换,源端口目的端口更换

文章知识点与官方知识档案匹配,可进一步学习相关知识


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
Sqoop 企业级大数据迁移方案实战
Sqoop是一个用于在Hadoop和关系数据库服务器之间传输数据的工具。它用于从关系数据库(如MySQL,Oracle)导入数据到Hadoop HDFS,并从Hadoop文件系统导出到关系数据库。 本课程主要讲解了Sqoop的设计思想及原理、部署安装及配置、详细具体的使用方法技巧与实操案例、企业级任务管理等。结合日常工作实践,培养解决实际问题的能力。本课程由黑马程序员提供。
相关文章
|
4月前
|
监控 网络协议 安全
|
28天前
|
存储 网络协议 物联网
C 语言物联网开发之网络通信与数据传输难题
本文探讨了C语言在物联网开发中遇到的网络通信与数据传输挑战,分析了常见问题并提出了优化策略,旨在提高数据传输效率和系统稳定性。
|
2月前
|
机器学习/深度学习 数据采集 算法
目标分类笔记(一): 利用包含多个网络多种训练策略的框架来完成多目标分类任务(从数据准备到训练测试部署的完整流程)
这篇博客文章介绍了如何使用包含多个网络和多种训练策略的框架来完成多目标分类任务,涵盖了从数据准备到训练、测试和部署的完整流程,并提供了相关代码和配置文件。
64 0
目标分类笔记(一): 利用包含多个网络多种训练策略的框架来完成多目标分类任务(从数据准备到训练测试部署的完整流程)
|
2月前
|
存储 网络协议 Java
【网络】UDP回显服务器和客户端的构造,以及连接流程
【网络】UDP回显服务器和客户端的构造,以及连接流程
60 2
|
2月前
|
缓存 监控 网络协议
计算机网络的常用的网络通信命令(Windows)
本文介绍了网络技术中常用的命令,如ping用于检测网络连通性,ipconfig查看TCP/IP配置,netstat监控网络状态,arp显示和修改ARP缓存,at安排任务执行,tracert追踪路由,以及nbtstat获取NetBIOS信息。
43 1
|
2月前
|
安全 区块链 数据库
|
2月前
|
网络协议 网络架构
【第三期】计算机网络常识/网络分层模型与数据包封装传输过程
【第三期】计算机网络常识/网络分层模型与数据包封装传输过程
54 0
|
3月前
|
网络协议 C语言
C语言 网络编程(十一)TCP通信创建流程---服务端
在服务器流程中,新增了绑定IP地址与端口号、建立监听队列及接受连接并创建新文件描述符等步骤。`bind`函数用于绑定IP地址与端口,`listen`函数建立监听队列并设置监听状态,`accept`函数则接受连接请求并创建新的文件描述符用于数据传输。套接字状态包括关闭(CLOSED)、同步发送(SYN-SENT)、同步接收(SYN-RECEIVE)和已建立连接(ESTABLISHED)。示例代码展示了TCP服务端程序如何初始化socket、绑定地址、监听连接请求以及接收和发送数据。
|
3月前
|
C语言
C语言 网络编程(七)UDP通信创建流程
本文档详细介绍了使用 UDP 协议进行通信的过程,包括创建套接字、发送与接收消息等关键步骤。首先,通过 `socket()` 函数创建套接字,并设置相应的参数。接着,使用 `sendto()` 函数向指定地址发送数据。为了绑定地址,需要调用 `bind()` 函数。接收端则通过 `recvfrom()` 函数接收数据并获取发送方的地址信息。文档还提供了完整的代码示例,展示了如何实现 UDP 的发送端和服务端功能。
|
3月前
|
网络协议 C语言
C语言 网络编程(十)TCP通信创建流程---客户端
在TCP通信中,客户端需通过一系列步骤与服务器建立连接并进行数据传输。首先使用 `socket()` 函数创建一个流式套接字,然后通过 `connect()` 函数连接服务器。连接成功后,可以使用 `send()` 和 `recv()` 函数进行数据发送和接收。最后展示了一个完整的客户端示例代码,实现了与服务器的通信过程。