这是我参与「第三届青训营 -后端场」笔记创作活动的的第5篇笔记。
查询空闲端口
netstat -an|findstr <端口号>可以查看到占用情况,无返回即为没有占用,一般取较大值均空闲。
编写Server和client
使用net.ListenUDP net.ReadFromUDP net.WriteToUDP三个函数完成服务器功能 代码如下
package udpSocket
import (
"fmt"
"net"
)
func main() {
fmt.Println("server opening")
listen, err := net.ListenUDP("udp", &net.UDPAddr{
IP: net.IPv4(0, 0, 0, 0),
Port: 10000,
})
if err != nil {
fmt.Println("listen error:", err)
return
}
defer listen.Close()
for {
fmt.Println("looping")
var data [1024]byte
n, addr, err := listen.ReadFromUDP(data[:])
fmt.Println("listened")
if err != nil {
fmt.Println("ReadFromUDP err:", err)
continue
}
fmt.Printf("接受内容是:%v,地址是,%v,长度为%v", string(data[:n]), addr, n)
_, err = listen.WriteToUDP(data[:n], addr)
if err != nil {
fmt.Println("WriteToUDP err:", err)
continue
}
}
}
使用net.DialUDP net.Write net.ReadFromUDP三个函数完成客户端功能
package udpSocket
import (
"fmt"
"net"
)
func client() {
fmt.Println("client opening")
socket, err := net.DialUDP("udp", nil, &net.UDPAddr{
IP: net.IPv4(0, 0, 0, 0),
Port: 10000,
})
if err != nil {
fmt.Println("listen error:", err)
return
}
fmt.Println("socket!")
defer socket.Close()
sendData := []byte("你好,服务器!")
_, err = socket.Write(sendData)
data := make([]byte, 4096)
n, remoteAddr, err := socket.ReadFromUDP(data)
if err != nil {
fmt.Println("accept err", err)
return
}
fmt.Printf("接受内容是:%v,地址是,%v,长度为%v", string(data[:n]), remoteAddr, n)

}
运行结果
可靠UDP(待补充)
将我的服务开放给用户
Host管理
手动更改hosts维护ip和域名的DNS
域名系统
分级结构
- 顶级域general Top-level Domainsg gTLD .gov .com .mil .org .edu
- 购买获得二级域名
自建DNS服务器
内网域名解析也要出去公网获取,效率低下 外部用户看到内网ip,容易攻击 云厂商权威DNS容易出故障,影响体验 扩大公司品牌技术影响力
DNS过程
本地DNS DNS跟服务器 顶级域服务器 二级服务器
dig工具
DNS类型
- A/AAAA IP指向记录
- CNAME 别名记录,根据别名继续解析以提取IP
- TXT 文本记录,购买证书
- MX 邮件交换记录
- NS 解析服务器记录,哪台服务器解析
- SOA 其实授权机构记录,每个zone有且仅有一条SOA,描述zone属性以及主要权威服务器记录
权威DNS系统架构
权威DNS系统+LocalDNS 常见开源DNS master-slave模式
接入HTTPS
SSL
client random
server random
premaxster secret使用服务端公钥加密
三个数字计算得到对很密钥session key
全站加速
静态加速 CDN 动态加速 DCDN(最短路由)
四层负载均衡
基于IP+端口,利用算法将报文转发到某个后端服务器,实现负载均衡。 解耦VIP(Virtual IP) RS(Real Server) NAT 扩充地址 防攻击 不暴露端口 synproxy DdOS
常见调度算法
RR轮询
加权RR轮询
最小链接
五元组hash(如果服务器down,需要rehash)
一致性hash,只影响故障服务器的session
FullNAT
CIP CPORT 客户端地址
VIP GW 和外网
(内部设备ip->内网IP)
LIP 四层负载均衡的内部地址
RSIP 设备物理IP
相当于内网完全使用内网地址
四层负载特点
dpdk技术实现,技术成熟 用户态协议栈 无缓存,零拷贝 仅针对四层数据包(TCP)转发,小包可达限速,承受高cps
nginx
七层反向代理(http/https) master-worker架构 事件驱动 异步非阻塞 支持aio mmap nginx调优 长连接 缓存 proxybuffer 四层 开源LVS keepalived Nginx stream模块
Ngrok 本地服务公网可用