Go语言网络编程
分层模型
每一层利用下一层提供的服务来为上一层提供服务,本层服务的实现细节对上层屏蔽
层与协议
链路层
源MAC,目的MAC
以太网规定,连入网络的所有设备,都必须具有“网卡”接口,网卡的地址是MAC地址。设备到设备
- ARP:地址解析协议,通过已知IP,寻找对应主机MAC地址
- RARP:地址转换协议,通过MAC地址确定IP地址
网络层
源IP,目的IP
- IP:因特网互联协议
- ICMP: Internet控制报文协议,用于在IP主机、路由器之间传递控制消息
- IGMP: Internet组管理协议,运行主机和组播路由器之间
传输层
源端口,目的端口(网络程序的一个编号)
- TCP: 传输控制协议,面向连接的、可靠的、基于字节流的传输层通信协议
- UDP:用户数据报协议,无连接的传输层协议,提供面向事务的简单不可靠信息传送服务
应用层
提取有用信息,关键信息,先规定好格式,再进行读取
- FTP:TCP分化,文件传输协议
- Telnet: TCP分化
- TFTP:UDP分化
- NFS:UDP分化
网络通信条件
- 网卡,mac地址(不需要用户处理)
- 逻辑地址,ip地址(需要用户指定)
- 端口,找应用程序
Socket编程
C/S模型
就是客户服务器模型,客户端主动请求服务,服务器被动提供服务
简单并发服务器
TCP服务器
1 | func HandleConn(conn net.Conn) { |
TCP客户端
1 | func main() { |
TCP文件传输
发送方
1 | func SendFile(path string , conn net.Conn) { |
接收方
1 | func RecvFile(fileName string , conn net.Conn) { |
并发聊天服务器
分析:
- map保存在线用户,key对应IP和端口,value对应结构体,包括通道、用户名、地址
- 主协程处理用户连接
- 将用户加入到map
- 告诉所有在线的用户谁上线了
- 新开协程传输信息
- 接收用户的请求,把用户发送过来的数据转发
- 把发送过来的数据添加到通道
- 用户下线,移除map中的用户
1 | type Client struct { |
HTTP编程
Web工作方式
- 客户机通过TCP/IP协议建立到服务器的TCP连接
- 客户端向服务器发送HTTP协议请求包,请求服务器里的资源文档
- 服务器向客户机发送HTTP应答包,如果请求的资源包含有动态语言的内容,那么服务器会调用动动态语言的解释引擎负责处理动态内容,并将处理得到的数据返回给客户端
- 客户机与服务器断开,由客户端解释HTML文档,在客户端屏幕上渲染图形结果
HTTP协议
超文本传输协议,通常承载于TCP协议之上,有时也承载于TLS或者SSL协议层之上,是一种网络协议,它详细规定了浏览器和万维网之间互相通信的规则。
SSL/TLS
安全传输层协议,用于在两个通信应用程序之间提供保密性和数据完整性。
HTTP服务器
1 | //w给客户端回复数据 |
HTTP客户端
1 | func main() { |
简单爬虫
1 | func DoWork(start , end int) { |
并发爬虫
1 | func DoWork(start , end int) { |