TCP/IP的分層
TCP勉盅,UDP是最著名的兩種運輸層協(xié)議,它們都使用網(wǎng)絡(luò)層中的IP協(xié)議。雖然IP協(xié)議是不可靠的服務(wù)锅铅,但是TCP卻提供了一種可靠的運輸層服務(wù)。
TCP有眾多應(yīng)用减宣,比如Telnet盐须、FTP、SMTP等漆腌。
TCP贼邓,全稱Transmission Control Protocol 傳輸控制協(xié)議姨蟋。TCP是一種面向連接的,可靠的字節(jié)流服務(wù)立帖。
TCP通過下列方式來提供可靠性
- 應(yīng)用數(shù)據(jù)被分割成TCP認為合適的數(shù)據(jù)塊眼溶。這一點和UDP不同,UDP不會改變數(shù)據(jù)報文的長度晓勇。由TCP傳遞給IP的信息單位稱為報文段或者段堂飞。
- 當TCP發(fā)出一個報文段后,它會啟動一個定時器绑咱,等待目的端收到這個報文段绰筛,如果不能及時收到一個來自目的端的確認,它將重發(fā)這個報文段描融。(這里用到了超時重傳策略)
- 當TCP收到另一端的數(shù)據(jù)時铝噩,它會發(fā)送一個確認,這個確認不是立即發(fā)送窿克,而是在幾分之一秒之后骏庸。
- TCP將保持它首部和數(shù)據(jù)的校驗和。這是端到端的校驗和年叮,目的是檢測數(shù)據(jù)在傳輸過程中的變化具被。如果收到的校驗和有差錯,TCP將會丟棄這個報文段只损,并不會給目的端發(fā)送確認一姿,期望目的端重新發(fā)送(超時重傳策略)。
- TCP報文段作用IP數(shù)據(jù)報來傳輸跃惫,而IP數(shù)據(jù)報的到達可能會是亂序的叮叹,因此TCP報文段的到達也可能是亂序的。如果必要爆存,TCP會將收到的數(shù)據(jù)進行重新排序蛉顽,然后把收到的數(shù)據(jù)以正確的順序交給應(yīng)用層。
- IP數(shù)據(jù)報可能會發(fā)生重復终蒂,TCP的接收端必須丟棄重復的數(shù)據(jù)蜂林。
- TCP還能提供流量控制,TCP連接的每一個地方都有固定大小的緩沖空間拇泣。TCP的接收端噪叙,只允許另一端發(fā)送接受緩沖區(qū)可以容納的數(shù)據(jù)量。這將防止較快主機導致較慢主機緩沖區(qū)溢出霉翔。
有一點要注意睁蕾,TCP只負責傳輸,它并不知道傳輸?shù)氖鞘裁搭愋偷臄?shù)據(jù),在這里都是字節(jié)流子眶。只有到了應(yīng)用層才能被解析瀑凝。
TCP的首部
TCP在運輸層,IP在網(wǎng)絡(luò)層臭杰,一個IP數(shù)據(jù)報的內(nèi)部是這樣的粤咪。
TCP首部都放了什么呢?如下圖:
如果不計任選字段渴杆,它通常是20個字節(jié)寥枝。(8位是一個字節(jié))
下面得說一下它們的作用。
前4個字節(jié)磁奖,存放了源端和目的端口號囊拜,用于尋找收端和發(fā)端應(yīng)用進程。這兩個值加上IP首部中的源端IP地址和目的端IP地址唯一確定一個TCP連接比搭。
第5-8字節(jié)冠跷,表示序號。這個序號的作用是用來標識從TCP發(fā)送端到接受端發(fā)送的數(shù)據(jù)字節(jié)流身诺,它表示在這個報文段中的第一個數(shù)據(jù)字節(jié)蜜托。
第9-12字節(jié),表示確認序號戚长,里面放的是盗冷,發(fā)送確認的一端所期望收到的下一個序號
6個標志bit:
U R G 緊急指針( u rgent pointer)有效。
A C K 確認序號有效同廉。
P S H 接收方應(yīng)該盡快將這個報文段交給應(yīng)用層。
R S T 重建連接柑司。
S Y N 同步序號用來發(fā)起一個連接迫肖。
F I N 發(fā)端完成發(fā)送任務(wù)。
校驗和:這是一個強制性字段攒驰,由發(fā)端計算和存儲蟆湖,并由收端進行驗證。
第15-16字節(jié):活動窗口協(xié)議玻粪。
插一句隅津,TCP為應(yīng)用層提供的是全雙工服務(wù),也就是說數(shù)據(jù)可以在兩個方向上獨立的進行傳輸劲室。
總結(jié):TCP將用戶數(shù)據(jù)打包構(gòu)成報文段伦仍;它發(fā)送數(shù)據(jù)后啟動一個定時器;另一端對收到的數(shù)據(jù)
進行確認很洋,對失序的數(shù)據(jù)重新排序充蓝,丟棄重復數(shù)據(jù); T C P提供端到端的流量控制,并計算和
驗證一個強制性的端到端檢驗和谓苟。