傳輸模型與套接字

2021-09-02 17:50:33 字數 3218 閱讀 7108

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...