網絡通訊的流程 | 初始socket

主要內容:瀏覽器

  • 1.客戶端 \ 服務端架構
  • 2.網絡通訊的整個流程
  • 3.DNS服務器
  • 4.交換機,路由器和網關(含DHCP)
  • 5.初識socket

1.客戶端 \ 服務端架構服務器

   客戶端英文名稱:Client,服務端英文名稱Server, 所謂C\S架構就是說Client\Server微信

  • 硬件C\S架構:打印機
  • 軟件C\S架構:QQ,微信,優酷,瀏覽器 (其中瀏覽器又比較特殊,不少網站是基於瀏覽器來進行訪問的,瀏覽器和各個網站服務端進行的通信方式又常被成爲B\S架構(瀏覽器英文名稱:Browser)

2.網絡通訊的整個流程網絡

  以本地的電腦上的瀏覽器去訪問的京東網站的整個流程這種B\S架構來舉例架構

(1)網卡和mac 地址socket

  • 電腦插網線的地方就叫作網卡,網卡提供了網絡的接口,這是硬件上面的,關於電腦的網卡,並非Ip地址,而是全球惟一的mac地址,專門給網絡設備設定,電腦出廠的時候給定的
  • head中包含的源和目標地址由來:ethernet規定接入internet的設備都必須具有網卡,發送端和接收端的地址即是指網卡的地址,即mac地址。   
  • mac地址:每塊網卡出廠時都被燒製上一個世界惟一的mac地址,長度爲48位2進制,一般由12位16進制數表示(前六位是廠商編號,後六位是流水線號)

(2) IP地址網站

(1)IP地址的格式編碼

編碼的回顧: 一個字節等於8位,8個2進制的數能夠表示256個字節此處IP地址是由點分割的四個十進制的數,而十進制的數在計算機中是由二進制表示的,即spa

  • 0.0.0.0--255.255.255.255                   (十進制)
  • 0000000.00000000.00000000.00000000 -- 11111111.11111111.11111111.11111111   (二進制)

(2)網絡配置的大體方法code

 

 配置好本身電腦的網絡信息以後,咱們就有了身份證(mac地址)和名字(IP地址),經過他們,咱們就在網絡中有了本身的身份,只要有網,咱們就能夠正大光明的和別人進行通訊了

(2)網絡通訊流程

arp協議功能:廣播的方式發送數據包,獲取目標主機的mac地址

流程:

第一步:打開瀏覽器,想要請求訪問京東,在地址欄輸入了網址: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地址都是惟一的,不可重複)

       若是隻有內網的ip地址你是不能上網的,你上網確定要經過一個外網地址,這個外網地址又稱爲公網地址,這個公網地址是全球惟一的,他在你的對外出口的路由器上,也就是你的外網網關地址

 3.DNS服務器

 4.交換機,路由器和網關(含DHCP)

(1)網關

那麼網關究竟是什麼呢?網關實質上是一個網絡通向其餘網絡的IP地址。好比有網絡A和網絡B,網絡A的IP地址範圍爲 「192.168.1.1~192. 168.1.254」,子網掩碼爲255.255.255.0;網絡B的IP地址範圍爲「192.168.2.1~192.168.2.254」,子網掩碼爲255.255.255.0。在沒有路由器的狀況下,兩個網絡之間是不能進行TCP/IP通訊的,即便是兩個網絡鏈接在同一臺交換機(或集線器)上, TCP/IP協議也會根據子網掩碼(255.255.255.0)斷定兩個網絡中的主機處在不一樣的網絡裏。而要實現這兩個網絡之間的通訊,則必須經過網關。若是網絡A中的主機發現數據包的目的主機不在本地網絡中,就把數據包轉發給它本身的網關,再由網關轉發給網絡B的網關,網絡B的網關再轉發給網絡B的某個主機。網絡B向網絡A轉發數據包的過程也是如此。

(2)路由器&交換機

路由器對外部網絡的通訊都是經過外網接口(wan口)去轉發出去的,也就是無論你是內網中的哪一個電腦,你的請求都要經過路由的外網接口發送出去,別人對你的請求都是經過外網接口接收進來的,

至於路由器上對內的lan口是怎麼分配IP地址給內網的,要看路由器怎麼設置劃分vlan也就是子網(內部局域網),每一個lan口的IP地址能夠是靜態的,也能夠是動態分配的(DHCP協議),並且能夠劃分網段,例如:個人1號lan口對接的網段是192.168.1.0-192.168.1.255,那麼全部這個網段的電腦的信息進出都走這個lan口到路由器上,對於鏈接路由器的交換機來說,主要的做用就是搭橋用的,搭橋的意思就是讓鏈接該交換機的全部電腦都可以鏈接起來,只要是同一個網段的互相均可以進行通訊,固然這個也要看交換機怎麼配置,

(3)DHCP

DHCP(Dynamic Host Configuration Protocol,動態主機配置協議)是一個局域網的網絡協議,使用UDP協議工做, 主要有兩個用途:給內部網絡或網絡服務供應商自動分配IP地址,給用戶或者內部網絡管理員做爲對全部計算機做中央管理的手段 交換機又分二層交換機和三層交換機,二層交換機主要就是個搭橋的做用,三層交換機還兼有路由的做用,通常如今的交換機都有DHCP功能,也就是說交換機下面鏈接的這些電腦的子網IP或者說是局域網IP也能夠由交換機來動態生成和分配,路由器和交換機所生成的子網IP都是本身在路由器和交換機上設置的,和路由器上的外網IP沒有關係,具體的劃分又分爲24位的16位的等等,舉例:24位的就是10.11.1.0-10.11.1.255這256個IP地址,0表示後面的8bit是00000000,255表示後面的8bit是11111111

 

5.初識socket

 

#編寫服務端
import socket
#建立一個socket對象
server = socket.socket()    #建立一個手機
ip_port =("192.168.15.51",8900)
#綁定ip地址和端口
server.bind(ip_port)
#監聽ip地址和端口
server.listen()
print("等待中...0101")
#等待客戶端的鏈接
conn,addr = server.accept()       #阻塞住

#接受消息
from_client_msg = conn.recv(1024)
#接收的消息是bytes類型,須要轉換爲字符串
print(from_client_msg.decode("utf-8"))

conn.send("蓋澆飯".encode("utf-8"))
conn.close()
server.close()

 

#編寫客戶端
import socket
client = socket.socket()
server_ip_port = ("192.168.15.51",8900)

#鏈接服務端
client.connect(server_ip_port)

#發消息
client.send("中午吃啥".encode("utf-8"))           #send裏的消息必須是字節類型

from_server_msg = client.recv(1024)
print(from_server_msg.decode("utf-8"))

#關閉鏈接
client.close()

 交互式的應答:

#編寫服務端
import socket
server = socket.socket()
ip_port = ("192.168.15.51",8900)

server.bind(ip_port)
server.listen()
print("等待消息中...0101")

conn , addr = server.accept()             #等待客戶鏈接

#能夠接收消息
while 1:
    from_client_msg = conn.recv(1024)
    print(from_client_msg.decode("utf-8"))
    msg = input("客服:")
    conn.send(msg.encode("utf-8"))

conn.close()
server.close()
#編寫服務端
import socket
client = socket.socket()
server_ip_port = ("192.168.15.51",8900)
client.connect(server_ip_port)

#發消息

while 1:
    msg = input("客戶留言:")
    client.send(msg.encode("utf-8"))
    from_server_msg = client.recv(1024)
    print(from_server_msg.decode("utf-8"))

client.close()

練習題

相關文章
相關標籤/搜索