1. 程式人生 > >網絡編程(二)——TCP協議、socket

網絡編程(二)——TCP協議、socket

cep 數據請求 b- aps pre alt 技術分享 隱藏 可靠

TCP協議與socket套接字

一、TCP協議

1、可靠傳輸,TCP數據包沒有長度限制,理論上可以無限長,但是為了保證網絡的效率,通常TCP數據包的長度不會超過IP數據包的長度,以確保單個TCP數據包不必再分割。

2.(1)三次握手建鏈接
(2)四次揮手斷開鏈接
(3)tcp協議的狀態
(4)syn洪水攻擊與半連接池

3、(1)三次握手建立鏈接、四次揮手斷開鏈接(各種狀態)

技術分享圖片

(2)syn洪水攻擊與半連接池

syn洪水攻擊:就是讓服務器資源耗盡,無法提供正常的服務,間接地拒絕

半連接池:暫時存放請求,用於限制請求個數,但是不限制連接個數

二、socket套接字

1、socket層

技術分享圖片

2、什麽是socket

Socket是應用層與TCP/IP協議族通信的中間軟件抽象層,它是一組接口。在設計模式中,Socket其實就是一個門面模式,它把復雜的TCP/IP協議族隱藏在Socket接口後面,對用戶來說,一組簡單的接口就是全部,讓Socket去組織數據,以符合指定的協議。Socket是封裝好TCP/IP協議的接口。

3、socket工作流程

技術分享圖片

先從服務器端說起。服務器端先初始化Socket,然後與端口綁定(bind),對端口進行監聽(listen),調用accept阻塞,等待客戶端連接。在這時如果有個客戶端初始化一個Socket,然後連接服務器(connect),如果連接成功,這時客戶端與服務器端的連接就建立了。客戶端發送數據請求,服務器端接收請求並處理請求,然後把回應數據發送給客戶端,客戶端讀取數據,最後關閉連接,一次交互結束

技術分享圖片TCP服務端 技術分享圖片
from socket import socket, AF_INET, SOCK_STREAM

IP = 127.0.0.1
PORT = 8888
ADDRESS = (IP, PORT)
BUFSIZE = 1024
# 1.創建客戶端socket對象
cli_socket = socket(AF_INET, SOCK_STREAM)
# 2.連接服務器
cli_socket.connect(ADDRESS)
# 3.發收數據
cli_socket.send(hello.encode(utf-8))  # 只能以字節類型發送
data = cli_socket.recv(BUFSIZE)
print(data.decode(utf-8)) # 關閉客戶端連接 cli_socket.close()
TCP客戶端

網絡編程(二)——TCP協議、socket