三、 TCP(傳輸控制協議)
它建立在網際層協議(IP)提供的數據包傳輸技術之上,。TCP使應用程序可使用連續的數據進行通信。除非由於網絡故障導致連接中斷或凍結,TCP都能保證數據流完好地傳輸。而不會發生丟包 ,重包或是亂序的問題。
1 TCP工作原理
如果使用udp提供的數據報機制,代碼還要考慮傳輸的可靠性問題,以及錯誤是的恢復方案。但如果用TCP,數據包就隱藏在協議層之下,應用只需要型目標機器發生數據流,TCP會自動將丟失的信息重發,保證信息能夠成功到達目標機器。
#每個TCP數據包都有一個序列號
#並不使用順序的整數作為數據包的序列號
#初始序列號是隨機的
#並不通過鎖步的方式通信,這種方式必須等待每個接收完才發下一個。相反,TCP可以無需等待一口氣發多個。某一刻對方希望同時傳輸的數據量叫做TCP窗口的大小。
#接收方的TCP實現可以通過控制發送方的窗口大小來減緩或暫停。這叫流量控制。
#如果TCP認為數據包被丟棄,他會認為網絡變擁擠,然後減少發送的數據量。
2 何時使用TCP
兩臺主機間建立TCP連接需要三個數據包:
SYN:“我想通信,這是數據包的初始序列號”
SYN-ACK:“好的,這是我向你發送數據包的初始序列號”
ACK::“好的”
通信結束時,要發送另外3個或4個數據包來關閉連接。
不需要使用TCP:
一。如果客戶端只需向服務器發送單個較小的請求,並且請求後無需後續通信。
二。客戶端與服務器之間不存在長時間的連接的情況下。
三。當丟包現象發生時,如果應用程序有比簡單地重傳數據聰明的多的方法的話。
3 TCP套接字的含義
getsockname()函數用於獲取一個套接字的名字。它用於一個已捆綁或已連接套接字s,本地地址將被返回。本調用特別適用於如下情況:未調用bind()就調用了connect(),這時唯有getsockname()調用可以獲知系統內定的本地地址。在返回時,namelen參數包含了名字的實際字節數。
跟UDP的情況一樣,TCP也使用端口號來區分同一IP地址上運行的不同應用程序。對於知名端口號和臨時端口號的劃分習慣於UDP是一致的。
三、 TCP(傳輸控制協議)