傳輸層tcp協議以及scoket套位元組方法

2022-02-26 01:15:39 字數 3231 閱讀 9700

一、傳輸層

1、傳輸層的由來:

網路層的ip幫我們區分子網

乙太網的mac幫我們找到主機

所以通過ip和mac找到了一台特定的主機

如何找到該特定主機的應用程式呢?

答案是通過埠,埠即應用程式與網絡卡關聯的編號

2、傳輸層的功能:

建立埠與埠的通訊

補充:埠範圍0-65535 ,0-1023為系統占用埠

二、tcp協議

又稱為好人協議以及可靠協議

tcp是可靠的資料傳輸:

最可靠的方式就是得不到確認,就重新傳送資料報,知道得到對方的確認為止

tcp建立了乙個雙向通路,實現了資料的三次握手和四次揮手

三、socket介紹

定義:socket是應用層與tcp/ip協議族通訊的中間軟體抽象,他是一組介面。

服務端套接字函式

s.bind()繫結(主機、埠號)到套位元組

s.listen()開始tcp監聽

s.accept()被動接受tcp客戶的連線,(阻塞式)等待連線的到來

客戶端套位元組函式

s.connect()主動初始化tcp伺服器連線

公共用途的套位元組函式

s.recv()接收資料

s.send()傳送資料

s.sendall()傳送完整資料

s.close()關閉套位元組

四、簡單遠端執行命令程式的開發

#客戶端

import socket

phone=socket.socket(socket.af_inet,socket.sock_stream) # 買**

phone.bind((

'127.0.0.1

',8081)) #插手機卡,補充:0-65535

0-1024給系統用的

phone.listen(

5) # 開機

print(

'start...')

conn,client_addr=phone.accept() # 等**連線

print(

'連線來了:

',conn,client_addr)

# 收發訊息

msg=conn.recv(1024

) #收訊息,1024是乙個最大的限制

print(

'客戶端的訊息:

',msg)

conn.send(msg+b'sb'

)# 掛**

conn.close()

# 關機

phone.close()

#服務端

import socket

phone=socket.socket(socket.af_inet,socket.sock_stream) # 買**

phone.connect((

'127.0.0.1

',8081

)) # 撥**,位址為服務端的ip和埠

phone.send('你好

'.encode('

utf-8

')) # 發訊息b'

hello

'data=phone.recv(1024

) #收訊息

print(data.decode(

'utf-8

'))

五、加上通訊迴圈與連線迴圈

#服務端

import socket

phone=socket.socket(socket.af_inet,socket.sock_stream)

phone.bind((

'127.0.0.1

',8081

))phone.listen(5)

print(

'start...')

while

true: # 連線迴圈

conn,client_addr=phone.accept()

print(

'客戶端

',client_addr)

while

true: # 通訊迴圈

try:

msg=conn.recv(1024

) print(

'客戶端的訊息:

',msg)

conn.send(msg+b'sb'

) except connectionreseterror:

break

conn.close()

phone.close()

#客戶端1

mport socket

phone=socket.socket(socket.af_inet,socket.sock_stream) # 買**

phone.connect((

'127.0.0.1

',8081

)) # 撥**,位址為服務端的ip和埠

while

true:

msg=input('

>>>:

').strip()

phone.send(msg.encode(

'utf-8

')) # 發訊息b'

hello

'data=phone.recv(1024

) #收訊息

print(data.decode(

'utf-8'))

phone.close()

#客戶端2

mport socket

phone=socket.socket(socket.af_inet,socket.sock_stream) # 買**

phone.connect((

'127.0.0.1

',8081

)) # 撥**,位址為服務端的ip和埠

while

true:

msg=input('

>>>:

').strip()

phone.send(msg.encode(

'utf-8

')) # 發訊息b'

hello

'data=phone.recv(1024

) #收訊息

print(data.decode(

'utf-8'))

phone.close()

#客戶端3、

4.........

傳輸層 TCP協議

1 序號 在乙個tcp連線中傳送的位元組流中的每乙個位元組都按順序編號,本欄位表示本報文段所傳送資料的第乙個位元組的序號。2 確認號 期望收到對方下乙個報文段的第乙個資料位元組的序號。若確認號為n,則證明到序號n 1為止的所有資料都已正確收到。即採用累計確認 3 資料偏移 首部長度 tcp 報文段的...

傳輸層TCP協議

面向連線,可靠傳輸,面向位元組流 tcp協議 面向連線 accept 獲取新連線 1.當呼叫accept之後,核心就會為新連線建立乙個套接字描述符,服務端使用該套接字描述符進行和客戶端進行資料通訊 2.連線建立之後,雙方都可以傳送資料 確認msg1 確認的行為是傳輸層tcp協議的行為,不是應用層的行...

傳輸層協議TCP

部分埠號 第二次握手 伺服器應用程序被動開啟。若同意客戶端的請求,則發回確認報文,其首部中 syn 1,ack 1,ack x 1,seq y。第三次握手 客戶端收到確認報文之後,通知上層應用程序連線已建立,並向伺服器發出確認報文,其首部 ack 1,ack y 1。當伺服器收到客戶端的確認報文之後...