【golang长途旅行第34站】网络编程
网络编程
基本介绍
-
核心主题:
Golang面向大规模后端服务程序的设计目标中,网络通信是必不可少且至关重要的部分。 -
两种网络编程方式:
TCP Socket编程
•性质:网络编程的主流
•底层协议:基于TCP/IP协议
•举例:QQ聊天
B/S结构的HTTP编程
•描述:浏览器访问服务器时使用的协议
•底层实现:基于TCP Socket
•范畴:属于Go Web开发
•举例:京东商城
基础知识
网线网卡
-
网线
本质:网线是一根物理的线缆,是网络信号的物理传输介质
作用:负责在设备(如电脑和路由器)之间稳定、高速地传输电信号或光信号。它决定了数据通行的“道路”质量
常见类型:双绞线 光纤 -
网卡
本质:网卡是一个硬件设备,是计算机连接网络的接口
作用:- 将计算机内部的数据(0和1)转换成可以在网线上传输的电信号
- 接收来自网线(或天线)的信号,并将其转换回计算机能理解的数据
- 每个网卡都有一个全球唯一的物理地址,叫做 MAC地址
常见类型:
- 有线网卡:提供RJ-45接口,用来插网线
- 无线网卡 (Wireless NIC): 带有天线,遵循Wi-Fi协议,用来接收和发送Wi-Fi信号。
- 虚拟网卡:现代技术(如Docker、VPN)会创建虚拟网卡,其MAC地址是软件生成的。
TCP/IP协议
本质:TCP/IP不是一个单一协议,而是一个协议族(一套规则集合),是互联网的通信标准和语言。
作用:它规定了数据如何打包、如何寻址、如何路由、如何确保安全可靠地到达,它规定了数据如何打包、如何寻址、如何路由、如何确保安全可靠地到达
TCP/IP将网络通信分为四层
- 链路层(Link Layer): 它包含物理层(网线、信号)和数据链路层(MAC地址、帧封装)。网线、网卡 就在这一层工作,负责物理传输。
链路层从网络层接收来一个数据包。
它会在这个数据包的前后加上一个帧头和帧尾,把它包装成一个数据帧。
帧头里最重要的信息就是:源MAC地址 和 目标MAC地址。
帧尾通常包含一个用于检查数据是否出错的校验码。
- 网际层 (Internet Layer): IP协议 在这一层工作,负责寻址和路由。还有 ICMP(Ping命令)、ARP(IP转MAC地址)等。
把数据包送到正确的“城市”(目标计算机)
- 传输层 (Transport Layer): TCP协议 在这一层工作,负责端到端的连接。
确保数据包送到正确的“住户”(目标应用程序),并且确保“包裹”完整无误。
- 应用层 (Application Layer): 浏览器、微信等软件在这一层,使用HTTP、FTP等协议。
确认是从哪个app或者浏览器发出的
示例
假如A要给B发个信息
那么A的电脑的层级顺序是4->1。
先应用层,知道是哪个app或者浏览器发的
再传输层,确保数据传输对象准确性
之后网际层,给IP头,确认送达的地方
最后链路层,给上帧头帧尾
B电脑接收时的层级顺序则是1->4
反着来,逐步的拆解信息,找到对应的目标
MAC地址
MAC地址 是链路层的核心标识,但在跨网络通信(如互联网)中,IP地址才是最终寻址依据。MAC地址仅在同一局域网内有效(如家庭Wi-Fi或公司内网)。
IP
本质:Internet Protocol Address,互联网协议地址。它是设备的逻辑地址,用于在网络中定位和寻址。
格式:IPv4,IPv6
分类:
公网IP:全球唯一,可以直接在互联网上被访问。就像公司的公开地址。
私网IP:在局域网(如你家或公司的Wi-Fi)内使用,不能直接在互联网上被路由。
作用:寻址和路由。数据包在互联网上传输时,沿途的路由器会查看IP包头的目标IP地址
NAT(网络地址转换):私网IP(如192.168.1.100)通过路由器的NAT功能转换为公网IP访问互联网,这是解决IPv4地址短缺的关键技术。
特殊IP地址:
- 127.0.0.1(本地回环地址,用于测试本机服务)。
- 169.254.x.x(当DHCP失败时自动分配的临时IP)。
可以通过ipconfig查找
端口
本质:端口不是物理硬件接口,而是操作系统中的一个16位的数字标识符(范围0-65535)。它是网络通信的端点。
作用:区分应用程序。一台电脑可以同时运行很多网络程序。当数据到达电脑后,操作系统需要知道把这个数据交给哪个网络程序。端口号就是这个“交接暗号”。
分类:
- 知名端口: 0-1023。被预留给系统或著名的网络服务。
- 80端口: HTTP协议,用于浏览网
- 443端口: HTTPS协议,用于加密浏览网页
- 21端口: FTP协议,用于文件传输
- 25端口: SMTP协议,用于发送邮件。
- 注册端口: 1024-49151。分配给用户安装的某些应用程序(如微软SQL数据库默认用1433)。
- 动态/私有端口: 49152-65535。通常留给客户端程序临时使用。当你用浏览器访问一个网站时,你的操作系统会随机分配一个这个范围内的端口给你这次的浏览器会话。
端口绑定冲突:如果一个端口已被占用(如两个程序同时监听80端口),后启动的程序会报错 address already in use
客户端端口:客户端发起连接时,操作系统会动态分配一个临时端口(如49213),但目标端口通常是固定的(如HTTP的80)。
端口与安全:
- 防火墙可以限制特定端口的访问(如只开放80/443)。
- 恶意软件常利用高危端口(如22/SSH、3389/RDP)进行攻击。