1. 程式人生 > >TCP和UDP的那些事

TCP和UDP的那些事

TCP是一個巨複雜的協議,因為他要解決很多問題,而這些問題又帶出了很多子問題和陰暗面。所以學習TCP本身是個比較痛苦的過程,但對於學習的過程卻能讓人有很多收穫
很多人會問,為什麼建連結要3次握手,斷連結需要4次揮手?
對於建連結的3次握手,主要是要初始化Sequence Number 的初始值。通訊的雙方要互相通知對方自己的初始化的Sequence Number(縮寫為ISN:Inital Sequence Number)——所以叫SYN,全稱Synchronize Sequence Numbers。也就上圖中的 x 和 y。這個號要作為以後的資料通訊的序號,以保證應用層接收到的資料不會因為網路上的傳輸的問題而亂序(TCP會用這個序號來拼接資料)。
對於4次揮手,其實你仔細看是2次,因為TCP是全雙工的,所以,傳送方和接收方都需要Fin和Ack。只不過,有一方是被動的,所以看上去就成了所謂的4次揮手。如果兩邊同時斷連線,那就會就進入到CLOSING狀態,然後到達TIME_WAIT狀態。
TCP重傳機制
  TCP要保證所有的資料包都可以到達,所以,必需要有重傳機制。
UDP 是User Datagram Protocol的簡稱, 中文名是使用者資料報協議,是OSI(Open System Interconnection,開放式系統互聯) 參考模型中一種無連線的傳輸層協議,提供面向事務的簡單不可靠資訊傳送服務
UDP協議全稱是使用者資料報協議[1]  ,在網路中它與TCP協議一樣用於處理資料包,是一種無連線的協議

TCP使用起來更加可靠一點,但是也更繁瑣一點,關於TCP和UDP的深入理解難度相當之大,在iOS開發中瞭解其大體流程,就可以得心應手了。