網路 socket底層原理

2021-09-26 22:15:40 字數 2933 閱讀 9385

1、tcp/ip流程

2、socket流程: socket通訊原理

3、長鏈結,短連線

4、tcpdump抓包

5、io多路復用:

6、http請求抓包;

這個是由於你的服務端仍然存在四次揮手的time_wait狀態在占用位址(如果不懂,請深入研究

1.tcp三次握手,四次揮手

2.syn洪水攻擊

3.伺服器高併發情況下會有大量的time_wait狀態的優化方法)

syn: 表示建立連線

fin: 表示關閉連線

ack: 表示響應

psh: 表示有 data資料傳輸

rst: 表示連線重置。

msl為2分鐘,實際應用中常用的是30秒,1分鐘和2分鐘等。

參考tcp報文段來理解一下第一圖的資料傳輸細節:

事實上syn j、syn k ack=j+1,ack=k+1表示的意思是:

1、syn標誌位設定為1,而j表示的是此報文段的序列號seq

2、syn、ack標誌位設定為1,k表示的是此報文段的序列號seq,ack=j+1表示確認序號設定為上次接收到的報文段的序列號的+1

3、ack標誌位設定為1,ack=k+1表示確認序號設定為上次接收到的報文段的序列號的+1

解決方法:

#加入一條socket配置,重用ip和埠

phone=socket(af_inet,sock_stream)

phone.setsockopt(sol_socket,so_reuseaddr,1) #就是它,在bind前加

phone.bind((『127.0.0.1』,8080))12

3456

78910

1112

1314

1516

1718

發現系統存在大量time_wait狀態的連線,通過調整linux核心引數解決,

vi /etc/sysctl.conf

編輯檔案,加入以下內容:

net.ipv4.tcp_syncookies = 1

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_tw_recycle = 1

net.ipv4.tcp_fin_timeout = 30

然後執行 /sbin/sysctl -p 讓引數生效。

net.ipv4.tcp_syncookies = 1 表示開啟syn cookies。當出現syn等待佇列溢位時,啟用cookies來處理,可防範少量syn攻擊,預設為0,表示關閉;

net.ipv4.tcp_tw_reuse = 1 表示開啟重用。允許將time-wait sockets重新用於新的tcp連線,預設為0,表示關閉;

net.ipv4.tcp_tw_recycle = 1 表示開啟tcp連線中time-wait sockets的快速**,預設為0,表示關閉。

net.ipv4.tcp_fin_timeout 修改系統預設的 timeout 時間

粘包問題主要還是因為接收方不知道訊息之間的界限,不知道一次性提取多少位元組的資料所造成的

socket起源於unix,在unix一切皆檔案哲學的思想下,socket是一種"開啟—讀/寫—關閉"模式的實現,伺服器和客戶端各自維護乙個"檔案",在建立連線開啟後,可以向自己檔案寫入內容供對方讀取或者讀取對方內容,通訊結束時關閉檔案。

http通訊機制是在一次完整的http通訊過程中,web瀏覽器與web伺服器之間將完成下列7個步驟:

(1) 建立tcp連線

在http工作開始之前,web瀏覽器首先要通過網路與web伺服器建立連線,該連線是通過tcp來完成的,該協議與ip協議共同構建internet,即著名的tcp/ip協議族,因此internet又被稱作是tcp/ip網路。http是比tcp更高層次的應用層協議,根據規則,只有低層協議建立之後才能,才能進行更層協議的連線,因此,首先要建立tcp連線,一般tcp連線的埠號是80

(2) web瀏覽器向web伺服器傳送請求命令

一旦建立了tcp連線,web瀏覽器就會向web伺服器傳送請求命令

例如:get/sample/hello.jsp http/1.1

(3) web瀏覽器傳送請求頭資訊

瀏覽器傳送其請求命令之後,還要以頭資訊的形式向web伺服器傳送一些別的資訊,之後瀏覽器傳送了一空白行來通知伺服器,它已經結束了該頭資訊的傳送。

(4) web伺服器應答

客戶機向伺服器發出請求後,伺服器會客戶機回送應答,

應答的第一部分是協議的版本號和應答狀態碼

(5) web伺服器傳送應答頭資訊

正如客戶端會隨同請求傳送關於自身的資訊一樣,伺服器也會隨同應答向使用者傳送關於它自己的資料及被請求的文件。

(6) web伺服器向瀏覽器傳送資料

web伺服器向瀏覽器傳送頭資訊後,它會傳送乙個空白行來表示頭資訊的傳送到此為結束,接著,它就以content-type應答頭資訊所描述的格式傳送使用者所請求的實際資料

(7) web伺服器關閉tcp連線

1xx-資訊類(information),表示收到web瀏覽器請求,正在進一步的處理中

2xx-成功類(successful),表示使用者請求被正確接收,理解和處理例如:200 ok

3xx-重定向類(redirection),表示請求沒有成功,客戶必須採取進一步的動作。

4xx-客戶端錯誤(client error),表示客戶端提交的請求有錯誤 例如:404 not

found,意味著請求中所引用的文件不存在。

5xx-伺服器錯誤(server error)表示伺服器不能完成對請求的處理:如 500

get 和post 的區別:

get 使用url 或cookie 傳參,而post將資料放在body 中。

get的url 在長度上會有限制,而post沒有。

post比get相對安全,因為在位址列不可見。

一般get請求用來獲取資料,post請求用來傳送資料。

socket收發訊息底層原理

服務端和客戶端想要通訊,底層需要internet物理連線,網絡卡配備有ip位址和mac位址,網絡卡收發的訊息是位元組流。服務端程式和客戶端程式工作中應用層,服務端程式要想發包,必須一層一層往下走,走到網絡卡那一層,將資料轉化成二進位制才能送到客戶端 客戶端網絡卡收到包,一層一層往上送,然後客戶端程式...

day26 4 Socket 底層網路介面

用socket 函式建立套接字,語法格式如下 socket.socket family type proto 引數 函式描述 伺服器端套接字 s.bind 繫結位址 host,port 到套接字,在af inet下,以元組 host,port 的形式表示位址 s.listen 開始tcp監聽,bac...

socket網路程式設計基礎(桌球原理)

注意 1 客戶端傳送給服務端,大小寫不會變化 2 字串.encode upper 到客戶端 decode 之後,英文本母會全變成大寫 3 傳各種資料,配合 pickle 個人建議 server socket.socket af.inet,sock.sock stream 繫結要監聽的埠 server...