Python_架構、兩個py文件通信、庫、端口號


架構

C/S架構

  C:client  客戶端

  S:server  服務器

  CS架構是早期使用的一種架構,當然目前的各種app使用的也是這種架構,它的表現形式就是擁有專門的app。它是B/S架構的始祖。

B/S架構

  B: brows  瀏覽器

  S: server  服務器

  優點:

    統一了應用的接口(入口)。(是一個未來的發展趨勢)

  B/S架構是在C/S架構上衍生出來的架構,目前使用瀏覽器訪問類似某寶之類的網站就是使用的這種架構。他的表現形式就是不需要專門的app,在瀏覽器中輸入對應的域名,就可以完成各種需求。它是未來的發展趨勢,最大的優勢就是可以減少對個人終端的硬件配置的依賴性,可以節省內存。

通信

同一台電腦上兩個py文件通信

   同一台電腦上的兩個py文件,可以借助一個文本文件進通信。具體過程是a.py文件將數據寫入到c.txt文件中,然后b.py文件讀取c.txt文件中的信息(這個信息是a.py文件寫入的),然后b.py文件將讀取到的信息進行處理,然后將反饋信息重新寫入到c.txt文件中,最后a.py文件再從c.txt文件中獲取b.py文件反饋的信息,這樣就完成了一次通信。

 

 1 import socket
 2 #
 3 # type=SOCK_STREAM# 流  tcp協議的關鍵字
 4 #
 5 # 實例化一個socket對象 : 套接字
 6 sk = socket.socket()# 不傳參,默認使用默認參數,默認tcp協議
 7 #
 8  # '127.0.0.1':回環地址  本機默認地址
 9 sk.bind(('127.0.0.1',8090))# 開啟服務
10 #
11 sk.listen(5)# 監聽 允許多少個客戶端來連接我
12 #
13 fd,addr = sk.accept()# 等待接收客戶端連接
14 #
15 fd.close()
16 sk.close()
網絡編程代碼框架及注釋

 

 1 import socket
 2 
 3 sk = socket.socket()# 我買一個新手機
 4 sk.bind(('127.0.0.1',8090))# 買一個電話卡,裝上
 5 sk.listen(5)# 告訴了幾個人我的手機號
 6 fd,addr = sk.accept()# 等着別人給打電話
 7 
 8 while 1:
 9     msg_r = fd.recv(1024).decode('utf-8')
10     if msg_r == 'q':
11         break
12     print(msg_r)
13 
14     msg_s = input(">>>")
15     fd.send(msg_s.encode('utf-8'))
16     if msg_s == 'q':
17         break
18 
19 
20 fd.close()# 掛斷電話
21 sk.close()# 關機
sever端
 1 # 要求
 2 # 客戶端主動發送一個q,斷開連接,並且服務器也要斷開連接
 3 # 服務器端主動發送q,斷開連接,並且此時客戶端也要斷開
 4 
 5 import socket
 6 
 7 sk = socket.socket()
 8 
 9 sk.connect(('127.0.0.1',8090))
10 
11 # 收發信息的邏輯
12 while 1:
13     msg_s = input('>>>')
14     sk.send(msg_s.encode('utf-8'))
15     if msg_s == 'q':
16         break
17 
18     msg_r = sk.recv(1024).decode('utf-8')
19     if msg_r == 'q':
20         break
21     print(msg_r)
22 
23 sk.close()
client端

  先運行服務器,再運行客戶端。 

網卡

  首先需要明確的一點就是,網卡是由網卡生產廠商生產的,不是電腦廠商生產的

  網卡上有一個mac地址,又叫物理地址,全世界唯一,可作為硬件設備的唯一標識。

查看mac地址命令

ipconfig -all

ipconfig /all

  以上兩條命令都可以查看mac地址,只是兩種不同的書寫方式而已。

兩台電腦之間的通信

  兩台電腦之間通信,可以使用一根網線直接連接兩台電腦,這樣就可以進行簡單的通信。平時在我們需要在兩台電腦之間傳輸較大的文件時,可以使用這種方式,它的好處就是傳輸速度快,並且不需要移動硬盤或者U盤等。

幾十台電腦之間的通信

  多台電腦之間的通信,需要建立局域網,使用交換機或者路由器將這多台設備連接起來,在交換機或者路由器中做好配置后即可進行通信。

交換機通信

廣播

  交換機向局域網中廣播一條信息,所有電腦都可以接收到廣播的內容,可以想象下以前農村還是生產隊的時候,大隊的大喇叭,基本原理相同,也可以理解為吼一嗓子。

單播

  方向固定的向某一台主機發送消息。

組播

  向某一部分或某一組主機發送消息。

  下圖為局域網中兩台主機之間的通信,具體過程見圖:

 

   整個通信過程簡略概括如下:

    第一步:服務器1向交換機發送一條消息,這條消息包含了服務器1的IP、端口、mac地址以及目標主機的IP。

    第二步:交換機收到服務器1的消息后,向局域網中廣播一條消息,消息攜帶了服務器1的IP、端口、mac地址以及目標主機的IP。

    第三步:局域網中的所有主機收到交換機廣播的消息后,查看時候是找的自己。如果是找的自己,則將自己的IP、端口、mac地址發送給交換機,並申請和服務器1建立通信。

Ip地址

  IPV4地址是一個四位點分十進制的一串數字。

子網掩碼

  子網掩碼是計算機根據你的Ip地址產生的一個地址。

