C/S架構,網絡通訊流程.初識socket

網絡通訊:使用本身的電腦和別人的電腦進行練習併發送消息或者文件等操做。socket就是網絡通訊的工具。
一、
C/S架構:客戶端(client)/服務端(server)架構
                客戶端:指與服務器相應,爲客戶提供本地服務的程序。
                服務端:廣義:指網絡中能對其餘機器提供某些服務的計算機系統。
        B/S架構:瀏覽器(browser)/服務端(server)
 
軟件C\S架構:瀏覽器,QQ、,微信,
硬件C\S架構:打印機
 
 
二、 網絡通訊的整個流程
 ①流程圖

 

流程描述:
第一步:打開瀏覽器,想要請求訪問京東,在地址欄輸入網址:www.jd.com.(www.jd.com是域名,就是一個IP         地址的名稱,IP地址很差記,因此就有了域名
第二步:先將請求信息發給交換機,而後交給了路由器,路由發給DNS服務器,經過DNS協議去找咱們要訪問的京東的IP地址:
第三步:查到的京東服務器對應的IP地址以後,路由器經過路由協議找到路由轉發的最優路徑,將你的請求信息還送給這個IP地址的京東的路由器
第四步:京東的路由器發給了京東網站的服務器上
第五步:當你打開瀏覽器的時候,你的電腦給你的瀏覽器這個運行起來的程序給了一個編號,叫作端口號,當你的電腦收到京東發過來的消息的時候,你的電鳥經過端口號找到你的瀏覽器,你的瀏覽器拿到了京東的網站信息,而後頁面會顯示京東的網站信息
 
② 內部組件的信息
 
      集線器(HUB):將全部的電腦聯通起來,屬於數據通訊系統中的基礎設備
       交換機:交換式的集線器,多臺機器之間的網絡通訊。工做方式分爲單播,組播,廣播
                單播:客戶端與服務器之間的點到點鏈接,將信息發送給對應的一個機器。
                廣播:將要找的機器的信息發給局域網內的全部的機器
      網卡:接受處理電信號,電腦插網線的地方叫作網卡,網卡提供了網絡的接口
      MAC地址(物理地址):1C-1B-0D-74-43-9A ,長度爲48爲2進制,一般由12爲16進制數表示( 前三位廠商編號,後三位生產流水號),全球惟一的,也就是網絡設備的身份證號,可是不能用MAC地址來找尋機器。
    IP地址:由4個點分十進制組成,由點分割的四個十進制的數,在計算機中則由二進制組成,以下
ipv4  它能夠設置成靜態的,也能夠自動獲取
二進制:00000000.00000000.00000000.00000000  - 11111111.11111111.11111111.11111111,
十進制:0.0.0.0 - 255.255.255.255

ipv6 python

0.0.0.0.0.0 - 255.255.255.255.255.255

  

127.0.0.1 是回送地址,指本地機,通常用來測試使用,主要用於網絡軟件測試一級本地機進程間通訊。不管什麼程序,一旦使用會送地址發送數據,協議軟件當即返回,不進行任何網絡傳輸(來自百度百科)
 
IP地址段:192.168.12.0 - 192.168.12.255  同一IP地址段,稱爲同一子網,以廣播的形式通訊。
 
子網掩碼:   表示子網絡特徵的一個參數,255.255.255.0。判斷任意兩個IP地址是否處在同一子網絡。方法時將兩個IP地址域子網掩碼分別進行and運算(兩個數位都爲1,運算結果爲1,不然爲0)。而後比較結果是否相同,若是是的話就標名他們在同一個自網絡,不然就不是。
 
好比:已知IP地址172.16.10.1和172.16.10.2的子網掩碼都是255.255.255.0,請問它們是否在同一個子網絡?二者與子網掩碼分別進行AND運算,
   172.16.10.1:10101100.00010000.00001010.000000001
  255255.255.255.0:11111111.11111111.11111111.00000000
  AND運算得網絡地址結果:10101100.00010000.00001010.000000001->172.16.10.0
  172.16.10.2:10101100.00010000.00001010.000000010
  255.255.255.0:11111111.11111111.11111111.00000000
  AND運算得網絡地址結果:10101100.00010000.00001010.000000001->172.16.10.0

  結果都是172.16.10.0,所以它們在同一個子網絡。

  

IP地址域子網掩碼按位 與 獲得網段地址
255.255.255.0
192.168.13.253
11111111.11111111.11111111.00000000
11000000.10101000.00001101.11111101
11000000.10101000.00001101.00000000  # 局域網網段

192.168.13.0   #  這樣求出了一個網段地址

 

DHCP協議:自動獲取IP地址
Arp協議:廣播的方式發送數據包,經過IP地址獲取目標主機mac地址,IP地址不固定,mac是全球惟一的DNS:域名解析 
域名:www.jd.com
DNS服務端:{'www.jd.com':173.1.49.0}
NAT轉換:網絡地址轉換
路由器:轉發消息,管理內網
路由協議:計算轉發消息的最優路徑
端口:標識某個應用程序
端口映射:0-65535 找到提供服務的程序
IP地址+端口:可以惟一鎖定一臺電腦和這個電腦上的某個應用程序
網關:把關用的,全部對外的請求,都要通過網關
NAT技術:網絡地址轉換,內網IP地址轉換位公網或者說外網的IP地址 
廣播風暴:廣播數據充斥網絡沒法處理,並佔用大量網絡帶寬,致使正常業務不能運行。(之前經過mac地址就能夠通訊,mac地址通訊時廣播的形式,當全部的電腦都經過這種形式通訊,就會西港城廣播風暴,會阻塞網絡,信息也變得很不安全,由於全部人均可以收到你打的信息。
爲了不廣播風暴:分了多個局域網,而後經過路由器連起來
 
內網和外網
 
內網:內網就是局域網,局域網就是固定在一個地理區域內由兩臺以上的電腦用網線和其餘網絡設備搭建而成的一個封閉的計算機組。能夠是鄰居之間的2臺電腦,也能夠是一張大樓內的全部電腦。局域網能夠是獨立封閉運行的,也能夠是和外網相鏈接的。
 
外網:廣域網是一種低於跨度很是大的網絡集合,它是由無數各局域網+獨立服務器構成的。注:此處所說的局域網既能夠是小型的廣域網,也能夠是局域網。
 
實際上,從規模上來看咱們很難區分局域網和廣域網,由於大小都是相對的,因此真正的局域網和廣域網的區分是經過IP地址來實現的。
任何一臺電腦要上網,都必須在網絡上郵一個惟一的IP地址。在局域網內,這個IP地址是惟一的,可是在另外一個局域網內,這個IP地址仍然可以用。
在廣域網中,全部的IP地址都是惟一的。
 
只有內網的IP地址你是不可以上網的,上網必須要一個外網地址,這個外網地址又稱爲公網地址,這個公網地址是全球惟一的,它在你的對外出口的路由器上,也就是你的外網網關地址。
 

 三、初識socket瀏覽器

 

socket:用於網絡通訊的模塊,獨立於語言安全

 

經過下面簡單的代碼看一下,socket
 
服務端:
import socket
# 建立一個socket對象
server = socket.socket()
# 給程序設置一個IP地址和端口號
ip_port = ('127.0.0.1',8080)
# 綁定IP地址和端口號
server.bind(ip_port)
# 監聽IP地址和端口
server.listen()

# 等待創建鏈接,conn時鏈接通道,addr是客戶端地址
conn,addr = server.accept()
# 服務端經過conn鏈接通道來收發消息,經過recv方法,recv裏面的參數是字節 1024B=1KB
from_client_msg = conn.recv(1024)

print('zhoyou say:',from_client_msg.decode('utf-8'))

# 回覆消息:經過send方法,參數必須是字節類型的
conn.send('what?'.encode('utf-8'))

# 關閉通道
conn.close()
# 關閉socket對象,
server.close()
server01.py

客戶端:服務器

import socket
# 建立一個socket對象
client = socket.socket()
# 找到服務器的IP地址和端口
server_ip_port = ('127.0.0.1',8080)
# 鏈接服務端的應用程序,經過connect方法,參數是服務端的IP地址和端口,
client.connect(server_ip_port)

# 發消息,用send方法,可是調用者是client的socket的對象
client.send('明天是週末嗎?'.encode('utf-8'))

from_server_msg = client.recv(1024)

print('孫翔說:',from_server_msg.decode('utf-8'))
client.close()
client01.py

 

兩個例子:微信

一、連續對話:server收一個發一個,client發一個收一個網絡

服務端:架構

import socket

server = socket.socket()
ip_port = ('127.0.0.1',8080)
server.bind(ip_port)
server.listen()

conn,addr = server.accept()

while 1:
    from_client_msg = conn.recv(1024)
    print('來着星空的消息:',from_client_msg.decode('utf-8'))
    to_client_msg = input('大海:')
    conn.send(to_client_msg.encode('utf-8'))
talk_server.py

客戶端:併發

import socket
client = socket.socket()
client.connect(('127.0.0.1',8080))

while 1:
    to_server_msg = input('星空說:')
    client.send(to_server_msg.encode('utf-8'))
    from_server_msg = client.recv(1024)
    print('來自大海的消息:',from_server_msg.decode('utf-8'))
talk_client.py

二、時間:server端:接收時間戳,轉化成而格式化時間,client:每隔10秒鐘把時間戳發給server端,time.time()  socket

服務端:ide

import time
import socket

server = socket.socket()

ip_port = ('127.0.0.1',8090)
server.bind(ip_port)
server.listen()

conn,addr = server.accept()

while 1:
    from_client_time = conn.recv(1024)
    from_clienttime_str = from_client_time.decode('utf-8')
    time_float = float(from_clienttime_str)
    time_stru = time.localtime(time_float)
    time_strf = time.strftime('%Y_%m-%d  %H:%M:%S',time_stru)
    print(time_strf)
time_server.py

客戶端:

import time
import socket

client = socket.socket()
client.connect(('127.0.0.1',8090))
while 1:

    client.send(str(time.time()).encode('utf-8'))
    time.sleep(1)
time_client.py
相關文章
相關標籤/搜索