一、傳輸層
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。當伺服器收到客戶端的確認報文之後...