网络通信是互联网的支柱,无论是访问网页、传输文件还是搭建服务,都离不开网络。本文将详细讲解网络通信的演变、端口、Socket与TCP、内网与外网部署、防火墙配置、公司服务器与云服务器的关系,以及VPN的原理和使用方法。
网络通信从简单到复杂,逐步解决了多设备连接和高效传输的问题。以下是三个阶段的详细讲解。
知识点 :
在网络发展的初期(几十年前),通信方式非常简单:两台电脑通过一根网线直接连接,就像两个人用对讲机对话。数据直接从一台电脑发送到另一台,速度快但局限性大。局限性在于只能一对一通信。如果有第三台电脑想加入,必须再拉一根网线。设备增多时,线路会变成“蜘蛛网”,管理复杂,无法扩展到大规模网络。
示例 :
想象你和朋友用一根电话线连两台电脑,你发送一个文件,对方直接收到。如果另一个朋友想加入,你得再拉一根线到他家。如果有10个人,每两台电脑都需要单独的线,很快就会乱成一团。
知识点 :
随着电脑数量增加,点对点方式不再实用,引入了路由器,一种管理多设备通信的设备。所有电脑连接到路由器,数据发送时,路由器通过“广播”方式传递,类似村里的邮局用大喇叭喊:“这封信给谁?”目标设备听到后响应。优点是减少了物理线路,设备只需连到路由器即可。缺点是当设备过多时,广播会造成网络拥堵,效率低下,就像邮局喊太多名字,大家听不清。
示例 :
假设一个办公室有10台电脑,都连到同一个路由器。你发送一个文件给同事,路由器广播:“这个文件给小明!”小明的电脑响应并接收。但如果办公室有100台电脑,路由器不停广播,网络会变得很慢,像村里喇叭喊得太乱。
知识点 :
现代网络使用路由表实现高效通信。路由表是路由器中的“导航地图”,记录了目标IP地址和数据的最佳路径。路由表内容包括目标地址(数据要去哪个IP或IP范围,比如203.0.113.0/24)、下一跳(数据下一步交给哪个路由器)和接口(数据从路由器的哪个网口发送)。路由器查表后将数据精准送达,不需要广播,效率极高,能支持全球数亿设备。路由表的实体存储在路由器中,分布在家用路由器(管理家庭设备的通信,路由表较小)、公司路由器(管理企业内网,路由表覆盖公司设备)和运营商路由器(管理城市、国家间的流量,路由表复杂,处理大规模数据)。每台路由器只负责“下一步往哪送”,通过多级路由器协作,数据从起点到达终点。
优点 :数据走最短路径,效率高,适合全球网络。
缺点 :配置和管理复杂,需专业人员维护。
示例 :
你打开一个网站(比如www.example.com,IP为203.0.113.1):
这就像快递公司分步递送包裹:你家→本地快递站→城市中转站→目标城市,最终送到收件人。
知识点 :
定义:端口是电脑区分不同服务的数字标识,范围从0到65535,类似大楼的门牌号。每个端口对应一个程序或服务。作用是确保数据送到正确的程序。例如:80端口对应HTTP协议,用于网页访问;443端口对应HTTPS协议,用于加密网页;3306端口对应MySQL数据库。
特点 :
重要性 :端口让多服务在同一台电脑上运行而不混乱,客户端通过“IP+端口”精准访问。
示例 :
一台服务器(IP:192.168.1.100)运行两个服务:
如果8080端口被用作测试服务,但防火墙关闭了8080,客户端访问http://192.168.1.100:8080 会失败,需开放防火墙。
知识点 :
定义:TCP(传输控制协议)是网络通信的规则,确保数据可靠、有序、无丢失地传输。工作机制是将大数据拆成小数据包,标记顺序,确认每个包送达,若丢失则重发,在接收端按顺序重组数据。
特点 :
重要性 :TCP是互联网核心协议,广泛用于需要可靠传输的服务。
示例 :
你下载一个视频文件,TCP将文件分成小包,依次发送到你的电脑。如果某个包丢失,服务器会重发,确保视频完整播放。
知识点 :
定义:Socket是程序员基于TCP(或其他协议)开发的接口,用于发送和接收数据。作用是Socket像“快递员”,程序员指定目标IP和端口,Socket负责数据传递,简化了底层网络操作。工作方式是服务器Socket监听某个端口,等待客户端连接;客户端Socket连接服务器的IP和端口,发送或接收数据。
特点 :Socket屏蔽了TCP的复杂细节,程序员只需关注数据内容和目标地址。
示例 :
以下JavaScript代码创建一个服务器,监听8080端口:
const net = require('net');
const server = net.createServer((socket) => {
socket.write('Hello from server!');
});
server.listen(8080);
客户端连接192.168.1.100:8080,收到服务器发送的“Hello from server!”。Socket处理了底层的TCP连接和数据传输。
知识点 :
定义:内网(LAN)是局域网络,如公司Wi-Fi或有线网络,使用私有IP地址(10.x.x.x、172.16.x.x至172.31.x.x、192.168.x.x)。特点包括私有IP对外网不可见,仅内网设备可访问。路由器通过NAT(网络地址转换)将内网IP转为公网IP与外网通信,但外网无法直接访问内网IP。
为什么只有内网设备能访问 :
地址分配 :
防火墙配置 :
示例 :
一台服务器(192.168.1.100)运行服务监听8080端口:
const http = require('http');
const server = http.createServer((req, res) => {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello from server!');
});
server.listen(8080, '192.168.1.100');
配置 :
结果 :内网用户访问http://192.168.1.100:8080 ,看到“Hello from server!”。外网用户访问失败,因192.168.1.100不可见。
知识点 :
定义:外网部署使用公网IP(如203.0.113.1)或域名,允许全球用户访问,适合公开服务。部署步骤包括获取公网IP(租用云服务器,如阿里云、AWS,默认提供公网IP)、运行服务(在服务器上运行程序,监听端口,如8080)和配置防火墙(安全组和本地防火墙)。域名(可选):通过DNS将域名(如example.com)指向公网IP,方便记忆。
为什么需要安全组和本地防火墙 :
注意事项 :
示例 :
云服务器(公网IP:203.0.113.1)运行服务监听8080端口:
const http = require('http');
const server = http.createServer((req, res) => {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello from server!');
});
server.listen(8080, '0.0.0.0');
配置 :
结果 :用户访问http://203.0.113.1:8080 ,看到“Hello from server!”。若买域名example.com,DNS指向203.0.113.1,访问http://example.com:8080 同样有效。
知识点 :
公司服务器 :
云服务器 :
云服务器作为公司服务器 :完全可行,配置内网IP(如172.16.1.100)供员工,外网IP(如203.0.113.1)供客户。
示例 :
公司租用阿里云ECS(内网IP:172.16.1.100,公网IP:203.0.113.1),运行服务监听8080端口:
配置安全组和本地防火墙开放8080,双重保护确保访问畅通。
知识点 :
定义:VPN(虚拟专用网络)通过加密隧道将远程设备接入内网,类似在家“假装”连到公司Wi-Fi。原理是内网IP(如192.168.1.100)对外网不可见,家用网络无法直接访问。解决方法是VPN服务器分配内网IP(如192.168.1.200)给远程设备,数据通过加密隧道传输,绕过外网限制。加密使用SSL/TLS等技术,保护数据不被窃听。
使用方法 :
替代方案 :内网穿透工具(如ngrok)将内net服务映射到外网地址。
注意事项 :
示例 :
公司服务器(192.168.1.100:8080)运行服务,员工在家用Cisco AnyConnect连接VPN,获得内网IP(192.168.1.200),访问http://192.168.1.100:8080 看到服务内容。替代方案是用ngrok映射192.168.1.100:8080到https://abc123.ngrok.io ,在家直接访问。