名称解析
名称解析:将名称解析成对应地址,名字-->IP
名称解析优点:便以记忆、解耦(断开直接的练习)
容器
mini的虚拟机,该容器地址是动态的、生命周期短暂;可实现登录功能
- 如果用户想要登录该网站(用于该容器地址是变化的,地址不固定)
- login固定名称->名称解析->对应当前动态ip地址
ARP解析:IP-->MAR
单点故障:一个点失败,全局业务都失败。
分布式DNS:
DNS
Domain Name System域名系统,应用层协议,跨网络通信
DNS不仅是一个软件,而且还需要与网络通信,故属于应用层协议
【有些软件并不需要与网络通信,故不属于应用层协议】
TCP/IP四层概念模型
应用层
传输层
网络层
数据链路层
socket-Server
Gopackage main import ( "fmt" "net" "strings" ) func main() { //创建监听 ip := "192.168.0.0" port := 0 address := fmt.Sprintf("%s:%d", ip, port) listener, err := net.Listen("tcp", address) if err != nil { fmt.Printf("net.Listen err:", err) return } fmt.Printf("正在监听中...") conn, err := listener.Accept() if err != nil { fmt.Printf("net.accept err:", err) return } fmt.Printf("连接建立成功!") //创建一个容器,用于接受所读取到的数据 buf := make([]byte, 1024) //使用make来创建切片byte=uint8 //cnt真正读取client发来的数据 cnt, err := conn.Read(buf) if err != nil { fmt.Printf("conn.Read err:", err) return } fmt.Printf("client --> server,lenth:", cnt, "context:", string(buf)) //服务器对客户端请求进行响应 //将数据转换成大写 "hello"--> "HELLO" //func ToUpper(s string) string upperData := strings.ToUpper(string(buf)) //服务端对客户端进行响应 cnt, err = conn.Write([]byte(upperData)) //Write(b []byte) (n int, err error) 将字符串类型转换成切片类型 fmt.Println("Client <===== Server,responce_lenth", cnt, "responce_context", upperData) conn.Close() //关闭连接 //net.Listen("tcp", ":8848") //简写,冒号前面默认是本机 }
将IP地址和port端口号进行更改,要不然会出现这种错误
如何查看本机电脑的ip和端口号呢?
step1:这个步骤只是看到IP地址,并没有看见端口号
step2:如果有wireshark软件,直接打开网络监听,可以看到各种各样的ip和port
找到与ipconfig中IPv4地址一样的IP对应的端口号。
该server服务器只能进行一次监听。
socket-client
Gopackage main import ( "fmt" "net" ) func main() { conn, err := net.Dial("tcp", "192.168.0.0:0") //指定ip和端口号 if err != nil { fmt.Println("net Dial err", err) return } fmt.Println("client 与 server连接建立成功") //向服务器发送数据 sendData := "helloworld" cnt, err := conn.Write([]byte(sendData)) if err != nil { fmt.Println("conn.Write err", err) return } fmt.Println("Client --> Server cnt:", cnt, " data:", sendData) //接收之后,服务器给客户端返回响应 buf := make([]byte, 1024) //用于接收服务器返回的响应 cnt, err = conn.Read(buf) if err != nil { fmt.Println("conn.Read err", err) return } fmt.Println("Client <===== Server,cnt:", cnt, " data:", string(buf[0:cnt])) //string(buf[0:cnt])范围从0~cnt }