OSI參考模型
- 應(yīng)用層:所有產(chǎn)生網(wǎng)絡(luò)流量的程序(QQ栗弟、瀏覽器在辆、有道)
- 表示層:數(shù)據(jù)傳輸前的壓縮册踩、加密泳姐、確定編碼方法等操作
- 會(huì)話層:查看木馬(netstat -nb)(只要需要網(wǎng)絡(luò)請求,就必頂會(huì)建立會(huì)話)
- 傳輸層:可靠傳輸暂吉、不可靠傳輸胖秒、流量控制
- 網(wǎng)絡(luò)層:負(fù)責(zé)選擇最佳路徑、規(guī)劃IP地址
- 數(shù)據(jù)鏈路層:幀的開始和結(jié)尾慕的、透明傳輸阎肝、差錯(cuò)校驗(yàn)
- 物理層:借口標(biāo)準(zhǔn)、電器標(biāo)準(zhǔn)
計(jì)算機(jī)數(shù)據(jù)通信過程
過程:客戶端通過下一跳找到DNS的IP地址對應(yīng)的服務(wù)器肮街,DNS服務(wù)器會(huì)對客戶端訪問的域名進(jìn)行解析风题,然后再將解析域名后得到的IP地址返回給客戶端,客戶端根據(jù)解析到的IP地址找到相應(yīng)的服務(wù)器低散,并發(fā)出請求俯邓。
數(shù)據(jù)封裝
數(shù)據(jù)解封
傳輸層兩個(gè)協(xié)議(TCP/UDP)
- TCP協(xié)議(Transmission Control Protocol,傳輸控制協(xié)議)
1.需要傳輸?shù)奈募侄蝹鬏?br> 2.建立回話
3.可靠傳輸
4.流量控制 - UDP協(xié)議(User Data Protocol熔号,用戶數(shù)據(jù)報(bào)協(xié)議)
1.一個(gè)數(shù)據(jù)包就能完成數(shù)據(jù)通信
2.不需要建立會(huì)話
3.不可靠傳輸
4.不需要流量控制
TCP如何實(shí)現(xiàn)可靠傳輸
HTTP協(xié)議
客戶端如何找到想要的服務(wù)器稽鞭?
客戶端通過URL找到想要連接的服務(wù)器
1.什么是URL
- URL的全稱是Uniform Resource Locator(統(tǒng)一資源定位符)
- 通過1個(gè)URL,能找到互聯(lián)網(wǎng)上唯一的1個(gè)資源
- URL就是資源的地址引镊、位置朦蕴,互聯(lián)網(wǎng)上的每個(gè)資源都有一個(gè)唯一的URL
2.URL的基本格式 = 協(xié)議://主機(jī)地址/路徑
協(xié)議:不同的協(xié)議篮条,代表著不同的資源查找方式、資源傳輸方式
主機(jī)地址:存放資源的主機(jī)(服務(wù)器)的IP地址(域名)
路徑:資源在主機(jī)(服務(wù)器)中的具體位置
3.URL中常見的協(xié)議
- HTTP
超文本傳輸協(xié)議吩抓,訪問的是遠(yuǎn)程的網(wǎng)絡(luò)資源涉茧,格式是http://
http協(xié)議是在網(wǎng)絡(luò)開發(fā)中最常用的協(xié)議 - file
訪問的是本地計(jì)算機(jī)上的資源,格式是file://(不用加主機(jī)地址) - mailto
訪問的是電子郵件地址疹娶,格式是mailto:// - FTP
訪問的是共享主機(jī)的文件資源伴栓,格式是ftp://
4.HTTP協(xié)議的作用
a.規(guī)定客戶端和服務(wù)器之間的數(shù)據(jù)傳輸格式
b.讓客戶端和服務(wù)器能有效地進(jìn)行數(shù)據(jù)溝通
5.HTTP協(xié)議的特點(diǎn)
- 簡單快速
因?yàn)镠TTP協(xié)議簡單,所有HTTP服務(wù)器的程序規(guī)模小雨饺,因而通信速度很快 - 靈活
HTTP允許傳輸各種各樣的數(shù)據(jù) - HTTP 0.9和1.0使用非持續(xù)連接
限制每次連接只處理一個(gè)請求钳垮,服務(wù)器對客戶端的請求做出響應(yīng)后,馬上斷開連接额港,這種方式可以節(jié)省傳輸時(shí)間
6.HTTP通信過程
7.常見響應(yīng)狀態(tài)碼
狀態(tài)碼 | 英文名稱 | 中文描述 |
---|---|---|
200 | OK | 請求成功 |
400 | Bad Request | 客戶端請求的語法錯(cuò)誤饺窿,服務(wù)器無法解析 |
404 | Not Found | 服務(wù)器無法根據(jù)客戶端的請求找到資源 |
500 | Internal Server Error | 服務(wù)器內(nèi)部錯(cuò)誤,無法完成請求 |
8.發(fā)送HTTP請求的方法(GET/POST)
GET和POST的主要區(qū)別表現(xiàn)在數(shù)據(jù)傳遞上
- GET
a.在請求URL后面以?
的形式跟上發(fā)給服務(wù)器的參數(shù)移斩,多個(gè)參數(shù)之間用&
隔開肚医,比如
http://www.test.com/login?username=123&pwd=234&type=JSON
b.由于瀏覽器和服務(wù)器對URL長度有限制,因此在URL后面附帶的參數(shù)是有限制的向瓷,通常不能超過1KB - POST
a.發(fā)給服務(wù)器的參數(shù)全部放在請求體中
b.理論上肠套,POST傳遞的數(shù)據(jù)量沒有限制(具體還得看服務(wù)器的處理能力)
python對套接字的支持
服務(wù)器
import socket
# 1.創(chuàng)建套接字對象
server = socket.socket()
# 2.綁定IP地址和端口
server.bind(('10.7.153.120', 8080))
# 3.監(jiān)聽
server.listen(512)
while True:
# 4.接收請求
connect,addr = server.accept()
# 5.發(fā)送數(shù)據(jù)
with open('./files/cat.jpg', 'rb') as f:
data = f.read()
connect.send(data)
# 6.接收數(shù)據(jù)
# connect.recv(512)
# 7.關(guān)閉連接
connect.close()
客戶端
import socket
client = socket.socket()
client.connect(('10.7.153.120', 8080))
# 創(chuàng)建一個(gè)空的二進(jìn)制數(shù)據(jù)
all_data = bytes()
# 接收從服務(wù)器傳回來的數(shù)據(jù)
data = client.recv(1024)
while data:
print('接收到數(shù)據(jù)')
all_data += data
data = client.recv(1024)
with open('./files/new.jpg', 'wb') as f:
f.write(all_data)
client.close()
http請求
import requests
# 1.準(zhǔn)備url
url = 'https://www.apiopen.top/satinApi?type=1&page=1'
# 2.發(fā)送請求
"""
get(url,參數(shù)對應(yīng)的字典)
post(url,參數(shù)對應(yīng)的字典)
返回值是服務(wù)器返回的響應(yīng)
"""
response = requests.get(url)
# requests.get('https://www.apiopen.top/satinApi',{'type': 1, 'page': 1})
print(response)
# 3.通過響應(yīng)獲取服務(wù)器返回的數(shù)據(jù)
# a.獲取字符串類型的數(shù)據(jù)
print(response.text)
# b.獲取json格式的數(shù)據(jù)
print(response.json())
# c.獲取二進(jìn)制格式的數(shù)據(jù)
print(response.content)
# 4.獲取響應(yīng)頭(了解)
print(response.headers)