【python】 TCP網(wǎng)絡(luò)編程:TCP三次握手和四次揮手

TCP介紹 Transmission Control Protocol

【概述】:TCP協(xié)議是一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議,由IETF的RFC 793定義。

【三步走】TCP通信需要經(jīng)過創(chuàng)建連接、數(shù)據(jù)傳送、終止連接三個步驟。

TCP客戶端服務(wù)器通信流程圖

關(guān)于 TCP “三次握手”以及“四次揮手”
三次握手,建立連接
  • ① 【連接建立】:請求連接方(客戶端)發(fā)送SYN請求連接;
  • ② 【數(shù)據(jù)傳送】:服務(wù)器返回SYN/ACK確認(rèn)收到發(fā)送端請求;
  • ③ 【連接釋放】:客戶端回饋給服務(wù)器ACK,表示確認(rèn)收到服務(wù)器發(fā)送的確認(rèn)。
補充:注意事項
  • ① 如果服務(wù)器沒有收到客戶端發(fā)送的ACK,則啟動超時重傳機制,這確保了TCP連接的準(zhǔn)確性。
  • ② TCP的握手至少有三次。

【拓展】:連接的建立需要經(jīng)過多次交互,這就是我們?nèi)粘V兴f的建立連接是高成本的操作。因此,在實際生產(chǎn)中,通過建立連接池,來減少連接建立的頻度,傳輸數(shù)據(jù)時直接從連接池中獲取連接,而不是新建連接。

四次揮手【斷開連接】
  • ①請求方(客戶端)數(shù)據(jù)已經(jīng)發(fā)送完畢,向服務(wù)器發(fā)送FIN請求斷開連接;
  • ②服務(wù)器向客戶端發(fā)送ACK,對客戶端發(fā)送的FIN進行確認(rèn),并不需要即使斷開;
  • ③服務(wù)器將接收到的數(shù)據(jù)處理完畢后發(fā)送FIN,斷開連接;
  • ④客戶端發(fā)送確認(rèn)消息ACK。

【性質(zhì)】:TCP是雙向通信,因此關(guān)閉連接時需要雙向關(guān)閉連接。首先是關(guān)閉操作的發(fā)起方關(guān)閉本端的連接,然后是關(guān)閉接收方在收到發(fā)起方的關(guān)閉請求后,除了回復(fù)關(guān)閉應(yīng)答外,還要確保數(shù)據(jù)傳輸完成后發(fā)起一個關(guān)閉連接的請求,保證雙向同時關(guān)閉。

【知識拓展】:

標(biāo)志位(URG、ACK、PSH、RST、SYN和FIN)的含義介紹。

  • ACK: 確認(rèn)序號有效。
  • RST:重置連接
  • SYN:發(fā)起一個新連接
  • FIN:釋放一個連接

TCP編程
服務(wù)器端:

1、創(chuàng)建 套接字 socket
2、bind(命名IP地址和端口號)
3、listen(創(chuàng)建監(jiān)聽隊列)
4、accept(拿到已經(jīng)完成連接的)
5、recv/send(收發(fā)數(shù)據(jù))
6、close(關(guān)閉)

【知識積累】

  • TCP 服務(wù)器一般情況下都需要綁定端口號,否則客戶端找不到這個服務(wù)器;
  • TCP 服務(wù)器中通過監(jiān)聽可以將 套接字創(chuàng)建出來的主動套接字變?yōu)楸粍拥?,這是做 TCP 服務(wù)器時必須要做的;
客戶端:

1、socket
2、connect
3、recv/send
4、close

  • TCP 客戶端一般不綁定端口號,使用隨機生成的端口號即可;

4、當(dāng) TCP 客戶端和服務(wù)端建立好連接才可以收發(fā)數(shù)據(jù),UDP 是不需要建立連接,直接就可以發(fā)送數(shù)據(jù);當(dāng)一個 TCP 客戶端和服務(wù)端連接成功后,服務(wù)器端會有1個新的套接字,這個套接字用來標(biāo)記這個客戶端,單獨為這個客戶端服務(wù);

5、關(guān)閉 accept 返回的套接字意味著這個客戶端已經(jīng)服務(wù)完畢.
6、【關(guān)于套接字】:是一個抽象層,應(yīng)用程序可以通過它發(fā)送或接收數(shù)據(jù),可對其進行像對文件一樣的打開、讀寫和關(guān)閉等操作。套接字允許應(yīng)用程序?qū)/O插入到網(wǎng)絡(luò)中,并與網(wǎng)絡(luò)中的其他應(yīng)用程序進行通信。網(wǎng)絡(luò)套接字是IP地址與端口的組合。


【引言】:在網(wǎng)絡(luò)應(yīng)用程序設(shè)計時,由于TCP/IP的核心內(nèi)容被封裝在操作系統(tǒng)中,如果應(yīng)用程序要使用TCP/IP,可以通過系統(tǒng)提供的TCP/IP的編程接口來實現(xiàn)。在Windows環(huán)境下,網(wǎng)絡(luò)應(yīng)用程序編程接口稱作Windows Socket。為了支持用戶開發(fā)面向應(yīng)用的通信程序,大部分系統(tǒng)都提供了一組基于TCP或者UDP的應(yīng)用程序編程接口(API),該接口通常以一組函數(shù)的形式出現(xiàn),也稱為套接字(Socket)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容