当前位置: 首页 > news >正文

网络原理入门详解:从零理解互联网如何工作

一、网络基础:计算机如何“打电话”?

想象你要给朋友寄一封信,网络通信的过程与此类似:

  1. 地址:信封需要写清楚收件人地址(IP地址)和门牌号(端口)
  2. 内容:信纸上写具体内容(数据)
  3. 邮局:邮局分拣信件,选择最佳路线(路由器)
  4. 运输:通过卡车、飞机等运输(网络传输)

二、核心概念解析
1. IP地址:计算机的“家庭住址”
  • 作用:唯一标识网络中的设备
  • 格式:IPv4(如 192.168.1.1),IPv6(如 2001:0db8:85a3::8a2e:0370:7334
  • 示例:访问百度时,实际是通过IP 110.242.68.66 找到服务器
2. 端口号:房子的“门牌号”
  • 作用:标识设备上的具体服务
  • 范围:0~65535
  • 常见端口
    • 80:HTTP(网页服务)
    • 443:HTTPS(加密网页)
    • 3306:MySQL数据库
3. 协议:通信的“语言规则”
  • TCP:可靠传输(像打电话,确认对方收到)
  • UDP:快速传输(像发广播,不确认对方是否收到)

三、数据如何传输?——以访问网页为例
  1. 输入网址:在浏览器输入 www.baidu.com
  2. DNS解析:DNS服务器将域名转换为IP地址(如 110.242.68.66
  3. 建立连接:通过TCP三次握手与服务器建立连接
  4. 发送请求:浏览器发送HTTP请求:“请给我首页内容”
  5. 返回数据:服务器返回HTML、CSS、JavaScript等文件
  6. 渲染页面:浏览器解析文件,展示网页
四、TCP三次握手:建立可靠连接

过程(类比打电话):

  1. 客户端:“喂,能听到吗?”(SYN)
  2. 服务端:“能听到,你能听到我吗?”(SYN-ACK)
  3. 客户端:“我也能听到!”(ACK)

代码示例(Python模拟)
 

# 服务端
import socket
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('127.0.0.1', 8080))
server.listen()
client, addr = server.accept()  # 等待客户端连接# 客户端
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(('127.0.0.1', 8080))  # 发起连接
五、数据包:网络传输的最小单位
  • 组成
    • 头部:源IP、目标IP、端口、协议类型
    • 数据:实际传输的内容(如文字、图片)
  • 分片传输:大文件会被拆分成多个数据包传输
、路由与交换机:网络的“交通指挥”
设备作用类比
路由器连接不同网络,选择最佳路径跨城市快递中转站
交换机连接同一网络内的设备小区内的邮筒

七、TCP vs UDP:两种传输方式对比
特性TCPUDP
可靠性高(重传丢失数据)低(不保证数据到达)
速度较慢(需建立连接)快(直接发送)
应用场景网页、邮件、文件传输视频通话、在线游戏、直播

代码示例(UDP通信)

# 服务端
import socket
server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server.bind(('127.0.0.1', 8080))
data, addr = server.recvfrom(1024)  # 接收数据# 客户端
client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
client.sendto(b"Hello UDP", ('127.0.0.1', 8080))  # 直接发送
八、网络安全基础
  1. 防火墙:像小区的门禁,过滤危险数据包
  2. 加密:把数据变成“密文”传输(如HTTPS)
  3. VPN:建立加密隧道访问内部网络
# 服务端
import socket
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('127.0.0.1', 8080))
server.listen()
print("等待连接...")
client, addr = server.accept()
while True:msg = client.recv(1024).decode('utf-8')print(f"收到消息: {msg}")if msg == "exit":break# 客户端
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(('127.0.0.1', 8080))
while True:msg = input("输入消息: ")client.send(msg.encode('utf-8'))if msg == "exit":break
client.close()

运行效果

  1. 先启动服务端,再启动客户端
  2. 客户端输入消息,服务端实时显示
十、总结:网络通信核心流程
  1. 寻址:通过IP和端口找到目标
  2. 建立连接:TCP三次握手(UDP跳过)
  3. 传输数据:拆分成数据包传输
  4. 关闭连接:TCP四次挥手释放资源

通过这个框架,您可以轻松理解日常上网、视频通话、在线游戏背后的技术原理!

http://www.xdnf.cn/news/642115.html

相关文章:

  • Modbus协议原理
  • 【Hive 开发进阶】窗口函数深度解析:OVER/NTILE/RANK 实战案例与行转列高级技巧
  • Day02
  • springboot日志
  • NotePad++编辑Linux服务器文档
  • 安全权限管理:从零到精通Android动态权限请求机制
  • CV中常用Backbone-3:Clip/SAM原理以及代码操作
  • Spring Boot 项目中常用的 ORM 框架 (JPA/Hibernate) 在性能方面有哪些需要注意的点?
  • 2025年- H50-Lc158 --25. k个一组翻转链表(链表,双指针,虚拟头节点)--Java版
  • Muduo网络库流程分析
  • quill 富文本多张图片排序
  • SRS流媒体服务器之RTC播放环境搭建
  • 揭开C语言指针的神秘面纱:地址、变量与“指向”的力量
  • systemverilog的单精度浮点和双精度浮点
  • AI测试怎么做投入产出比分析以及人员分配?
  • YOLOV8涨点技巧之DSS模块(一种轻量化火灾检测模型)
  • Unity引擎源码-物理系统详解-其三
  • C++23 std::out_ptr 和 std::inout_ptr:提升 C 互操作性
  • 锁与死锁的诊断:如何通过 SHOW ENGINE INNODB STATUS 解锁瓶颈
  • 加密货币投资亏损后,能否以“欺诈”或“不当销售”索赔?
  • 如何在 Windows 11 上安装 Ubuntu 20.04 WSL2
  • 《红警2000》游戏信息
  • YOLOv8源码修改(5)- YOLO知识蒸馏(下)设置蒸馏超参数:以yolov8-pose为例
  • Karakeep | 支持Docker/NAS 私有化部署!稍后阅读工具告别云端依赖,让知识收藏更有序
  • 机器学习---特征降维
  • C++指针与引用:const修饰的奥秘
  • 视频剪辑SDK定制开发技术方案与报价书优雅草卓伊凡
  • pinia状态管理使用
  • 星际旅行家(广度优先搜索+邻接表)
  • 直流电机 pwm 调速