Python 關於TCP簡介以及與UDP的區別
導讀 | 我們來介紹Python 關於TCP簡介以及與UDP的區別 |
TCP協議,傳輸控制協議(英語:Transmission Control Protocol,縮寫為 TCP)是一種面向連線的、可靠的、基於位元組流的傳輸層通訊協議,由IETF的RFC 793定義。
TCP通訊需要經過建立連線、資料傳送、終止連線三個步驟。
TCP通訊模型中,在通訊開始之前,一定要先建立相關的連結,才能傳送資料,類似於生活中,"打電話""
通訊雙方必須先建立連線才能進行資料的傳輸,雙方都必須為該連線分配必要的系統核心資源,以管理連線的狀態和連線上的傳輸。
雙方間的資料傳輸都可以透過這一個連線進行。
完成資料交換後,雙方必須斷開此連線,以釋放系統資源。
這種連線是一對一的,因此TCP不適用於廣播的應用程式,基於廣播的應用程式請使用UDP協議。
1)TCP採用傳送應答機制
TCP傳送的每個報文段都必須得到接收方的應答才認為這個TCP報文段傳輸成功
2)超時重傳
傳送端發出一個報文段之後就啟動定時器,如果在定時時間內沒有收到應答就重新傳送這個報文段。
TCP為了保證不發生丟包,就給每個包一個序號,同時序號也保證了傳送到接收端實體的包的按序接收。然後接收端實體對已成功收到的包發回一個相應的確認(ACK);如果傳送端實體在合理的往返時延(RTT)內未收到確認,那麼對應的資料包就被假設為已丟失將會被進行重傳。
TCP用一個校驗和函式來檢驗資料是否有錯誤;在傳送和接收時都要計算校驗和。
流量控制和阻塞管理
流量控制用來避免主機傳送得過快而使接收方來不及完全收下。
- 面向連線(確認有建立三方交握,連線已建立才作傳輸。)
- 有序資料傳輸
- 重發丟失的資料包
- 捨棄重複的資料包
- 無差錯的資料傳輸
- 阻塞/流量控制
udp通訊模型udp通訊模型中,在通訊開始之前,不需要建立相關的連結,只需要傳送資料即可,類似於生活中,"寫信""
udp通訊模型中,在通訊開始之前,一定要先建立相關的連結,才能傳送資料,類似於生活中,"打電話""
tcp的3次握手
tcp的4次揮手
tcp伺服器一般情況下都需要繫結,否則客戶端找不到這個伺服器
tcp客戶端一般不繫結,因為是主動連結伺服器,所以只要確定好伺服器的ip、port等資訊就好,本地客戶端可以隨機
tcp伺服器中透過listen可以將socket建立出來的主動套接字變為被動的,這是做tcp伺服器時必須要做的
當客戶端需要連結伺服器時,就需要使用connect進行連結,udp是不需要連結的而是直接傳送,但是tcp必須先連結,只有連結成功才能通訊
當一個tcp客戶端連線伺服器時,伺服器端會有1個新的套接字,這個套接字用來標記這個客戶端,單獨為這個客戶端服務
listen後的套接字是被動套接字,用來接收新的客戶端的連結請求的,而accept返回的新套接字是標記這個新客戶端的
關閉listen後的套接字意味著被動套接字關閉了,會導致新的客戶端不能夠連結伺服器,但是之前已經連結成功的客戶端正常通訊。
關閉accept返回的套接字意味著這個客戶端已經服務完畢
當客戶端的套接字呼叫close後,伺服器端會recv解堵塞,並且返回的長度為0,因此伺服器可以透過返回資料的長度來區別客戶端是否已經下線
原文來自:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2909302/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- UDP與TCP的區別UDPTCP
- TCP與UDP的區別TCPUDP
- HTTP與UDP/TCP區別HTTPUDPTCP
- MQTT是TCP還是UDP?TCP與UDP區別MQQTTCPUDP
- TCP與UDP區別詳解TCPUDP
- tcp和udp的區別TCPUDP
- 一文搞懂TCP與UDP的區別TCPUDP
- 終於懂了TCP和UDP協議區別TCPUDP協議
- TCP 和 UDP 協議簡介TCPUDP協議
- php中TCP和UDP的區別PHPTCPUDP
- UDP 和 TCP 兩種協議簡介UDPTCP協議
- UDP和TCP以及HTTPUDPTCPHTTP
- TCP和UDP的優缺點及區別TCPUDP
- 淺談TCP和UDP協議的區別TCPUDP協議
- 【bash】關於 /dev/(tcp|udp)/${HOST}/${PORT}devTCPUDP
- UDP與TCPUDPTCP
- TCP與UDPTCPUDP
- 知其所以然~tcp和udp的區別TCPUDP
- Python開發中TCP和UDP區別是什麼?Python入門教程PythonTCPUDP
- Python教程之udp和tcp協議介紹PythonUDPTCP協議
- 如何理解UDP 和 TCP? 區別? 應用場景?UDPTCP
- python 中的UDP和TCP(1)PythonUDPTCP
- python 實現 TCP、UDP 客戶端最簡流程PythonTCPUDP客戶端
- 簡單介紹下python2.x與python3.x的區別Python
- 關於Ajax和websocket的區別以及使用場景!Web
- socket與TCP/IP區別TCP
- nginx關於root與alias的區別Nginx
- 關於C與C++的區別C++
- Android關於buildToolVersion與CompileSdkVersion的區別AndroidUICompile
- Node TCP /UDP 簡易聊天室TCPUDP
- TCP、UDP、HTTP及Socket的簡單講解TCPUDPHTTP
- 關於 IPython 的簡介Python
- 聊聊UDP、TCP和實現一個簡單的JAVA UDP小DemoUDPTCPJava
- 簡單介紹HTTP與HTTPS之間的區別HTTP
- SpringCloud簡介以及相關元件SpringGCCloud元件
- 【Java註解用法】@Autowired 與@Resource的區別以及@Qualifier的介紹Java
- #define巨集與列舉以及typedef關鍵字的區別
- TCP 和 UDPTCPUDP