手機(jī)做推廣比較好的網(wǎng)站2024年重大政治時(shí)事匯總
目錄
一、 運(yùn)輸層概述
二、運(yùn)輸層端口號(hào)、復(fù)用與分用的概念
三、UDP和TCP的對(duì)比
四、TCP的流量控制
五、TCP的擁塞控制
六、TCP超時(shí)重傳時(shí)間的選擇
七、TCP可靠傳輸?shù)膶?shí)現(xiàn)
八、TCP報(bào)文段的首部格式
一、 運(yùn)輸層概述
物理層、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層實(shí)現(xiàn)了主機(jī)到主機(jī)的通信。
如何為運(yùn)行在不同主機(jī)上的應(yīng)用進(jìn)程提供直接的通信服務(wù)是運(yùn)輸層的任務(wù),運(yùn)輸層協(xié)議又稱為端到端協(xié)議。
二、運(yùn)輸層端口號(hào)、復(fù)用與分用的概念
發(fā)送方的復(fù)用和接收方的分用
TCP/IP體系的應(yīng)用層常用協(xié)議所使用的運(yùn)輸層熟知端口號(hào)
三、UDP和TCP的對(duì)比
這兩種協(xié)議就是本章要討論的主要內(nèi)容
用戶數(shù)據(jù)報(bào)協(xié)議UDP(User Datagram Protocol)
傳輸控制協(xié)議TCP(Transmission Control Protocol)
UDP
- 無(wú)連接
- 支持一對(duì)一,一對(duì)多,多對(duì)一和多對(duì)多交互通信。
- 對(duì)應(yīng)用層交付的報(bào)文直接打包
- 盡最大努力交付,也就是不可靠;不使用流量控制和擁塞控制。
- 首部開(kāi)銷小,僅8字節(jié)
TCP
- 面向連接
- 每一條TCP連接只能有兩個(gè)端點(diǎn)EP,只能是一對(duì)一通信。
- 面向字節(jié)流
- 可靠傳輸,使用流量控制和擁塞控制。
- 首部最小20字節(jié),最大60字節(jié)
四、TCP的流量控制
流量控制:讓發(fā)送方的發(fā)送速率不要太快,要讓接收方來(lái)得及接收
利用滑動(dòng)窗口機(jī)制可以很方便地在TCP連接上實(shí)現(xiàn)對(duì)發(fā)送方的流量控制。
五、TCP的擁塞控制
擁塞:在某段時(shí)間,若對(duì)網(wǎng)絡(luò)中某一資源的需求超過(guò)了該資源所能提供的可用部分,網(wǎng)絡(luò)性能就要變壞的情況
擁塞窗口cwnd:發(fā)送方維護(hù)的狀態(tài)變量,其值取決于網(wǎng)絡(luò)的擁塞程度,并且動(dòng)態(tài)變化。冂
擁塞窗口cwnd的維護(hù)原則:只要網(wǎng)絡(luò)沒(méi)有出現(xiàn)擁塞,擁塞窗口就再增大一些;但只要網(wǎng)絡(luò)出現(xiàn)擁塞,擁塞窗口就減少
一些判斷出現(xiàn)網(wǎng)絡(luò)擁塞的依據(jù):沒(méi)有按時(shí)收到應(yīng)當(dāng)?shù)竭_(dá)的確認(rèn)報(bào)文(即發(fā)生超時(shí)重傳)
發(fā)送方將擁塞窗口作為發(fā)送窗口swnd,即swnd=cwnd
維護(hù)一個(gè)慢開(kāi)始門限ssthresh狀態(tài)變量
“慢開(kāi)始”是指一開(kāi)始向網(wǎng)絡(luò)注入的報(bào)文段少,并不是指擁塞窗口cwnd增長(zhǎng)速度慢;
“擁塞避免”并非指完全能夠避免擁塞,而是指在擁塞避免階段將擁塞窗口控制為按線性規(guī)律增長(zhǎng),使網(wǎng)絡(luò)比較不容易出現(xiàn)擁塞;有時(shí)個(gè)別報(bào)文段會(huì)在網(wǎng)絡(luò)中丟失,但實(shí)際上網(wǎng)絡(luò)并未發(fā)生擁塞,這將導(dǎo)致發(fā)送方超時(shí)重傳,并誤認(rèn)為網(wǎng)絡(luò)發(fā)生了擁塞,會(huì)降低了傳輸效率。
采用快重傳算法可以讓發(fā)送方盡早知道發(fā)生了個(gè)別報(bào)文段的丟失,就是使發(fā)送方盡快進(jìn)行重傳,而不是等超時(shí)重傳計(jì)時(shí)器超時(shí)再重傳,
- 要求接收方不要等待自己發(fā)送數(shù)據(jù)時(shí)才進(jìn)行捎帶確認(rèn),而是要立即發(fā)送確認(rèn)
- 即使收到了失序的報(bào)文段也要立即發(fā)出對(duì)已收到的報(bào)文段的重復(fù)確認(rèn)
- 發(fā)送方一旦收到3個(gè)連續(xù)的重復(fù)確認(rèn),就將相應(yīng)的報(bào)文段立即重傳,而不是等該報(bào)文段的超時(shí)重傳計(jì)時(shí)器超時(shí)再重傳
發(fā)送方一旦收到3個(gè)重復(fù)確認(rèn),就知道現(xiàn)在只是丟失了個(gè)別的報(bào)文段。于是執(zhí)行快恢復(fù)算法
發(fā)送方將慢開(kāi)始門限ssthresh值和擁塞窗口cwnd值調(diào)整為當(dāng)前窗口的一半;開(kāi)始執(zhí)行擁塞避免算法。
六、TCP超時(shí)重傳時(shí)間的選擇
RFC6298建議使用下式計(jì)算超時(shí)重傳時(shí)間RTO
針對(duì)出現(xiàn)超時(shí)重傳時(shí)無(wú)法測(cè)準(zhǔn)往返時(shí)間RTT的問(wèn)題,Karn提出了一個(gè)算法:出現(xiàn)重傳時(shí),不重新計(jì)算RTTS
這又引起了新的問(wèn)題。設(shè)想出現(xiàn)這樣的情況:報(bào)文段的時(shí)延突然增大了很多,并且之后很長(zhǎng)一段時(shí)間都會(huì)保持這種時(shí)延。因此在原來(lái)得出的重傳時(shí)間內(nèi),不會(huì)收到確認(rèn)報(bào)文段。于是就重傳報(bào)文段。但根據(jù)Karn算法,不考慮重傳的報(bào)文段的往返時(shí)間樣本。這樣,超時(shí)重傳時(shí)間就無(wú)法更新。這會(huì)導(dǎo)致報(bào)文段反復(fù)被重傳。
因此,要對(duì)Karn算法進(jìn)行修正。方法是:報(bào)文段每重傳一次,就把超時(shí)重傳時(shí)間RTO增大一些。典型的做法是將新RTO的值取為舊RTO值的2倍。
TCP基于以字節(jié)為單位的滑動(dòng)窗口來(lái)實(shí)現(xiàn)可靠傳輸
TCP基于以字節(jié)為單位的滑動(dòng)窗口來(lái)實(shí)現(xiàn)可靠傳輸。
- 發(fā)送方在未收到接收方的確認(rèn)時(shí),可將發(fā)送窗口內(nèi)還未發(fā)送的數(shù)據(jù)全部發(fā)送出去:
- 接收方只接收序號(hào)落入發(fā)送窗口內(nèi)的數(shù)據(jù);
雖然發(fā)送方的發(fā)送窗口是根據(jù)接收方的接收窗口設(shè)置的,但在同一時(shí)刻,發(fā)送方的發(fā)送窗口并不總是和接收方的接收窗口一樣大。
- 網(wǎng)絡(luò)傳送窗口值需要經(jīng)歷一定的時(shí)間滯后,并且這個(gè)時(shí)間還是不確定的,
- 發(fā)送方還可能根據(jù)網(wǎng)絡(luò)當(dāng)時(shí)的擁塞情況適當(dāng)減小自己的發(fā)送窗口尺寸。
對(duì)于不按序到達(dá)的數(shù)據(jù)應(yīng)如何處理,TCP并無(wú)明確規(guī)定。
- 如果接收方把不按序到達(dá)的數(shù)據(jù)一律丟棄,那么接收窗口的管理將會(huì)比較簡(jiǎn)單,但這樣做對(duì)網(wǎng)絡(luò)資源的利用不利,因?yàn)榘l(fā)送方會(huì)重復(fù)傳送較多的數(shù)據(jù)。
- TCP通常對(duì)不按序到達(dá)的數(shù)據(jù)是先臨時(shí)存放在接收窗口中,等到字節(jié)流中所缺少的字節(jié)收到后,再按序交付上層的應(yīng)用進(jìn)程
TCP要求接收方必須有累積確認(rèn)和捎帶確認(rèn)機(jī)制,這樣可以減小傳輸開(kāi)銷。接收方可以在合適的時(shí)候發(fā)送確認(rèn),也可以在自己有數(shù)據(jù)要發(fā)送時(shí)把確認(rèn)信息順便捎帶上。
- 接收方不應(yīng)過(guò)分推遲發(fā)送確認(rèn),否則會(huì)導(dǎo)致發(fā)送方不必要的超時(shí)重傳,這反而浪費(fèi)了網(wǎng)絡(luò)的資源。TCP標(biāo)準(zhǔn)規(guī)定,確認(rèn)推遲的時(shí)間不應(yīng)超過(guò)0.5秒,若收到一連串具有最大長(zhǎng)度的報(bào)文段,則必須每隔一個(gè)報(bào)文段就發(fā)送一個(gè)確認(rèn)[RFC 1122].
- 捎帶確認(rèn)實(shí)際上井不經(jīng)常發(fā)生,因?yàn)榇蠖鄶?shù)應(yīng)用程序很少同時(shí)在兩個(gè)方向上發(fā)送數(shù)據(jù)。
TCP的通信是全雙工通信。通信中的每一方都在發(fā)送和接收?qǐng)?bào)文段,因此,每一方都有自己的發(fā)送窗口和接收窗口。在談到這些窗口時(shí),-定要弄清楚是哪一方的窗口
七、TCP可靠傳輸?shù)膶?shí)現(xiàn)
TCP的連接建立要解決以下三個(gè)問(wèn)題:
- 使TCP雙方能夠確知對(duì)方的存在;
- 使TCP雙方能夠協(xié)商一些參數(shù)(如最大窗口值、是否使用窗口擴(kuò)大選項(xiàng)和時(shí)間戳選項(xiàng)以及服務(wù)質(zhì)量等)
- 使TCP雙方能夠?qū)\(yùn)輸實(shí)體資源(如緩存大小、連接表中的項(xiàng)目等)進(jìn)行分配。
TCP使用“三報(bào)文握手”建立連接
最后一次握手是否多余?
不多余
這是為了防止已失效的連接請(qǐng)求報(bào)文段突然又傳送到了TCP服務(wù)器,因而導(dǎo)致錯(cuò)誤
TCP通過(guò)“四報(bào)文揮手”來(lái)釋放連接
(MSL(Maximum Segment Lifetime)意思是最長(zhǎng)報(bào)文段壽命,RFC793建議為2分鐘)
發(fā)送方最后一次等待有必要嗎?
有必要
客戶端出現(xiàn)故障,服務(wù)器端如何發(fā)現(xiàn)?
TCP服務(wù)器進(jìn)程每收到一次TCP客戶進(jìn)程的數(shù)據(jù),就重新設(shè)置并啟動(dòng)?;钣?jì)時(shí)器(2小時(shí)定時(shí))
若保活計(jì)時(shí)器定時(shí)周期內(nèi)未收到TCP客戶進(jìn)程發(fā)來(lái)的數(shù)據(jù),則當(dāng)?;钣?jì)時(shí)器到時(shí)后,TCP服務(wù)器進(jìn)程就向TCP客戶進(jìn)程發(fā)送一個(gè)探測(cè)報(bào)文段,以后則每隔75秒鐘發(fā)送一次。若一連發(fā)送10個(gè)探測(cè)報(bào)文段后仍無(wú)TCP客戶進(jìn)程的響應(yīng),TCP服務(wù)器進(jìn)程就認(rèn)為TCP客戶進(jìn)程所在主機(jī)出了故障,接著就關(guān)閉這個(gè)連接。
八、TCP報(bào)文段的首部格式
源端口:占16比特,寫入源端口號(hào),用來(lái)標(biāo)識(shí)發(fā)送該TCP報(bào)文段的應(yīng)用進(jìn)程
目的端口:占16比特,寫入目的端口號(hào),用來(lái)標(biāo)識(shí)接收該TCP報(bào)文段的應(yīng)用進(jìn)程
序號(hào):占32比特,取值范圍[0,2”1],序號(hào)增加到最后一個(gè)后,下一個(gè)號(hào)就又回到0。指出本TCP報(bào)文段數(shù)據(jù)載荷的第一個(gè)字節(jié)的序號(hào)
確認(rèn)號(hào):占32比特,確認(rèn)號(hào)增加到最后一個(gè)后,下一個(gè)確認(rèn)號(hào)就又回到0
指出期望收到對(duì)方下一個(gè)TCP報(bào)文段的數(shù)據(jù)載荷的第一個(gè)字節(jié)的序號(hào),同時(shí)也是對(duì)之前收到的所有數(shù)據(jù)的確認(rèn)
確認(rèn)標(biāo)志位ACK:取值為1時(shí)確認(rèn)號(hào)字段才有效;取值為0時(shí)確認(rèn)號(hào)字段無(wú)效(TCP規(guī)定,在連接建立后所有傳送的TGP報(bào)文段都必須把AGK置1。)
數(shù)據(jù)偏移:占4比特,并以4字節(jié)為單位。
用來(lái)指出TCP報(bào)文段的數(shù)據(jù)載荷部分的起始處距離TCP報(bào)文段的起始處有多遠(yuǎn)這個(gè)字段實(shí)際上是指出了TGP報(bào)文段的首部長(zhǎng)度。
首部固定長(zhǎng)度為20字節(jié),因此數(shù)據(jù)偏移字段的最小值為(0101)2
首部最大長(zhǎng)度為60字節(jié),因此數(shù)據(jù)偏移字段的最大值為(1111)2保留:占6比特,保留為今后使用,但目前應(yīng)置為0
窗口:占16比特,以字節(jié)為單位。指出發(fā)送本報(bào)文段的一方的接收窗口
校驗(yàn)和:占16比特,檢查范圍包括TCP報(bào)文段的首部和數(shù)據(jù)載荷兩部分,在計(jì)算校驗(yàn)和時(shí),要在TCP報(bào)文段的前面加上12字節(jié)的偽首部。
同步標(biāo)志位SYN:在TCP連接建立時(shí)用來(lái)同步序號(hào)。
終止標(biāo)志位FIN:用來(lái)釋放TCP連接
復(fù)位標(biāo)志位RST:用來(lái)復(fù)位TCP連接。
當(dāng)RST=1時(shí),表明TGP連接出現(xiàn)了異常,必須釋放連接,然后再重新建立連接RST置1還用來(lái)拒絕一個(gè)非法的報(bào)文段或拒絕打開(kāi)一個(gè)TGP連接推送標(biāo)志位PSH:接收方的TCP收到該標(biāo)志位為1的報(bào)文段會(huì)盡快上交應(yīng)用進(jìn)程而不必等到接收緩存都填滿后再向上交付。
緊急標(biāo)志位URG:取值為1時(shí)緊急指針字段有效;取值為0時(shí)緊急指針字段無(wú)效。
緊急指針:占16比特,以字節(jié)為單位,用來(lái)指明緊急數(shù)據(jù)的長(zhǎng)度。填充:由于選項(xiàng)的長(zhǎng)度可變,因此使用填充來(lái)確保報(bào)文段首部能被4整除(因?yàn)閿?shù)據(jù)偏移字段,也就是首部長(zhǎng)度字段,是以4字節(jié)為單位的)