当前位置: 首页 > news >正文

网站如何做等级保护wordpress七牛

网站如何做等级保护,wordpress七牛,wordpress ak action,商家建设网站的好处网络编程 网络模型介绍 OSI七层网络模型 在软件开发中我们使用最多的是上图中将互联网划分为五个分层的模型#xff1a; 物理层数据链路层网络层传输层应用层 物理层 我们的电脑要与外界互联网通信#xff0c;需要先把电脑连接网络#xff0c;我们可以用双绞线、光纤、…网络编程 网络模型介绍 OSI七层网络模型 在软件开发中我们使用最多的是上图中将互联网划分为五个分层的模型 物理层数据链路层网络层传输层应用层 物理层 我们的电脑要与外界互联网通信需要先把电脑连接网络我们可以用双绞线、光纤、无线电波等方式。这就叫做”实物理层”它就是把电脑连接起来的物理手段。它主要规定了网络的一些电气特性作用是负责传送0和1的电信号 数据链路层 单纯的0和1没有任何意义所以我们使用者会为其赋予一些特定的含义规定解读电信号的方式例如多少个电信号算一组每个信号位有何意义这就是”数据链接层”的功能它在”物理层”的上方确定了物理层传输的0和1的分组方式及代表的意义。早期的时候每家公司都有自己的电信号分组方式。逐渐地一种叫做”以太网”Ethernet的协议占据了主导地位 以太网规定一组电信号构成一个数据包叫做”帧”Frame。每一帧分成两个部分标头Head和数据Data。其中”标头”包含数据包的一些说明项比如发送者、接收者、数据类型等等”数据”则是数据包的具体内容。”标头”的长度固定为18字节。”数据”的长度最短为46字节最长为1500字节。因此整个”帧”最短为64字节最长为1518字节。如果数据很长就必须分割成多个帧进行发送 那么发送者和接收者是如何标识呢以太网规定连入网络的所有设备都必须具有”网卡”接口。数据包必须是从一块网卡传送到另一块网卡。网卡的地址就是数据包的发送地址和接收地址这叫做MAC地址。每块网卡出厂的时候都有一个全世界独一无二的MAC地址长度是48个二进制位通常用12个十六进制数表示。前6个十六进制数是厂商编号后6个是该厂商的网卡流水号。有了MAC地址就可以定位网卡和数据包的路径了 我们会通过ARP协议来获取接收方的MAC地址有了MAC地址之后如何把数据准确的发送给接收方呢其实这里以太网采用了一种很”原始”的方式它不是把数据包准确送到接收方而是向本网络内所有计算机都发送让每台计算机读取这个包的”标头”找到接收方的MAC地址然后与自身的MAC地址相比较如果两者相同就接受这个包做进一步处理否则就丢弃这个包。这种发送方式就叫做”广播” 网络层 按照以太网协议的规则我们可以依靠MAC地址来向外发送数据。理论上依靠MAC地址你电脑的网卡就可以找到身在世界另一个角落的某台电脑的网卡了但是这种做法有一个重大缺陷就是以太网采用广播方式发送数据包所有成员人手一”包”不仅效率低而且发送的数据只能局限在发送者所在的子网络。也就是说如果两台计算机不在同一个子网络广播是传不过去的。这种设计是合理且必要的因为如果互联网上每一台计算机都会收到互联网上收发的所有数据包那是不现实的 因此必须找到一种方法区分哪些MAC地址属于同一个子网络哪些不是。如果是同一个子网络就采用广播方式发送否则就采用”路由”方式发送。这就导致了”网络层”的诞生。它的作用是引进一套新的地址使得我们能够区分不同的计算机是否属于同一个子网络。这套地址就叫做”网络地址”简称”网址” “网络层”出现以后每台计算机有了两种地址一种是MAC地址另一种是网络地址。两种地址之间没有任何联系MAC地址是绑定在网卡上的网络地址则是网络管理员分配的。网络地址帮助我们确定计算机所在的子网络MAC地址则将数据包送到该子网络中的目标网卡。因此从逻辑上可以推断必定是先处理网络地址然后再处理MAC地址 规定网络地址的协议叫做IP协议。它所定义的地址就被称为IP地址。目前广泛采用的是IP协议第四版简称IPv4。IPv4这个版本规定网络地址由32个二进制位组成我们通常习惯用分成四段的十进制数表示IP地址从0.0.0.0一直到255.255.255.255 根据IP协议发送的数据就叫做IP数据包。IP数据包也分为”标头”和”数据”两个部分”标头”部分主要包括版本、长度、IP地址等信息”数据”部分则是IP数据包的具体内容。IP数据包的”标头”部分的长度为20到60字节整个数据包的总长度最大为65535字节 传输层 有了MAC地址和IP地址我们已经可以在互联网上任意两台主机上建立通信。但问题是同一台主机上会有许多程序都需要用网络收发数据比如QQ和浏览器这两个程序都需要连接互联网并收发数据我们如何区分某个数据包到底是归哪个程序的呢也就是说我们还需要一个参数表示这个数据包到底供哪个程序进程使用。这个参数就叫做”端口”port它其实是每一个使用网卡的程序的编号。每个数据包都发到主机的特定端口所以不同的程序就能取到自己所需要的数据 “端口”是0到65535之间的一个整数正好16个二进制位。0到1023的端口被系统占用用户只能选用大于1023的端口。有了IP和端口我们就能实现唯一确定互联网上一个程序进而实现网络间的程序通信 我们必须在数据包中加入端口信息这就需要新的协议。最简单的实现叫做UDP协议它的格式几乎就是在数据前面加上端口号。UDP数据包也是由”标头”和”数据”两部分组成”标头”部分主要定义了发出端口和接收端口”数据”部分就是具体的内容。UDP数据包非常简单”标头”部分一共只有8个字节总长度不超过65,535字节正好放进一个IP数据包 UDP协议的优点是比较简单容易实现但是缺点是可靠性较差一旦数据包发出无法知道对方是否收到。为了解决这个问题提高网络可靠性TCP协议就诞生了。TCP协议能够确保数据不会遗失。它的缺点是过程复杂、实现困难、消耗较多的资源。TCP数据包没有长度限制理论上可以无限长但是为了保证网络的效率通常TCP数据包的长度不会超过IP数据包的长度以确保单个TCP数据包不必再分割 应用层 应用程序收到”传输层”的数据接下来就要对数据进行解包。由于互联网是开放架构数据来源五花八门必须事先规定好通信的数据格式否则接收方根本无法获得真正发送的数据内容。”应用层”的作用就是规定应用程序使用的数据格式例如我们TCP协议之上常见的Email、HTTP、FTP等协议这些协议就组成了互联网协议的应用层 如下图所示发送方的HTTP数据经过互联网的传输过程中会依次添加各层协议的标头信息接收方收到数据包之后再依次根据协议解包得到数据 Socket编程 Socket是BSD UNIX的进程通信机制通常也称作”套接字”用于描述IP地址和端口是一个通信链的句柄 Socket可以理解为TCP/IP网络的API它定义了许多函数或例程程序员可以用它们来开发TCP/IP网络上的应用程序 电脑上运行的应用程序通常通过”套接字”向网络发出请求或者应答网络请求 socket图解 Socket是应用层与TCP/IP协议族通信的中间软件抽象层。在设计模式中Socket其实就是一个门面模式它把复杂的TCP/IP协议族隐藏在Socket后面对用户来说只需要调用Socket规定的相关函数让Socket去组织符合指定的协议数据然后进行通信 Socket又称“套接字”应用程序通常通过“套接字”向网络发出请求或者应答网络请求 常用的Socket类型有两种流式Socket和数据报式Socket 流式是一种面向连接的Socket针对于面向连接的TCP服务应用 数据报式Socket是一种无连接的Socket针对于无连接的UDP服务应用 TCP比较靠谱面向连接比较慢 UDP不是太靠谱无连接比较快 TCP编程 TCP/IP(Transmission Control Protocol/Internet Protocol) 即传输控制协议/网间协议是一种面向连接连接导向的、可靠的、基于字节流的传输层Transport layer通信协议因为是面向连接的协议数据像水流一样传输会存在黏包问题。 TCP服务端 一个TCP服务端可以同时连接很多个客户端例如世界各地的用户使用自己电脑上的浏览器访问淘宝网。因为Go语言中创建多个goroutine实现并发非常方便和高效所以我们可以每建立一次连接就创建一个goroutine去处理 TCP服务端程序的处理流程 监听端口接收客户端请求建立连接创建goroutine处理连接 我们使用Go语言的net包实现的TCP服务端代码如下 // 处理函数 func process(conn net.Conn) {defer conn.Close() // 关闭连接for {reader : bufio.NewReader(conn)var buf [128]byten, err : reader.Read(buf[:]) // 读取数据if err ! nil {fmt.Println(read from client failed, err:, err)break}recvStr : string(buf[:n])fmt.Println(收到client端发来的数据, recvStr)conn.Write([]byte(recvStr)) // 发送数据} }func main() {listen, err : net.Listen(tcp, 127.0.0.1:20000)if err ! nil {fmt.Println(listen failed, err:, err)return}for {conn, err : listen.Accept() // 建立连接if err ! nil {fmt.Println(accept failed, err:, err)continue}go process(conn) // 启动一个goroutine处理连接} }TCP客户端 一个TCP客户端进行TCP通信的流程如下 建立与服务端的连接进行数据收发关闭连接 使用Go语言的net包实现的TCP客户端代码如下 // 客户端 func main() {conn, err : net.Dial(tcp, 127.0.0.1:20000)if err ! nil {fmt.Println(err :, err)return}defer conn.Close() // 关闭连接inputReader : bufio.NewReader(os.Stdin)for {input, _ : inputReader.ReadString(\n) // 读取用户输入inputInfo : strings.Trim(input, \r\n)if strings.ToUpper(inputInfo) Q { // 如果输入q就退出return}_, err conn.Write([]byte(inputInfo)) // 发送数据if err ! nil {return}buf : [512]byte{}n, err : conn.Read(buf[:])if err ! nil {fmt.Println(recv failed, err:, err)return}fmt.Println(string(buf[:n]))} }UDP编程 UDP协议User Datagram Protocol中文名称是用户数据报协议是OSIOpen System Interconnection开放式系统互联参考模型中一种无连接的传输层协议不需要建立连接就能直接进行数据发送和接收属于不可靠的、没有时序的通信但是UDP协议的实时性比较好通常用于视频直播相关领域 UDP服务端 使用Go语言的net包实现的UDP服务端代码如下 // UDP server端 func main() {listen, err : net.ListenUDP(udp, net.UDPAddr{IP: net.IPv4(0, 0, 0, 0),Port: 30000,})if err ! nil {fmt.Println(listen failed, err:, err)return}defer listen.Close()for {var data [1024]byten, addr, err : listen.ReadFromUDP(data[:]) // 接收数据if err ! nil {fmt.Println(read udp failed, err:, err)continue}fmt.Printf(data:%v addr:%v count:%v\n, string(data[:n]), addr, n)_, err listen.WriteToUDP(data[:n], addr) // 发送数据if err ! nil {fmt.Println(write to udp failed, err:, err)continue}} }UDP客户端 使用Go语言的net包实现的UDP客户端代码如下 // UDP 客户端 func main() {socket, err : net.DialUDP(udp, nil, net.UDPAddr{IP: net.IPv4(0, 0, 0, 0),Port: 30000,})if err ! nil {fmt.Println(连接服务端失败err:, err)return}defer socket.Close()sendData : []byte(Hello server)_, err socket.Write(sendData) // 发送数据if err ! nil {fmt.Println(发送数据失败err:, err)return}data : make([]byte, 4096)n, remoteAddr, err : socket.ReadFromUDP(data) // 接收数据if err ! nil {fmt.Println(接收数据失败err:, err)return}fmt.Printf(recv:%v addr:%v count:%v\n, string(data[:n]), remoteAddr, n) }http编程 web工作流程 Web服务器的工作原理可以简单地归纳为 客户机通过TCP/IP协议建立到服务器的TCP连接客户端向服务器发送HTTP协议请求包请求服务器里的资源文档服务器向客户机发送HTTP协议应答包如果请求的资源包含有动态语言的内容那么服务器会调用动态语言的解释引擎负责处理“动态内容”并将处理得到的数据返回给客户端客户机与服务器断开。由客户端解释HTML文档在客户端屏幕上渲染图形结果 HTTP协议 超文本传输协议(HTTPHyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议它详细规定了浏览器和万维网服务器之间互相通信的规则通过因特网传送万维网文档的数据传送协议HTTP协议通常承载于TCP协议之上 HTTP服务端 package mainimport (fmtnet/http )func main() {//http://127.0.0.1:8000/go// 单独写回调函数http.HandleFunc(/go, myHandler)// addr监听的地址// handler回调函数http.ListenAndServe(127.0.0.1:8000, nil) }// handler函数 func myHandler(w http.ResponseWriter, r *http.Request) {fmt.Println(r.RemoteAddr, 连接成功)// 请求方式GET POST DELETE PUT UPDATEfmt.Println(method:, r.Method)// /gofmt.Println(url:, r.URL.Path)fmt.Println(header:, r.Header)fmt.Println(body:, r.Body)// 回复w.Write([]byte(hello)) }HTTP客户端 package mainimport (fmtionet/http )func main() {//resp, _ : http.Get(http://www.baidu.com)//fmt.Println(resp)resp, _ : http.Get(http://127.0.0.1:8000/go)defer resp.Body.Close()// 200 OKfmt.Println(resp.Status)fmt.Println(resp.Header)buf : make([]byte, 1024)for {// 接收服务端信息n, err : resp.Body.Read(buf)if err ! nil err ! io.EOF {fmt.Println(err)return} else {fmt.Println(读取完毕)res : string(buf[:n])fmt.Println(res)break}} }WebSocket编程 WebSocket是一种在单个TCP连接上进行全双工通信的协议WebSocket使得客户端和服务器之间的数据交换变得更加简单允许服务端主动向客户端推送数据在WebSocket API中浏览器和服务器只需要完成一次握手两者之间就直接可以创建持久性的连接并进行双向数据传输需要安装第三方包 cmd中go get -u -v github.com/gorilla/websocket 聊天室的小例子 在同一级目录下新建四个go文件connection.go|data.go|hub.go|server.go 运行 go run server.go hub.go data.go connection.go运行之后执行local.html文件 #server.go文件代码 package mainimport (fmtnet/httpgithub.com/gorilla/mux )func main() {router : mux.NewRouter()go h.run()router.HandleFunc(/ws, myws)if err : http.ListenAndServe(127.0.0.1:8080, router); err ! nil {fmt.Println(err:, err)} }#hub.go文件代码 package mainimport encoding/jsonvar h hub{c: make(map[*connection]bool),u: make(chan *connection),b: make(chan []byte),r: make(chan *connection), }type hub struct {c map[*connection]boolb chan []byter chan *connectionu chan *connection }func (h *hub) run() {for {select {case c : -h.r:h.c[c] truec.data.Ip c.ws.RemoteAddr().String()c.data.Type handshakec.data.UserList user_listdata_b, _ : json.Marshal(c.data)c.sc - data_bcase c : -h.u:if _, ok : h.c[c]; ok {delete(h.c, c)close(c.sc)}case data : -h.b:for c : range h.c {select {case c.sc - data:default:delete(h.c, c)close(c.sc)}}}} }#data.go文件代码 package maintype Data struct {Ip string json:ipUser string json:userFrom string json:fromType string json:typeContent string json:contentUserList []string json:user_list }#connection.go文件代码 package mainimport (encoding/jsonfmtnet/httpgithub.com/gorilla/websocket )type connection struct {ws *websocket.Connsc chan []bytedata *Data }var wu websocket.Upgrader{ReadBufferSize: 512,WriteBufferSize: 512, CheckOrigin: func(r *http.Request) bool { return true }}func myws(w http.ResponseWriter, r *http.Request) {ws, err : wu.Upgrade(w, r, nil)if err ! nil {return}c : connection{sc: make(chan []byte, 256), ws: ws, data: Data{}}h.r - cgo c.writer()c.reader()defer func() {c.data.Type logoutuser_list del(user_list, c.data.User)c.data.UserList user_listc.data.Content c.data.Userdata_b, _ : json.Marshal(c.data)h.b - data_bh.r - c}() }func (c *connection) writer() {for message : range c.sc {c.ws.WriteMessage(websocket.TextMessage, message)}c.ws.Close() }var user_list []string{}func (c *connection) reader() {for {_, message, err : c.ws.ReadMessage()if err ! nil {h.r - cbreak}json.Unmarshal(message, c.data)switch c.data.Type {case login:c.data.User c.data.Contentc.data.From c.data.Useruser_list append(user_list, c.data.User)c.data.UserList user_listdata_b, _ : json.Marshal(c.data)h.b - data_bcase user:c.data.Type userdata_b, _ : json.Marshal(c.data)h.b - data_bcase logout:c.data.Type logoutuser_list del(user_list, c.data.User)data_b, _ : json.Marshal(c.data)h.b - data_bh.r - cdefault:fmt.Print(default)}} }func del(slice []string, user string) []string {count : len(slice)if count 0 {return slice}if count 1 slice[0] user {return []string{}}var n_slice []string{}for i : range slice {if slice[i] user i count {return slice[:count]} else if slice[i] user {n_slice append(slice[:i], slice[i1:]...)break}}fmt.Println(n_slice)return n_slice }#local.html文件代码 !DOCTYPE html html headtitle/titlemeta http-equivcontent-type contenttext/html;charsetutf-8stylep {text-align: left;padding-left: 20px;}/style /head body div stylewidth: 800px;height: 600px;margin: 30px auto;text-align: centerh1演示聊天室/h1div stylewidth: 800px;border: 1px solid gray;height: 300px;div stylewidth: 200px;height: 300px;float: left;text-align: left;pspan当前在线:/spanspan iduser_num0/span/pdiv iduser_list styleoverflow: auto;/div/divdiv idmsg_list stylewidth: 598px;border: 1px solid gray; height: 300px;overflow: scroll;float: left;/div/divbrtextarea idmsg_box rows6 cols50 onkeydownconfirm(event)/textareabrinput typebutton value发送 onclicksend() /div /body /html script typetext/javascriptvar uname prompt(请输入用户名, user uuid(8, 16));var ws new WebSocket(ws://127.0.0.1:8080/ws);ws.onopen function () {var data 系统消息建立连接成功;listMsg(data);};ws.onmessage function (e) {var msg JSON.parse(e.data);var sender, user_name, name_list, change_type;switch (msg.type) {case system:sender 系统消息: ;break;case user:sender msg.from : ;break;case handshake:var user_info {type: login, content: uname};sendMsg(user_info);return;case login:case logout:user_name msg.content;name_list msg.user_list;change_type msg.type;dealUser(user_name, change_type, name_list);return;}var data sender msg.content;listMsg(data);};ws.onerror function () {var data 系统消息 : 出错了,请退出重试.;listMsg(data);};function confirm(event) {var key_num event.keyCode;if (13 key_num) {send();} else {return false;}}function send() {var msg_box document.getElementById(msg_box);var content msg_box.value;var reg new RegExp(\r\n, g);content content.replace(reg, );var msg {content: content.trim(), type: user};sendMsg(msg);msg_box.value ;}function listMsg(data) {var msg_list document.getElementById(msg_list);var msg document.createElement(p);msg.innerHTML data;msg_list.appendChild(msg);msg_list.scrollTop msg_list.scrollHeight;}function dealUser(user_name, type, name_list) {var user_list document.getElementById(user_list);var user_num document.getElementById(user_num);while(user_list.hasChildNodes()) {user_list.removeChild(user_list.firstChild);}for (var index in name_list) {var user document.createElement(p);user.innerHTML name_list[index];user_list.appendChild(user);}user_num.innerHTML name_list.length;user_list.scrollTop user_list.scrollHeight;var change type login ? 上线 : 下线;var data 系统消息: user_name 已 change;listMsg(data);}function sendMsg(msg) {var data JSON.stringify(msg);ws.send(data);}function uuid(len, radix) {var chars 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz.split();var uuid [], i;radix radix || chars.length;if (len) {for (i 0; i len; i) uuid[i] chars[0 | Math.random() * radix];} else {var r;uuid[8] uuid[13] uuid[18] uuid[23] -;uuid[14] 4;for (i 0; i 36; i) {if (!uuid[i]) {r 0 | Math.random() * 16;uuid[i] chars[(i 19) ? (r 0x3) | 0x8 : r];}}}return uuid.join();} /script uuid(len, radix) {var chars 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz.split();var uuid [], i;radix radix || chars.length;if (len) {for (i 0; i len; i) uuid[i] chars[0 | Math.random() * radix];} else {var r;uuid[8] uuid[13] uuid[18] uuid[23] -;uuid[14] 4;for (i 0; i 36; i) {if (!uuid[i]) {r 0 | Math.random() * 16;uuid[i] chars[(i 19) ? (r 0x3) | 0x8 : r];}}}return uuid.join();} /script
http://www.hkea.cn/news/14360683/

