资讯中心

Go 网络模型:从 net.Conn 到 TCP 调优实战

📅 2026/9/26 11:00:53
Go 网络模型:从 net.Conn 到 TCP 调优实战
Go 网络模型从 net.Conn 到 TCP 调优实战网络编程是 Go 后端基础功。本文讲清 net 包、TCP / UDP 区别、连接管理、TLS、企业实战。一、net 包基础importnetln,err:net.Listen(tcp,:8080)conn,err:ln.Accept()二、TCP 三次握手client → SYN server → SYNACK client → ACK三、net.Dialconn,err:net.DialTimeout(tcp,127.0.0.1:3306,2*time.Second)四、TLSimportcrypto/tlsconfig:tls.Config{ServerName:example.com}conn,err:tls.Dial(tcp,example.com:443,config)五、ClienttypeClientstruct{conn net.Conn mu sync.Mutex}func(c*Client)send(p[]byte)error{c.mu.Lock();deferc.mu.Unlock()_,err:c.conn.Write(p)returnerr}加锁避免并发写。六、读 Loopbuf:make([]byte,4096)for{n,err:conn.Read(buf)iferr!nil{returnerr}// 业务处理}注意 buffer 复用以减少分配。七、HTTP Client 调优importnet/httpclient:http.Client{Timeout:3*time.Second,Transport:http.Transport{MaxIdleConns:100,MaxIdleConnsPerHost:10,IdleConnTimeout:30*time.Second,},}八、tcp 半连接 / 全连接半连接 (SYN_RECV)还在握手全连接 (ESTABLISHED)可通信netstat-n|grep8080九、TCP_NODELAYconn.(*net.TCPConn).SetNoDelay(true)关闭 Nagle 算法对低时延业务有用。十、SO_KEEPALIVEconn.(*net.TCPConn).SetKeepAlive(true)conn.(*net.TCPConn).SetKeepAlivePeriod(30*time.Second)十一、UDPudpAddr,_:net.ResolveUDPAddr(udp,:9999)conn,_:net.DialUDP(udp,nil,udpAddr)conn.Write([]byte(hello))buf:make([]byte,1024)n,addr,err:conn.ReadFromUDP(buf)十二、DNS Lookupaddrs,err:net.LookupHost(golang.org)十三、自定义 Resolverresolver:net.Resolver{PreferGo:true,Dial:func(ctx context.Context,network,addressstring)(net.Conn,error){d:net.Dialer{Timeout:2*time.Second}returnd.DialContext(ctx,udp,8.8.8.8:53)},}十四、WebSocketimportgithub.com/gorilla/websocket十五、KCPimportgithub.com/xtaci/libkcp-goKCP 在丢包环境下比 TCP 友好。十六、QUICimportgithub.com/lucas-clemente/quic-goQUIC / HTTP3 是未来。十七、Connection PooltypePoolstruct{connschannet.Conn factoryfunc()(net.Conn,error)}func(p*Pool)Get()(net.Conn,error){select{casec:-p.conns:returnc,nildefault:returnp.factory()}}func(p*Pool)Put(c net.Conn){select{casep.conns-c:default:c.Close()}}十八、企业实战高吞吐代理gofunc(){for{ln.Accept()handle(...)}}()goroutine-per-conn。十九、踩坑清单TIME_WAIT 多 — 加 SO_REUSEADDRDNS 查询慢 — 自定义 Resolver网络 IO 频繁 — 用 bufio二十、监控 net ioss-tanstate established ss-s二十一、未来HTTP/3 逐渐普及eBPF-based 网络监控二十二、总结与展望net 包功能强大。深入 TCP / UDP / TLS / WebSocket / QUIC 各层协议能让你在网络调优时游刃有余。二十三、参考文献Go 标准库 netCloudflare TCP tuning 博客O’Reilly TCP/IP 说明

看完文章,想为自己的企业也做一次专业网站诊断?

尧图顾问免费为您评估现有网站,并给出建站/改版建议与报价方案。

免费获取方案