雖然TCP和UDP都使用相同的網(wǎng)絡(luò)層(IP)先煎,但是TCP提供一種面向連接的贼涩,可靠的字節(jié)流服務(wù)。
面向連接意味著兩個使用TCP的應(yīng)用在彼此交換數(shù)據(jù)之前必須先建立一個TCP連接薯蝎,因為TCP一個連接中僅有兩方進行通信遥倦,所以廣播和多播不能用于TCP。
TCP通過下列方式來提供可靠性:
應(yīng)用數(shù)據(jù)被分割成TCP認為最合適發(fā)送的數(shù)據(jù)塊占锯。
當TCP發(fā)出一個段后谊迄,它啟動一個定時器,等待目的端確認收到這個報文段烟央,如果不能及時收到一個確認,那么將重發(fā)這個報文段歪脏。
當TCP收到數(shù)據(jù)后疑俭,將發(fā)送一個確認,通常是推遲幾分之一秒后發(fā)送婿失。
TCP將保持它首部和數(shù)據(jù)的檢驗和钞艇。目的是檢測數(shù)據(jù)在傳輸過程中的任何變化。如果有差錯豪硅,將丟棄并不確認哩照。
因為IP數(shù)據(jù)報的到達可能會失序,因此TCP將對收到的數(shù)據(jù)進行重新排序懒浮。
IP數(shù)據(jù)報會發(fā)生重復(fù)飘弧,TCP接收端必須丟棄重復(fù)的數(shù)據(jù)识藤。
TCP還提供流量控制。TCP連接的每一方都有固定大小的緩沖空間次伶。接收端只允許另一端發(fā)生緩沖區(qū)能接納的數(shù)據(jù)痴昧,可防止較慢的主機緩沖區(qū)溢出。
TCP首部
每個TCP段都包含源端口號和目的端口號冠王,用于尋找發(fā)送進程和接收進程赶撰。再加上IP首部中的源IP地址和目的IP地址可唯一確認一個TCP連接。
一個IP地址和一個端口號稱為一個插口柱彻。插口對(客戶IP地址豪娜,客戶端口號,服務(wù)器IP地址哟楷,服務(wù)器端口號)四元組可唯一確定每個TCP連接瘤载。
序號用來標識從TCP發(fā)送端向TCP接收端端數(shù)據(jù)字節(jié)流,TCP用序號對每個字節(jié)進行計數(shù)吓蘑。序號滿后又從0開始惕虑。
當建立一個新連接時,SYN標志變1.序號字段包含由這個主機選擇的該連接的初始序號ISN磨镶,主機要發(fā)送數(shù)據(jù) 的第一個字節(jié)序號為這個ISN+1(發(fā)送SYN消耗了一個序號)
確認序號包含發(fā)送確認端所期望收到的下一個序號溃蔫。因此,確認序號是上次成功收到數(shù)據(jù)字節(jié)序號+1琳猫。
TCP為應(yīng)用層提供全雙工服務(wù)伟叛。這意味數(shù)據(jù)能在兩個方向上獨立地進行傳輸。連接的每一端必須保持每個方向上的傳輸數(shù)據(jù)序號脐嫂。
TCP首部中有6個標志比特位
- URG 緊急指針
- ACK 確認序號有效
- PSH 接收方應(yīng)將這個報文盡快交給應(yīng)用層统刮。
- SYN 同步序號用來發(fā)起一個連接。
- 完成發(fā)送任務(wù)账千。
TCP的流量控制是由每一端聲明的窗口大小來提供的侥蒙。
最常見的可選字段是最長報文大小,MSS匀奏。每個連接方通常都在通信的第一個報文段中指明這個選項鞭衩,這指明本端能接收的最大長度的報文段。