1.概念:
tcp/ip模型:tcp/ip協議不是tcp和ip兩個協議的合稱,而是指網際網路整個tcp/ip協議族
2.模型對比:
osi七層模型 tcp/ip
應用層 應用層
表示層
會話層傳輸層:終端裝置 傳輸層
網路層:路由器 網路層
資料鏈路層:交換機 網路介面層
物理層:網絡卡,網線等
1.概念:(傳輸控制協議)
tcp(transmission controlprotocol 傳輸控制協議)是一種面向連線的,可靠地,基於位元組流的傳輸層通訊協議
2.要點:
tcp/ip模型(常用):網路介面層,網路層,傳輸層,應用層
tcp協議:傳輸層的通訊協議
應用層傳輸協議:http協議,ftp協議,smtp協議,基於tcp
tcp協議是面向連線的
三次握手:建立連線
1.概念:
ip位址是指網際網路協議位址(internet protocol address,又譯為網際協議位址),ip位址是ip協議提供的一種統一的位址格式,是給網際網路上的電腦的乙個編號,用來表示它實際的實體地址,為網際網路上的每乙個網路和每一台主機分配乙個邏輯位址,以此來遮蔽實體地址的差異
- 2.ip位址的格式
ip位址包含兩個部分,乙個網路id,乙個主機id
- 3.按照網路規模分類:
4.用途;
1.概念:裝置與外界交流的出口,埠可分為虛擬埠和物理埠
物理埠:又叫介面,是可見埠,計算機背板的rj45網口,交換機路由器集線器等rj45埠
虛擬埠:計算機內部或交換機路由器內的埠,通過軟體虛擬出來的,不可見,如80埠,21埠,23埠等。
- 我們主要學虛擬埠
- 計算機中有2^16個埠,埠是整數,範圍:0-65535
- 乙個埠只能同時被乙個應用程式所占用
埠為電腦中的各種程式去提供對外的服務
2.分類:(擴充套件)
1.周知埠
眾所周知的埠,範圍0-1023,系統服務用的埠,不要隨意改動和使用
2.動態埠
範圍49152-65535
之所以稱之為動態埠,因為它一般不分配給固定的服務,由系統隨機動態的指定,比如多執行緒
3.註冊埠
1024-49151 分配給使用者程序或應用程式使用的埠
這些程序主要是使用者選擇安裝的一些應用程式,而不是已經分配好了公認埠的常用程式
這些埠在沒有被伺服器資源占用的時候,可以用使用者端動態選用為源埠
網路上兩個程式通過乙個雙向的通訊連線實現資料的交換,這個連線的一端稱為乙個socket,應用程式通過socket向網路中發出訊息,或者接受訊息
socket是應用層與tcp/ip協議族的中間抽象層,它是一組介面,把複雜的tcp/ip協議族封裝為幾個簡單的介面提供給應用層呼叫,實現程式在網路中的通訊
本質上是介面,封裝了tcp/udp,提供了傳送,接收的功能,大大地簡化了我們開發程式的難度
socket基於tcp或udp
用python來實現tcp_server
#建立套接字socket
import socket
#server = socket.socket(
#family=socket.af_inet,
#type=socket.sock_dgram #代表了udp
#type=socket.sock_stream #tcp 預設
- 建立tcp伺服器
1.建立socket
2.繫結埠
3.監聽
4.接收連線
5.收發資料
6.迴圈4,5
import socket
#1.建立socket物件
tcp_server = socket.socket()
#2.繫結ip埠
#ip可以是127.0.0.1 代表只監聽本地
#ip可以寫區域網ip,當前區域網的其他電腦可以來訪問
#ip可以寫成『 』或者『0.0.0.0』 ,這台電腦的所有的網絡卡來的資料都可以
tcp_server.bind((' ',6969))
#3.監聽
#backlog代表等待佇列
tcp_server.listen(5)
while true:
#4.等待鏈結
print("等待連線")
conn,addr = tcp_server.accept() #阻塞
#建立乙個對等的socket物件,用來和客戶端進行資料互動
#5.收發資料
print("有客戶%s連線進來了"%addr[0])
while true:
#先接受
data = conn.recv(1024) #也是阻塞,一般設定1024位元組
#收到的也是位元組型別
print(data.decode("utf-8"))
info = "xiaoge"
if data:
print("從%s接受了:%s" % (addr[0],data.decode("utf-8")))
conn.send(data) #傳送的也是位元組資料
else:
conn.close()
print("客戶%s關閉了"%addr[0])
break
#客戶端,服務端收發資料的規則,流程,這個其實就是我們常說的應用協議,http,ftp,收發是最底層
import socket
1.建立socket
client = socket.socket()
2.連線
client.connect(("127.0.0.1",6969))#訪問本地
while true:
data = input(">>>:")
if data == "q":
break
3.發資料
client.send(data.encode())#傳送位元組型別的資料
4.收資料
res = client.recv(1024)
print(res.decode("utf-8"))
client.close()#關閉連線
傳輸模型和套接字
基本模型 osi七層模型 先有模型,再有協議 tcp建立連線 三次握手 怎麼連線的?為什麼要三次?客戶端 我要連線你 服務端 好的,我準備好了 客戶端 我建立連線了 三次保證同步,例如因為網路延遲導致兩邊收到訊息延後,發出的報文就可能收不到或者不知道是誰的。資料傳輸 斷開連線 四次揮手 客戶端 我要...
簡述OSI模型與套接字
osi是open system interconnection的縮寫,意為開放式系統互聯。國際標準化組織 iso 制定了osi模型,定義了不同計算機互聯的標準,是設計和描述計算機網路通訊的基本框架。osi模型把網路通訊的工作分為7層,分別是物理層 資料鏈路層 網路層 傳輸層 會話層 表示層和應用層 ...
套接字i o模型
當套接字建立時,預設情況下是工作在阻塞模式。在阻塞模式下,執行i o的winsock呼叫 如send 和recv 一直到操作完成時才返回。比如呼叫recv 函式,如果對應的緩衝區沒有資料到來。呼叫者將會一直等待下去,直到有資料到達為止。1 阻塞 blocking 模型 對於以下函式呼叫 int ir...