计算机网络与Internet基本概念
中等13计算机网络与Internet:就像全球最大的邮局系统
你有没有想过,当你在浏览器输入“baidu.com”,网页是怎么瞬间出现在屏幕上的?其实,计算机网络就像我们生活中的邮局系统,而Internet就是连接全世界电脑的“超级邮局”。今天我们用寄信和快递的比喻,轻松搞懂这些概念,再用C++代码模拟一下数据传输的过程。
关键概念:IP地址、域名、路由器
1. IP地址——门牌号
每台接入网络的设备(电脑、手机、智能手表)都有一个唯一的IP地址,就像每家每户的门牌号。你要寄信,必须写上收件人的地址;网络传数据,必须知道目标设备的IP地址。
- 例子:
192.168.1.1是一台电脑的IP地址,10.0.0.1是另一台电脑的IP地址。 - 注意:IP地址有点像电话号码,分为不同的段,具体含义我们以后学。
2. 域名——好记的昵称
IP地址是一串数字,很难记住(比如 142.250.80.14 是谷歌?太难了)。所以人们给IP地址起了域名,比如 baidu.com、google.com。域名就像给你的好朋友起个昵称“小明”,不用记他的电话号码。
- 当你在浏览器输入域名,电脑会通过DNS服务器(类似电话簿)查到对应的IP地址,再连接过去。
3. 路由器——邮局中转站
你的数据不会直接飞到目标电脑,中间要经过很多路由器。路由器就像邮局的分拣员,看到数据包上的目标地址,就把它转发到下一站。
- 比如你从北京寄信到上海,信会先到北京邮局,再到南京邮局,最后到上海邮局。
- 路由器也有自己的IP地址,它们相互配合,找到最快的路径。
4. 数据包——信封里的信
你发送的消息会被切分成小块,每块加上源地址、目标地址等信息,变成一个个数据包(就像把长信分成几页,每页都写上收件人)。多个数据包可能走不同路线,最后在目的地重新组合。
- 这就像发快递:一个大箱子拆成几个小包裹,分别寄出,到了再拼起来。
用C++模拟一次网络传输
虽然我们写的程序不能真的联网,但可以模拟过程:发送者把消息放到“数据包”里,路由器帮忙转发,接收者收到。下面这段代码就演示了最简化的流程。
#include <iostream>
#include <string>
using namespace std;
int main() {
// 定义要发送的消息
string message = "Hello, 世界!";
// 发送者的IP地址(模拟)
string sender = "192.168.1.1";
// 接收者的IP地址(模拟)
string receiver = "10.0.0.1";
cout << "发送者 " << sender << " 正在发送:\"" << message << "\"" << endl;
// 这里模拟路由器的工作:输出转发信息
cout << "路由器将数据包转发到 " << receiver << endl;
// 接收者收到消息
cout << "接收者收到消息:" << message << endl;
return 0;
}
运行结果:
发送者 192.168.1.1 正在发送:"Hello, 世界!"
路由器将数据包转发到 10.0.0.1
接收者收到消息:Hello, 世界!
就像寄信时写好地址和内容,网络中的每个数据包也有源地址和目标地址。下次上网时,想想背后有一个庞大的“邮局”在工作!
常见错误(新手容易踩的坑)
-
把IP地址和域名搞混
- 错误:以为
baidu.com就是IP地址。 - 正确:域名需要先通过DNS解析成IP地址才能通信。
- 错误:以为
-
认为只有一个路由器
- 错误:觉得数据直接从一个设备跳到另一个设备。
- 正确:数据经过很多路由器,就像信要经过多个邮局中转。
-
忘记数据包可能丢失或乱序
- 错误:以为消息一次性完整到达。
- 正确:网络不可靠,所以有TCP等协议来保证顺序和重发(高级内容)。
-
IP地址写错格式
- 正确格式:四个0~255的数字用点隔开,比如
192.168.0.1,不能写成192.168.0.256或192.168.1。
- 正确格式:四个0~255的数字用点隔开,比如
完整示例:模拟数据包经过多个路由器
我们可以扩展刚才的代码,增加多个路由器,让数据包一步一步传递。这里我们用数组存储路径,并依次输出转发过程。
#include <iostream>
#include <string>
using namespace std;
int main() {
// 要发送的消息
string message = "Hello, 网络!";
// 发送者IP
string sender = "192.168.1.10";
// 接收者IP
string receiver = "10.0.0.20";
// 模拟经过的多个路由器IP(路径)
string routers[] = {"192.168.1.1", "172.16.0.1", "10.0.0.1"};
int num_routers = 3; // 路由器数量
cout << "开始发送数据..." << endl;
cout << "发送者 " << sender << " 发出消息:" << message << endl;
// 模拟数据包经过每个路由器
for (int i = 0; i < num_routers; i++) {
cout << " -> 到达路由器 " << routers[i] << ",正在转发..." << endl;
}
cout << "最终到达接收者 " << receiver << ",收到消息:" << message << endl;
return 0;
}
运行结果:
开始发送数据...
发送者 192.168.1.10 发出消息:Hello, 网络!
-> 到达路由器 192.168.1.1,正在转发...
-> 到达路由器 172.16.0.1,正在转发...
-> 到达路由器 10.0.0.1,正在转发...
最终到达接收者 10.0.0.20,收到消息:Hello, 网络!
是不是很像快递公司分拨中心?每个路由器只看目标地址,决定下一步往哪送。
相关指引:下一步学什么?
- TCP/IP协议:保证数据包不丢失、按顺序到达。
- HTTP协议:网页浏览使用的语言。
- Socket编程:用C++真正建立网络连接。
- 局域网与广域网:家里的小网络 vs 全球大网络。
你现在已经知道了网络最基础的概念,下次上课时,可以试着在浏览器地址栏输入 192.168.1.1(如果家里有路由器),看看能不能登录管理页面——那就是IP地址的妙用!
例题精讲
下列哪种协议属于TCP/IP模型的应用层?
IPv4地址由32位二进制数组成。
以下程序输出域名系统的缩写,请填空:
cout << "域名系统缩写为" << ___ << endl;在OSI参考模型中,负责路由选择的是哪一层?
交换机工作在OSI模型的网络层。