文本描述
毛剑
Go进阶训练营
第9课
Go 语言实践- 网络编程
网络通信协议
Go 实现网络编程
Goim 长连接网关
ID 分布式生成器
IM 私信系统
网络通信协议
互联网的核心是一系列协议,总称为”互联网协议”(Internet Protocol Suite),正是这一些协议规定了电脑如何连接和组网。
主要协议分为:
Socket
接口抽象层
TCP / UDP
面向连接(可靠) / 无连接(不可靠)
HTTP1.1 / HTTP2 / QUIC(HTTP3)
超文本传输协议
Socket 抽象层
应用程序通常通过“套接字”向网络发出请求或者应答网络请求。
一种通用的面向流的网络接口
主要操作:
建立、接受连接
读写、关闭、超时
获取地址、端口
TCP 可靠连接,面向连接的协议
TCP/IP 即传输控制协议/网间协议,是一种面向连接(连接导向)的、可靠的、基于字节流的传输层(Transport layer)通信协议,因为是面向连接的协议。
服务端流程:
监听端口
接收客户端请求建立连接
创建 goroutine 处理连接
客户端流程:
建立与服务端的连接
进行数据收发
关闭连接
UDP 不可靠连接,允许广播或多播
UDP 协议(User Datagram Protocol)中文名称是用户数据报协议,是 OSI(Open System Interconnection,开放式系统互联)参考模型中一种无连接的传输层协议。
一个简单的传输层协议:
不需要建立连接
不可靠的、没有时序的通信
数据报是有长度(65535-20=65515)
支持多播和广播
低延迟,实时性比较好
应用于用于视频直播、游戏同步
HTTP 超文本传输协议
HTTP(HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议,它详细规定了浏览器和万维网服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。
请求报文:
Method: HEAD/GET/POST/PUT/DELETE
Accept:text/html、application/json
Content-Type:
application/json
application/x-www-form-urlencoded
请求正文
响应报文:
状态行(200/400/500)
响应头(Response Header)
响应正文
GET / HTTP/1.1
Host: google
Content-Type: text/html
Connection: keep-alive
--------
HTTP/1.1 200 OK
Content-Length: 3059
Server: GWS/2.0
Content-Type: text/html
Connection: keep-alive
...
nload
tcpflow
ss
netstat
nmon
top
gRPC 基于 HTTP2 协议扩展
Request:
Headers
:method = POST
:scheme = https
:path = /api.echo.v1.Echo/SayHello
content-type = application/grpc+proto
grpc-encoding = gzip
Data
Response:
Headers
:status = 200
grpc-encoding = gzip
content-type = application/grpc+proto
Data
Trailers
grpc-status = 0
grpc-message = OK
grpc-details-bin = base64(pb)
Data:
1 byte of zero (not compressed).
network order 4 bytes of proto message length.
serialized proto message.