Python基礎26_C/S架構, 網路通訊流程, 初識socket
一. C/S架構(客戶端Client/服務端Server架構)
1. 硬體 C/S架構: 印表機
2. 軟體 C/S架構: qq. 優酷. 瀏覽器等, 其中瀏覽器又比較特殊, 很對網站是基於瀏覽器來訪問的, 瀏覽器和各個網站服務端進行的通訊方式又常被稱為B/S架構(瀏覽器Browser/服務端Server架構)
二. 網路通訊的整個流程
1. 網絡卡和mac地址
電腦想要聯網, 首先要有一個網絡卡, 而且電腦要做好相關的網路配置
電腦插網線的地方就做網絡卡,網絡卡提供了網路的介面,這是硬體上面的,大家都是到網口是吧,我怎麼找到電腦的網絡卡呢,有人說用IP地址,IP地址並不是,而是全球唯一的mac地址,專門給網路裝置設定的,是出廠的時候就給定好的,一個裝置的mac地址號碼是全球唯一的。 head中包含的源和目標地址由來:ethernet規定接入internet的裝置都必須具備網絡卡,傳送端和接收端的地址便是指網絡卡的地址,即mac地址。 mac地址:每塊網絡卡出廠時都被燒製上一個世界唯一的mac地址,長度為48位2進位制,通常由12位16進位制數表示(前六位是廠商編號,後六位是流水線號)
檢視mac地址的方法:windows下在cmd視窗輸入ipconfig -all指令:下面顯示的這個實體地址就是mac地址。
由於mac地址很難記憶,所以又出現了IP地址,配置好自己電腦的網路資訊之後,我們就有了身份證(mac地址)和名字(IP地址),通過他們,我們就在網路中有了自己的身份,只要有網,我們就可以正大光明的和別人進行通訊了。
arp協議功能:廣播的方式傳送資料包,獲取目標主機的mac地址
2. 網路通訊流程描述:
第一步:開啟瀏覽器,想要請求訪問京東,在位址列輸入了網址:www.jd.com。(www.jd.com是域名就是一個IP地址的名稱,IP地址不好記,所有有了域名。)
第二步:先將請求資訊發給了交換機,然後交給了路由器,路由發給DNS伺服器,通過DNS協議去找我們要訪問的京東的IP地址:
第三步:查到的京東伺服器對應的IP地址之後,路由器通過路由協議找到一個路由轉發的最優路徑,將你的請求資訊還送給這個IP地址的京東的路由器
第四步:京東的路由器發給了京東網站的伺服器上
第五步:京東網站伺服器按照來的時候的路徑,在返回給你他自己的網站
第六步:當你開啟瀏覽器的時候,你的電腦給你的瀏覽器這個執行起來的程式給了一個編號,叫做埠號,當你的電腦收到京東傳送過來的訊息的時候,你的電腦通過埠號找到你的瀏覽器,你的瀏覽器拿到了京東的網站資訊,然後將網站呈現在了自己的瀏覽器上
3. 內網和外網:
所謂內網就是我們平常說的區域網。區域網就是在固定的一個地理區域內由2臺以上的電腦用網線和其他網路裝置搭建而成的一個封閉的計算機組。它可以是鄰居之間的2臺電腦,也可以是一幢100層大樓裡的1000臺電腦。區域網可以是獨立封閉執行的,也可以是和外網相連線的。
所謂外網,也就是廣域網。是一種地域跨度非常大的網路集合。它是由無數個區域網+獨立伺服器構成的。注意,此處所說的區域網既可以是小型的廣域網,也可以是區域網。
實際上,從規模上來看我們很難分辨區域網與廣域網,因為大小都是相對的。所以。真正區域網與廣域網的分別是通過IP地址來實現的。
任何一臺電腦要上網,都必須在網路上有一個唯一的IP地址。在區域網內,這個IP地址是唯一的。但是在另外一個區域網,這個IP地址仍然能夠使用。
網路A裡有一臺IP地址為192.168.1.231的客戶端,網路B裡也可以有一臺同樣IP的電腦。那麼。我們就說這2臺機器分別在2個局域網裡。但是在廣域網內,所有的IP地址都是唯一的。山西電信的DNS伺服器IP地址是61.134.1.4.那麼,這個地址在全世界都是唯一的,不可重複的。這就是廣域網和區域網的區別。
如果只有內網的ip地址你是不能上網的,你上網肯定要通過一個外網地址,這個外網地址又稱為公網地址,這個公網地址是全球唯一的,他在你的對外出口的路由器上,也就是你的外網閘道器地址。
三. DNS伺服器
當我們請求https:\\www.JD.com的時候,首先電腦會在本地的DNS快取中找是否有這個DNS快取(DNS(Domain Name Server,域名伺服器)是進行域名(domain name)和與之相對應的IP地址 (IP address)轉換的伺服器。DNS中儲存了一張域名(domain name)和與之相對應的IP地址 (IP address)的表,以解析訊息的域名。 域名是Internet上某一臺計算機或計算機組的名稱,用於在資料傳輸時標識計算機的電子方位(有時也指地理位置)。域名是由一串用點分隔的名字組成的,通常包含組織名,而且始終包括兩到三個字母的字尾,以指明組織的型別或該域所在的國家或地區。 DNS是計算機域名系統 (Domain Name System 或Domain Name Service) 的縮寫,它是由域名解析器和域名伺服器組成的。域名伺服器是指儲存有該網路中所有主機的域名和對應IP地址,並具有將域名轉換為IP地址功能的伺服器。其中域名必須對應一個IP地址,一個IP地址可以有多個域名,而IP地址不一定有域名。域名系統採用類似目錄樹的等級結構。域名伺服器通常為客戶機/伺服器模式中的伺服器方,它主要有兩種形式:主伺服器和轉發伺服器。將域名對映為IP地址的過程就稱為“域名解析”。)本地的DNS快取是在我們訪問過一個網站之後,例如京東,那麼本地會儲存一個京東域名和京東伺服器IP地址的對映關係,將來再次請求的時候,就不用再到外部的DNS上查詢這個域名對應的IP地址了,提高了效率,如果是第一次請求,請看上面的DNS查詢過程
步驟
本地查詢順序:
瀏覽器快取: 瀏覽器會按照一定的頻率快取DNS記錄。chrome://net-internals/#dns 檢視chormeDNS快取。
作業系統快取: 如果瀏覽器快取中找不到需要的DNS記錄,那就去作業系統中找。cmd命令ipconfig /displaydns 用於檢視作業系統dns快取。
路由快取: 路由器也有DNS快取。 找本機的hosts檔案 Windows host檔案路徑: C:\WINDOWS\system32\drivers\etc\hosts (由於直接修改之後不能儲存,可以copy一份到桌面,修改之後,在替換掉原路徑下的檔案就可以了),hosts檔案以靜態對映的方式提供IP地址與主機名的對照表。
ISP(網路服務提供商):如果還是沒有,那麼就去檢查ISP有沒有吧~,每一個ISP(網路服務提供商),或一個大學,甚至是一個大學裡的系都會有一個自己的本地域名伺服器,他會在url第一次訪問時快取該域名的指向。下次再訪問時,他會從快取裡把這個url曾經指向的IP調出來。
遞迴查詢
第一步:在hosts靜態檔案、DNS解析器快取中查詢某主機的IP地址
第二步:上一步無法找到,去DNS本地伺服器(即域伺服器)查詢,其本質是去區域伺服器、伺服器快取中查詢
第三步:本地DNS伺服器查不到就向ISP(ISP是網際網路服務提供商(Internet Service Provider))的簡稱,ISP有專門的DNS伺服器應對DNS查詢請求。再找不到就根據‘根提示檔案’向負責頂級域‘.com’的DNS伺服器查詢
第四步:'根DNS伺服器'根據查詢域名中的'xyz.com',再向xyz.com的區域伺服器查詢
第五步:www.xyz.abc.com的DNS伺服器直接解析該域名,將查詢到的ip再原路返回給請求查詢的主機
迭代查詢:
第一步:在hosts靜態檔案、DNS解析器快取中查詢某主機的IP地址
第二步:上一步無法找到,在DNS本地伺服器(即域伺服器)查詢所有本層次的區域伺服器
第三步:本地DNS伺服器查不到就向ISP是網際網路服務提供商(Internet Service Provider)的簡稱,ISP有專門的DNS伺服器應對DNS查詢請求。再找不到就查詢上一層次的所有區域伺服器,以此類推直至根域名DNS伺服器‘.’
第四步:到達根域名伺服器後又向下查詢,直至查到結果為止。
迭代查詢與遞迴查詢結合
遞迴查詢需要經過逐層查詢才能獲得查詢結果,當查詢具有許多層次的DNS結構時效率很低,所以一般採用兩者相結合的查詢方式。
第一步:在hosts靜態檔案、DNS解析器快取中查詢某主機的ip地址
第二步:上一步無法找到,去DNS本地伺服器(即域伺服器)查詢,其本質是去區域伺服器、伺服器快取中查詢
第三步:本地DNS伺服器查不到就向ISP是網際網路服務提供商(Internet Service Provider)的簡稱,ISP有專門的DNS伺服器應對DNS查詢請求。再找不到就根據‘根提示檔案’向負責頂級域‘.com’的根DNS伺服器查詢
第四步:根DNS伺服器直接將其區域DNS伺服器的ip地址返回給本地伺服器,而不用再向xyz.com的區域伺服器查詢。
第五步:(京東有自己DNS伺服器)本地DNS伺服器將結果返回給請求的主機
四. 總結及其他一些內容簡介
最後,至於路由是如何進行轉發的、內部路由表是如何儲存的、閘道器是如何計算最後傳輸路線的、路由的內網是如何劃分的、DHCP和靜態IP是如何設定的,DHCP又是如何分配IP地址的,交換機內部工作原理、路由和交換機如何進行配置等等,我們在本篇部落格上就不進行深入研究了,本篇部落格是為了讓小白同學熟悉一下網路相關知識。謝謝大家諒解,如何大家想了解其他的內容,請給我留言,我就會把相關內容整理出來,分享給大家。你的問題是我們共同進步的動力。
為什麼說qq這種p2p的網路通訊方式比較特殊呢,因為它是兩個區域網的電腦或者手機進行通訊,雙方不能確定對方的IP地址,因為你的qq也不知道在哪裡登陸,用什麼網路,對吧,也就是說雙方不知道對方的IP地址,怎麼辦,需要藉助第三方承接,就是騰訊,那麼這裡面就涉及到了udp打洞,net穿透等技術,有興趣的可以去了解一下,騰訊為什麼nb,也是因為它基本上是國內第一家實現了這些技術的公司,讓我們的qq溝通更加方便。
五. 初識socket
1. 服務端Server
import socet
server = socket.socket()
ip_port = ("192.168.12.67", 8900)
server.bind(ip_port)
server.listen()
conn, addr = server.accept()
from_client_msg = conn.recv(1024)
print(from_client_msg.decode("utf-8"))
conn.close()
server.close()
2. 客戶端Client
import socket
client = socket.socket()
server_ip_port = ("192.168.12.67", 8900)
client.connect(server_ip_port)
to_server_msg = input("輸入對server傳送的資訊:")
client.send(to_server_msg.encode("utf-8"))
client.close()