相关文章:

  • 北京网站制建设公司华容网站定制
  • 做直播网站需要学什么北京网站开发培训
  • 无锡网站制作哪家正规服务器安装WordPress没有权限访问
  • 企业手机网站源码电脑培训零基础培训班
  • 手机上上建设网站敏捷开发项目管理工具
  • 个人 做自媒体 建网站创意网站
  • 综合门户网站建设设计素材免费下载
  • 邯郸网站建设地方建立企业网站的费用
  • 定西建设厅网站网站是用dw做的吗
  • 做盗版视频网站wordpress获取文章的标签
  • 免费行情软件网站下载wordpress中常用插件安装包
  • 网站建设与管理 第2版做旅游网站的要求
  • 做好的网页上传到wordpress前端seo优化
  • 免费网站模板html网站跳转qq
  • 无锡企业网站排名怎样才能建立自已的网站
  • 重庆网站推广系统重庆国外网站推广
  • 医院网站和微信公众号建设方案漫画网站建设教程视频
  • 淄博网站制作定制品牌网站建设的好处有什么用
  • 成都网页设计与网站建设云南建设厅官方网站
  • 高端网站建设谷美wordpress怎么注册用户名
  • 北京专业制作网站公司阿里云网站建设套餐
  • 北京性价比网站建设网店设计的意义
  • 单位门户网站建设工作建议wordpress国外主题破解
  • 网站主题及样式优化深圳 倡导居家办公
  • 企业网站的制作及维护wordpress 结构化数据
  • 惠州惠城网站建设东昌府区住房和城乡建设局网站
  • 济南网络推广新网站上线怎么做seo
  • 建个网站 网页空间多少网站开发都学什么
  • 网站域名怎样注销万能浏览器网页版
  • 设计网站案例网站义乌做网站多少钱