網段

  網段是根據IP地址 &(與) 子網掩碼得出的一個結果。

  先給出IP地址為192.168.12.84,子網掩碼為255.255.255.0,計算出這台計算機所在的網段。

    思路:

      第一步:將IP地址和子網掩碼轉換成二進制

      第二步:將IP地址和子網掩碼的二進制進行按位與運算,得到的結果就是二進制的網段,最后再轉換成十進制即可。

    計算過程:

      11000000.10101000.00001100.01010100  (192.168.12.84)

      1111 1111 .11111 111.111111 11 .00000000  (255.255.255.0)

  ---------------------------------------------------------------------------------

      11000000.10101000.00001100.00000000

       192     .  168   .  12    .  0

     所以這台計算機所在的網段為192.168.12.0。

二進制與十進制的轉換

二轉十

  如下圖所示,二進制數從右至左,一次是2的0次方,2的1次方,2的2次方,2的3次方...2的7次方,將每一位換算成十進制后相加起來就得到了最終想要的十進制數。

 

十轉二

  十進制轉二進制就是將十進制的數字短除2,最后將余數按順序排起來就得到了二進制數。

更多電腦之間的通信

  更多電腦之間的通信,就比如說是我們現在日常的上網,它需要建立廣域網,多台電腦通過網關、路由器、交換機等設備連接起來進行數據通信。在信息發送過程中,具體下一跳要跳在哪是要根據路由器中的路由表外加信息中的路由信息決定的。

  廣域網  交換機 + 路由器 + 代理ip

  廣域網中,

 

 

6、庫 == 模塊

    就是別人寫好的代碼,我可以直接拿來調用的.

    tcp和udp協議都是基於socket模塊來實現的,是對socket模塊的再次封裝.

    tcp

      安全可靠,面向連接,字節流服務 - - 代表沒有邊界。

 

    udp

      不安全不可靠,不面向連接,但是效率高。

 

7、端口號

  ip + port  唯一確定一台主機上的某一個程序。

  允許開發人員使用的端口范圍從 8000 開始  8000 - 10000.

 

三次握手

  具體的通信過程如下圖:

 

四次揮手

  具體的通信過程如下圖:

 OSI七層模型

  OSI七層模型,經過扁平化的處理,現在出現了兩種形式,一種是五層的,一種的四層的.具體對應關系如下圖:

 

 

小彩蛋:

    1、你知道哪些研發相關的架構?

      1) C/S架構

      2) B/S架構

 

    2、arp協議做了什么事情?

       ARP(Address Resolution Protocol,地址解析協議)是將IP地址解析為以太網MAC地址(或稱物理地址)的協議。
在局域網中,當主機或其它網絡設備有數據要發送給另一個主機或設備時,它必須知道對方的網絡層地址(即IP地址)。但是僅僅有IP地址是不夠的,因為IP數據報文必須封裝成幀才能通過物理網絡發送,因此發送站還必須有接收站的物理地址,所以需要一個從IP地址到物理地址的映射。APR就是實現這個功能的協議。
假設主機A和B在同一個網段,主機A要向主機B發送信息。具體的地址解析過程如下
      (1)主機A首先查看自己的ARP表,確定其中是否包含有主機B對應的ARP表項。如果找到了對應的MAC地址,則主機A直接利用ARP表中的MAC地址,對IP數據包進行幀封裝,並將數據包發送給主機B。
      (2)如果主機A在ARP表中找不到對應的MAC地址,則將緩存該數據報文,然后以廣播方式發送一個ARP請求報文。ARP請求報文中的發送端IP地址和發送端MAC地址為主機A的IP地址和MAC地址,目標IP地址和目標MAC地址為主機B的IP地址和全0的MAC地址。由於ARP請求報文以廣播方式發送,該網段上的所有主機都可以接收到該請求,但只有被請求的主機(即主機B)會對該請求進行處理。
      (3)主機B比較自己的IP地址和ARP請求報文中的目標IP地址,當兩者相同時進行如下處理:將ARP請求報文中的發送端(即主機A)的IP地址和MAC地址存入自己的ARP表中。之后以單播方式發送ARP響應報文給主機A,其中包含了自己的MAC地址。
      (4)主機A收到ARP響應報文后,將主機B的MAC地址加入到自己的ARP表中以用於后續報文的轉發,同時將IP數據包進行封裝后發送出去。
當主機A和主機B不在同一網段時,主機A就會先向網關發出ARP請求,ARP請求報文中的目標IP地址為網關的IP地址。當主機A從收到的響應報文中獲得網關的MAC地址后,將報文封裝並發給網關。如果網關沒有主機B的ARP表項,網關會廣播ARP請求,目標IP地址為主機B的IP地址,當網關從收到的響應報文中獲得主機B的MAC地址后,就可以將報文發給主機B;如果網關已經有主機B的ARP表項,網關直接把報文發給主機B。

 

    3、交換機的通訊方式?

      1.交換機根據收到數據幀中的源MAC地址建立該地址同交換機端口的映射,並將其寫入MAC地址表中。
      2.交換機將數據幀中的目的MAC地址同已建立的MAC地址表進行比較,以決定由哪個端口進行轉發。  
      3.如數據幀中的目的MAC地址不在MAC地址表中,則向所有端口轉發。這一過程稱為泛洪(flood)。  
      4.廣播幀和組播幀向所有的端口轉發

 

    4、你認為tcp和udp的區別?

       TCP  安全可靠,面向連接,字節流服務 - - 代表沒有邊界。

      UDP  不安全不可靠,不面向連接,但是效率高。

 

    5、請描述出osi五層模型?

      應用層

      傳輸層

      網絡層

      數據鏈路層

      物理層

 

  小彩蛋:

    1、網段ip怎么確定?

       ip地址 &(與) 子網掩碼

 

    2、請描述B/S架構的優勢

       統一了應用的接口。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM