網絡編程(二)——TCP協議、socket
阿新 • • 發佈:2018-08-29
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),如果連接成功,這時客戶端與服務器端的連接就建立了。客戶端發送數據請求,服務器端接收請求並處理請求,然後把回應數據發送給客戶端,客戶端讀取數據,最後關閉連接,一次交互結束
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)TCP客戶端print(data.decode(‘utf-8‘)) # 關閉客戶端連接 cli_socket.close()
網絡編程(二)——TCP協議、socket