第1天:认识计算机网络
“互联网就像一张巨大的蜘蛛网,连接着全世界的计算机。”
📚 今日目标
- 理解什么是计算机网络
- 了解网络的作用和重要性
- 编写第一个网络程序:检测网络连接
🎯 什么是计算机网络?
生活化理解
想象一下你在用微信聊天:
- 你在北京发了一条消息
- 你的朋友在上海收到了这条消息
- 中间发生了什么?
这就是计算机网络在工作!
计算机网络就是把分散在不同地点的计算机通过通信线路连接起来,实现资源共享和信息传递的系统。
网络的三个关键要素
- 计算机(节点):发送和接收信息的设备
- 通信线路(链路):传输信息的介质(网线、WiFi、光纤等)
- 协议(规则):计算机之间交流的"语言"
类比理解
计算机网络 = 快递系统
你的电脑 → 寄件人
网络线路 → 快递车、飞机
路由器 → 中转站
协议 → 包裹规格、运输规则
目标电脑 → 收件人
💡 网络能做什么?
1. 资源共享
- 共享打印机
- 共享文件
- 共享数据库
2. 信息传递
- 发送邮件
- 网页浏览
- 视频通话
- 在线游戏
3. 分布式计算
- 云计算
- 区块链
- 大数据处理
🔧 实战项目:检测网络连接
让我们编写第一个网络程序!这个程序会检测你的电脑是否连接到互联网。
代码实现
# day01_network_checker.py
# 功能:检测网络连接状态
import socket
import sys
def check_internet_connection(host="8.8.8.8", port=53, timeout=3):
"""
检测是否能连接到互联网
参数说明:
host: 目标主机IP地址(默认使用Google的DNS服务器 8.8.8.8)
port: 目标端口(53是DNS服务的标准端口)
timeout: 超时时间(秒)
返回值:
True: 网络连接正常
False: 网络连接失败
工作原理:
尝试创建一个socket连接到指定的服务器
如果能连接成功,说明网络是通的
"""
try:
# 创建一个socket对象
# AF_INET表示IPv4地址
# SOCK_STREAM表示TCP协议
socket.setdefaulttimeout(timeout)
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 尝试连接到目标主机的指定端口
sock.connect((host, port))
# 连接成功,关闭socket
sock.close()
return True
except socket.error as e:
# 连接失败,说明网络不通
print(f"连接失败:{e}")
return False
def get_local_ip():
"""
获取本机的IP地址
工作原理:
创建一个UDP socket,连接到外部地址(不会真正发送数据)
通过这个socket获取本机的IP地址
"""
try:
# 创建UDP socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 连接到一个外部地址(这里不会真正发送数据)
# 使用Google的DNS服务器地址
sock.connect(("8.8.8.8", 80))
# 获取本机的IP地址
local_ip = sock.getsockname()[0]
sock.close()
return local_ip
except Exception as e:
return "无法获取IP地址"
def get_hostname():
"""
获取计算机的主机名
"""
try:
return socket.gethostname()
except Exception as e:
return "未知主机名"
def main():
"""
主函数:执行网络检测并显示结果
"""
print("=" * 50)
print("网络连接检测工具".center(50))
print("=" * 50)
print()
# 获取主机名
hostname = get_hostname()
print(f"📌 主机名: {hostname}")
# 获取本机IP地址
local_ip = get_local_ip()
print(f"📍 本机IP地址: {local_ip}")
print()
# 检测网络连接
print("🔍 正在检测网络连接...")
# 测试多个服务器
test_servers = [
("8.8.8.8", "Google DNS"),
("114.114.114.114", "国内DNS"),
("1.1.1.1", "Cloudflare DNS")
]
connected = False
for ip, name in test_servers:
print(f" 测试连接到 {name} ({ip})...", end=" ")
if check_internet_connection(ip):
print("✅ 成功")
connected = True
else:
print("❌ 失败")
print()
if connected:
print("🎉 网络连接正常!")
print("💡 这意味着你的电脑可以访问互联网上的其他计算机。")
else:
print("⚠️ 网络连接异常!")
print("💡 请检查:")
print(" 1. 网线是否插好?")
print(" 2. WiFi是否连接?")
print(" 3. 路由器是否正常工作?")
print()
print("=" * 50)
if __name__ == "__main__":
main()
运行程序
cd code/day01
python day01_network_checker.py
预期输出
==================================================
网络连接检测工具
==================================================
📌 主机名: linzhibin-MacBook
📍 本机IP地址: 192.168.1.100
🔍 正在检测网络连接...
测试连接到 Google DNS (8.8.8.8)... ✅ 成功
测试连接到 国内DNS (114.114.114.114)... ✅ 成功
测试连接到 Cloudflare DNS (1.1.1.1)... ✅ 成功
🎉 网络连接正常!
💡 这意味着你的电脑可以访问互联网上的其他计算机。
==================================================
🔍 代码详解
Socket是什么?
Socket(套接字)是网络编程的基础,可以理解为:
Socket = 电话机
建立连接 → 拨号
发送数据 → 说话
接收数据 → 听对方说话
关闭连接 → 挂断电话
为什么用8.8.8.8?
8.8.8.8是Google提供的公共DNS服务器- 它几乎24小时在线,非常稳定
- 如果能连接到它,说明网络是通的
AF_INET 和 SOCK_STREAM 是什么?
socket.AF_INET # 使用IPv4地址
socket.AF_INET6 # 使用IPv6地址
socket.SOCK_STREAM # TCP协议(可靠传输)
socket.SOCK_DGRAM # UDP协议(快速传输)
🎓 知识小结
今天学到了什么?
- ✅ 计算机网络是连接多台计算机的系统
- ✅ 网络由计算机、通信线路和协议组成
- ✅ Socket是网络编程的基础工具
- ✅ 可以通过连接DNS服务器来检测网络状态
重要概念
| 概念 | 解释 | 比喻 |
|---|---|---|
| 计算机网络 | 多台计算机互联的系统 | 快递网络 |
| Socket | 网络编程接口 | 电话机 |
| IP地址 | 计算机在网络中的地址 | 家庭住址 |
| 端口 | 应用程序的标识号 | 门牌号 |
💪 练习题
练习1:修改代码
修改程序,让它可以检测连接到百度服务器(220.181.38.148)
练习2:思考题
- 为什么我们使用DNS服务器(端口53)而不是HTTP服务器(端口80)来测试?
- 本机IP地址和互联网IP地址有什么区别?
练习3:扩展功能
尝试添加功能:显示连接到目标服务器所需的时间(提示:使用time模块)
📚 扩展阅读
- IP地址是什么?(明天会详细讲解)
- DNS是什么?(第15天会详细讲解)
- TCP和UDP有什么区别?(第36天会详细讲解)
🎯 明天预告
第2天:网络的分类和拓扑结构
我们将学习:
- LAN、WAN、MAN是什么?
- 网络拓扑结构有哪些?
- 如何绘制网络拓扑图?
💡 今日金句:万丈高楼平地起,网络学习第一步!
👉 返回目录 | 下一天:网络的分类和拓扑结构