c/s架構和b/s架構編程
學習網絡編程的目的就是爲了寫一個cs架構的軟件瀏覽器
網絡:網絡鏈接介質+網絡協議(osi七層)服務器
網絡協議:osi七層協議:應用層,表示層,會話層,傳輸層,網絡層,數據鏈路層,物理層微信
五層協議:應用層,傳輸層,網絡層,數據層,物理層網絡
四層協議多線程
物理層:010101這種電信號架構
數據鏈路層:併發
網絡層app
ip:ipv4:32位2進製表示,點分十進制表示,從0.0.0.0到255.255.255.255,範圍是有限的,不能表示出全部的網路設備,因此出現了ipv6
子網掩碼:經過子網掩碼和ip判斷倆個ip是否處於同一個網段,經過ip地址和子網掩碼作按位與運算
ip地址: 172.16.10.1: 10101100.00010000.00001010.000000001 子網掩碼:255.255.255.0: 11111111.11111111.11111111.000000000 按位與運算:172.16.10.0 10101100.00010000.00001010.000000000 172.16.10.0/24包含了ip地址和子網掩碼
ip跟mac有轉換的關係
主機176.16.10.10.10/24訪問172.16.10.11/24
ARP協議:廣播的方式發售那個數據包,獲取目標主機的mac地址
mac地址:查找學習mac地址和ip地址的映射表
第一次接收到就會在ip/mac映射表中添加一條數據{’172.16.10.11「:ddsadfgegsdgsdg}
任何一種協議都是由頭部和內容的
傳輸層
tcp協議:
三次握手,四次揮手(重點),鏈接如何創建,發送數據如何保證可靠,斷開如何斷開,在創建鏈接過程當中由狀態。
服務的若是看到大量的syn_rcvd狀態,請求同步收到狀態
dos和ddos攻擊:拒絕服務攻擊,分佈式的拒絕服務攻擊
端口號:端口號的範圍0~65535,0-1023位系統佔用端口
udp協議:
應用層
socket:在應用層和傳輸層之間的一個抽象層:它把TCP/TP層複雜的操做抽象爲幾個簡單的接口供應用層調用已經實進程在網絡中的通訊。
#服務端 #導入一個socket模塊 import socket #想象成買手機打電話:socket.SOCK_STREAM 表示創建tcp鏈接 ,udp鏈接socket.SOCK_DGRAM #買了個手機 soc=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #插電話卡:綁定ip地址 傳元組:(ip,端口號) soc.bind(('192.168.11.146',8080)) #若是寫本機ip,局域網外部能夠訪問 # soc.bind(('127.0.0.1',8080)) #若是寫127.0.0.1,只能本身訪問 #開機,監聽,這個5 是半鏈接池的大小 soc.listen(5) #等待別人給我打電話 print('xxxx') conn,addr=soc.accept() print('yyyy') print(addr) # conn 就是通路 #接收1024個字節 data=conn.recv(1024) print('我收到客戶端發的',data) #conn.send 發送數據,數據必須是bytes格式 conn.send(b'xxxxx') #掛斷電話 conn.close() #銷燬手機 soc.close()
#客戶端 import socket #建立一個socket對象 soc=socket.socket() #鏈接服務端 soc.connect(('192.168.11.146',8080)) #發送消息 soc.send(b'xxx') data=soc.recv(1024) print('我收到服務端回的',data) #關閉鏈接 soc.close()