网络基础 + 简易服务端和客户端
網(wǎng)絡(luò)架構(gòu)及其演變過程
單機(jī)架構(gòu)
- 就只有一個(gè)客戶端,不需要和服務(wù)器交換數(shù)據(jù)CS架構(gòu)
- 客戶端(Client)--- 服務(wù)端(Server) - - 客戶端:用戶安裝軟件 - - 服務(wù)端:統(tǒng)一管理數(shù)據(jù)庫的主機(jī)中的軟件就叫做服務(wù)端,再后來服務(wù)端不只是管理數(shù)據(jù),外加處理業(yè)務(wù)邏輯CS架構(gòu)要求
- 要求操作系統(tǒng)安裝客戶端;產(chǎn)商操作系統(tǒng)部署服務(wù)端 - 每個(gè)用戶需要獨(dú)立安裝軟件、服務(wù)端升級也要每個(gè)用戶升級面試題:數(shù)據(jù)放在服務(wù)端和客戶端的利與弊?
數(shù)據(jù)如果放在服務(wù)端處理安全性,穩(wěn)定性而且升級很容易,但是對于服務(wù)器的負(fù)荷比較大 數(shù)據(jù)如果放在客戶端處理,安全性、穩(wěn)定性會(huì)降低,并且升級需要每個(gè)客戶端都去升級,不利于節(jié)約網(wǎng)絡(luò)資源BS架構(gòu)
- 瀏覽器(Browser) --- 服務(wù)端(Server) - 統(tǒng)一客戶端即默認(rèn)安裝用戶電腦中的資源,訪問同種類的網(wǎng)站,具體業(yè)務(wù)的處理根據(jù)相應(yīng)的協(xié)議和標(biāo)磚提供的服務(wù)器程序,在服務(wù)器中處理- 原理上來說BS架構(gòu)其實(shí)就是CS架構(gòu),就現(xiàn)在來說BS架構(gòu)與OS架構(gòu)的區(qū)別: 在技術(shù)架構(gòu),核心技術(shù),在線預(yù)訂等層面上來說BS架構(gòu)其實(shí)是優(yōu)于CS架構(gòu)的,但在原理上來說BS架構(gòu)其實(shí)也是一個(gè)cs架構(gòu),因?yàn)锽S的瀏覽器端,其實(shí)也可以說成是客戶端互聯(lián)網(wǎng)的組成
互聯(lián)網(wǎng)的組成(教材)
互聯(lián)網(wǎng)的拓?fù)浣Y(jié)構(gòu)非常復(fù)雜,并且在地理位置上覆蓋了全球,從工作方式上看,可以劃分為兩大塊:
- 1.邊緣結(jié)構(gòu):這部分由所有連接在互聯(lián)網(wǎng)上的主機(jī)組成,這部分是用戶直接使用的,用來進(jìn)行通信和資源共享
- 2.核心部分:由大量網(wǎng)絡(luò)和連接這些網(wǎng)絡(luò)的路由器組成,這部分用來為邊緣結(jié)構(gòu)提供服務(wù).
以上是教材中所劃分的:
互聯(lián)網(wǎng)的組成(科普):
說道互聯(lián)網(wǎng)大家都不陌生,利用互聯(lián)網(wǎng)打開手機(jī)或者電腦看新聞,刷淘寶,看抖音,現(xiàn)在的互聯(lián)網(wǎng)已然成為了人們生活的一部分
區(qū)塊鏈號稱是下一代互聯(lián)網(wǎng)
互聯(lián)網(wǎng)的基礎(chǔ)設(shè)施非常龐大,包含硬件,軟件兩部分.下面我們先來看一下當(dāng)你打開你的瀏覽器沒輸入一個(gè)網(wǎng)址,這樣一個(gè)簡單的動(dòng)作,有計(jì)算機(jī)實(shí)現(xiàn)的過程:
- 1.瀏覽器檢查是否有緩存過域名對應(yīng)ip地址
- 2.如果沒有緩存的域名對應(yīng)的ip,請求域名服務(wù)器解析成對應(yīng)的ip地址
- 3.瀏覽器建立Scoket連接,根據(jù)http協(xié)議組裝get類型的http header,通過tcp/ip發(fā)送報(bào)文.
- 4.tcp/ip協(xié)議會(huì)通過網(wǎng)絡(luò)層網(wǎng)卡(wifi或者網(wǎng)線)發(fā)射信號到家庭的路由器,家里面的路由器發(fā)送信號到電訊廠商的交換機(jī)中,
找到目標(biāo)服務(wù)器,服務(wù)器也許托管在IDC機(jī)房,也許在阿里云VPS,也許在國外
- 5.機(jī)房里面有很多大型的交換機(jī),機(jī)柜,專業(yè)的精密空調(diào),你要訪問的那臺ip的服務(wù)器就在某個(gè)機(jī)柜中
- 6.在服務(wù)器接收到信號后,會(huì)根據(jù)tcp/ip協(xié)議解出http的協(xié)議頭,根據(jù)get的請求決定需要返回的數(shù)據(jù)
- 7.在服務(wù)器端實(shí)際上根據(jù)業(yè)務(wù)還有很復(fù)雜的邏輯,服務(wù)器后面還有很多臺服務(wù)器,到底指定那一臺服務(wù)器來處理請求,需要負(fù)載均衡設(shè)備來完成
- 8.要返回的數(shù)據(jù)是在緩存里面,還是在靜態(tài)文件中,還是在數(shù)據(jù)庫中.
- 9 .根據(jù)瀏覽器返回的數(shù)據(jù),發(fā)現(xiàn)一些靜態(tài)資源(css,js等)時(shí)又重新發(fā)起新的http請求,而這些靜態(tài)資源文件可能在CDN網(wǎng)絡(luò)中,請求靜態(tài)資源的整個(gè)過程需要從第一步再走一遍.并且很可能中間經(jīng)過的交互機(jī),路由的過程是不一樣的
互聯(lián)網(wǎng)的硬件組成
- 1.終端設(shè)備- 2.網(wǎng)絡(luò)設(shè)備- 3.主機(jī)設(shè)備互聯(lián)網(wǎng)的軟件組成
- 1.網(wǎng)路協(xié)議類- 2.操作系統(tǒng)類- 3.平臺中間插件類- 4.應(yīng)用類OSI七層協(xié)議
互聯(lián)網(wǎng)的本質(zhì)其實(shí)就是一些列的網(wǎng)絡(luò)協(xié)議,這個(gè)協(xié)議就叫做OSI協(xié)議,是人為劃分的,主要是區(qū)別每一層的作用,方便理解
七層:應(yīng)用層,表示層,會(huì)話層,傳輸層,網(wǎng)絡(luò)層,數(shù)據(jù)鏈路層,物理層
五層:應(yīng)用層,傳輸層,網(wǎng)絡(luò)層,數(shù)據(jù)鏈路層,物理層
四層:應(yīng)用層,傳輸層,網(wǎng)絡(luò)層,網(wǎng)絡(luò)接口層
以上這三張劃分方式其實(shí)意義是一樣的,只是人記得不同而已
1.物理層:接收高低壓電平
2.數(shù)據(jù)鏈路層:解釋高低壓電平,將一電信號劃分為一個(gè)一個(gè)的數(shù)據(jù)包,數(shù)據(jù)幀(由報(bào)頭和數(shù)據(jù)組成)
-head包含(固定18個(gè)字節(jié))
- 發(fā)送者/源地址 6個(gè)字節(jié)
- 接收者/目標(biāo)地址 6個(gè)字節(jié)
- 數(shù)據(jù)類型 6個(gè)字節(jié)
-data包含:(最短46個(gè)自己,最長1500個(gè)字節(jié))
3.網(wǎng)絡(luò)層:引入一套新的地址用來區(qū)分不同的廣播域/子網(wǎng),這套地址即網(wǎng)絡(luò)地址
- 規(guī)定網(wǎng)絡(luò)地址的協(xié)議叫做IP協(xié)議,定義的地址叫做IP地址
4.傳輸層:建立端口到端口的通信
- 找到確定了的計(jì)算機(jī)上的應(yīng)用,就需要通過端口,端口是應(yīng)用程序與網(wǎng)卡關(guān)聯(lián)的編號
- TCP協(xié)議:
可靠傳輸(需要建立連接,三次握手,四次揮手)
- UDP協(xié)議:
不可靠傳輸(不需要建立連接,數(shù)據(jù)容易丟失,就是玩lol丟包)
5.應(yīng)用層:規(guī)定應(yīng)用層的數(shù)據(jù)格式
- TCP協(xié)議可以為各種各樣的程序傳遞數(shù)據(jù),所以就有了為各種應(yīng)用程序規(guī)定數(shù)據(jù)格式的協(xié)議存在.就構(gòu)成了應(yīng)用層
- TCP協(xié)議就是一個(gè)老好人協(xié)議,誰都能來
使用socket建立簡易的服務(wù)端和客戶端
服務(wù)端
#導(dǎo)入一個(gè)socket模塊 import socket#想象成買手機(jī)打電話:socket.SOCK_STREAM 表示建立tcp連接 ,udp連接socket.SOCK_DGRAM #買了個(gè)手機(jī) soc=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #插電話卡:綁定ip地址 傳元組:(ip,端口號) soc.bind(('192.168.11.146',8080)) #如果寫本機(jī)ip,局域網(wǎng)外部可以訪問 # soc.bind(('127.0.0.1',8080)) #如果寫127.0.0.1,只能自己訪問#開機(jī),監(jiān)聽,這個(gè)5 是半連接池的大小 soc.listen(5) #等待別人給我打電話 print('xxxx') conn,addr=soc.accept() print('yyyy') print(addr) # conn 就是通路 #接收1024個(gè)字節(jié) data=conn.recv(1024) print('我收到客戶端發(fā)的',data) #conn.send 發(fā)送數(shù)據(jù),數(shù)據(jù)必須是bytes格式 conn.send(b'xxxxx')#掛斷電話 conn.close() #銷毀手機(jī) soc.close()客戶端
import socket #創(chuàng)建一個(gè)socket對象 soc=socket.socket() #連接服務(wù)端 soc.connect(('192.168.11.146',8080)) #發(fā)送消息 soc.send(b'xxx')data=soc.recv(1024) print('我收到服務(wù)端回的',data) #關(guān)閉連接 soc.close()轉(zhuǎn)載于:https://www.cnblogs.com/xiongchao0823/p/11468977.html
總結(jié)
以上是生活随笔為你收集整理的网络基础 + 简易服务端和客户端的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 设计模式-Decorator模式
- 下一篇: 设计模式-Strategy模式