TCP和UDP協(xié)議

1 運(yùn)輸層協(xié)議概述

1.1 進(jìn)程之間的通信

  • 網(wǎng)絡(luò)層是為主機(jī)之間提供邏輯通信岗喉,而運(yùn)輸層為應(yīng)用進(jìn)程之間提供端到端的邏輯通信秋度。
  • 運(yùn)輸層要對收到的報(bào)文進(jìn)行差錯(cuò)檢測。在網(wǎng)絡(luò)層钱床,IP數(shù)據(jù)報(bào)首部中的檢驗(yàn)和字段只檢驗(yàn)首部是否出現(xiàn)差錯(cuò)而不檢查數(shù)據(jù)部分荚斯。
  • 根據(jù)應(yīng)用程序的不同需求,運(yùn)輸層需要有兩種不同的運(yùn)輸協(xié)議查牌,即面向連接的TCP和無連接的UDP:用戶數(shù)據(jù)報(bào)協(xié)議UDP事期,傳輸控制協(xié)議TCP
  • 運(yùn)輸層向高層用戶屏蔽了下面網(wǎng)絡(luò)核心的細(xì)節(jié)(如網(wǎng)絡(luò)拓?fù)洹⑺捎玫穆酚蛇x擇協(xié)議等)纸颜,它使應(yīng)用進(jìn)程看見的就是好像在兩個(gè)運(yùn)輸層實(shí)體之間有一條端到端的邏輯通信信道刑赶。當(dāng)運(yùn)輸層采用面向連接的TCP協(xié)議時(shí),盡管下面的網(wǎng)絡(luò)是不可靠的懂衩,但這種邏輯通信信道就像但與一條全雙工的可靠信道。但當(dāng)運(yùn)輸層采用無連接的UDP協(xié)議時(shí),這種邏輯信道仍然是一條不可靠信道浊洞。

1.2 運(yùn)輸層的兩個(gè)主要協(xié)議

UDP在傳送數(shù)據(jù)之前不需要先建立連接牵敷。遠(yuǎn)地主機(jī)的運(yùn)輸層在收到UDP豹紋后,不需要給出任何確認(rèn)法希,雖然UDP不提供可靠交付枷餐,但在某些情況下UDP確實(shí)一種最有效的工作方式。

TCP則是提供面向連接的服務(wù)苫亦。在傳送數(shù)據(jù)之前必須先建立連接毛肋,數(shù)據(jù)傳送結(jié)束后要釋放連接。由于TCP要提供可靠的屋剑、面向連接的運(yùn)輸服務(wù)润匙,因此不可避免地增加了許多開銷,如確認(rèn)唉匾、流量控制孕讳、計(jì)時(shí)器以及連接管理等。這不僅使協(xié)議數(shù)據(jù)單元的首部增大很多巍膘,還要占用許多的處理器資源厂财。

1.3 運(yùn)輸層的端口

應(yīng)用層所有進(jìn)程都可以通過運(yùn)輸層傳送到IP層,這就是復(fù)用峡懈。運(yùn)輸層從IP層收到數(shù)據(jù)后必須交付給指明的應(yīng)用程序璃饱,這就是分用。顯然肪康,給應(yīng)用層的每個(gè)應(yīng)用進(jìn)程賦予一個(gè)非常明確的標(biāo)志是至關(guān)重要的荚恶。

這個(gè)可以通過在運(yùn)輸層使用端口來實(shí)現(xiàn)。這就是說梅鹦,雖然通信的終點(diǎn)是應(yīng)用進(jìn)程裆甩,但我們只需要把要傳送的報(bào)文叫到目的主機(jī)的某一個(gè)合適的目的端口,剩下的工作(即交付給目的進(jìn)程)就有TCP來完成齐唆。這里的端口是應(yīng)用層的各種協(xié)議進(jìn)程與運(yùn)輸實(shí)體進(jìn)行層間交互的一種地址嗤栓。

TCP/IP的運(yùn)輸層用一個(gè)16位端口號來標(biāo)志一個(gè)端口。但是箍邮,端口號只具有本地意義茉帅,它只是為了標(biāo)志本計(jì)算機(jī)應(yīng)用層中的各個(gè)進(jìn)程在運(yùn)輸層交互時(shí)的層間接口。在因特網(wǎng)不同計(jì)算機(jī)中锭弊,相同的端口號是沒有關(guān)聯(lián)的堪澎。由此可見,兩個(gè)計(jì)算機(jī)中的進(jìn)程要通信味滞,不僅要知道對方的IP地址(為了找到對方的計(jì)算機(jī))樱蛤,還要知道對方的端口號(為了找到對方計(jì)算機(jī)中的應(yīng)用進(jìn)程)钮呀。

因特網(wǎng)上的計(jì)算機(jī)通信是采用客戶-服務(wù)器方式∽蚍玻客戶在發(fā)起通信請求式爽醋,必須先知道對方的IP地址和端口號。因此運(yùn)輸層的端口號分為服務(wù)器端使用的端口號和客戶端使用的端口號便脊。


2 用戶數(shù)據(jù)報(bào)協(xié)議UDP

UDP協(xié)議只在IP的數(shù)據(jù)報(bào)服務(wù)之上增加了很少的功能蚂四,就是復(fù)用和分用的功能以及差錯(cuò)檢測的功能。UDP的主要特點(diǎn)是:

  • UDP是無連接的哪痰,即發(fā)送數(shù)據(jù)之間不需要建立連接遂赠,因此減少了開銷和發(fā)送數(shù)據(jù)之前的時(shí)延。
  • UDO使用盡最大努力交付晌杰,即不保證可靠交付跷睦,因此主機(jī)不需要維持復(fù)雜的連接狀態(tài)。
  • UDP是面向報(bào)文乎莉。發(fā)送方的UDP對應(yīng)用程序交下來的報(bào)文在添加首部后就向下交付給IP層送讲,對交下來的報(bào)文既不合并也不拆分。因此惋啃,應(yīng)用進(jìn)程必須選擇合適大小的報(bào)文哼鬓,若報(bào)文太長,UDP把它交付給IP層后边灭,IP層在傳送時(shí)可能要進(jìn)行分片异希,這會降低IP層的效率;反之绒瘦,若報(bào)文太短称簿,UDO把它交給IP層后,會使IP數(shù)據(jù)報(bào)的首部的相對長度太大惰帽,也降低了IP層的效率憨降。
  • UDP沒有擁塞控制,保證了應(yīng)用的實(shí)時(shí)性该酗。
  • 支持一對一授药、一對多、多對一和多對多的交互通信呜魄。
  • UDP的首部開銷小悔叽,只有8個(gè)字節(jié),比TCP的20個(gè)字節(jié)的首部要短爵嗅。

2.1 UDP首部的格式

UDP有數(shù)據(jù)字段和首部字段兩個(gè)字段娇澎。首部字段只有8個(gè)字節(jié),分別為源端口睹晒、目的端口趟庄、長度和檢驗(yàn)和括细。檢驗(yàn)和用于檢測UDP用戶數(shù)據(jù)報(bào)在傳輸中是否有錯(cuò),有錯(cuò)就丟棄戚啥。

當(dāng)運(yùn)輸層從IP層收到UDP數(shù)據(jù)報(bào)時(shí)勒极,就根據(jù)首部中的目的端口,把UDP數(shù)據(jù)報(bào)通過相應(yīng)的端口上交給進(jìn)程虑鼎。如果接方UDP發(fā)現(xiàn)收到的報(bào)文中的目的端口不正確就丟棄報(bào)文,并由ICMP發(fā)送“端口不可達(dá)”差錯(cuò)報(bào)文交給發(fā)送方键痛。

在計(jì)算檢驗(yàn)和時(shí)炫彩,要在UDP用戶數(shù)據(jù)報(bào)之前增加12個(gè)字節(jié)的偽首部⌒醵蹋“偽首部”并不是用戶數(shù)據(jù)報(bào)真正的首部江兢,只是在計(jì)算檢驗(yàn)和時(shí),臨時(shí)添加在UDP數(shù)據(jù)報(bào)前面丁频,得到一個(gè)臨時(shí)UDP數(shù)據(jù)報(bào)杉允。偽首部既不向下傳送也不向上遞交,僅僅是為了計(jì)算檢驗(yàn)和席里。

2.2 UDP的典型應(yīng)用

  • UDP適合于這樣的進(jìn)程:需要簡單的請求-響應(yīng)通信叔磷,而較少考慮流量控制和差錯(cuò)控制。對于需要傳送成塊數(shù)據(jù)的進(jìn)程(如FTP)則不適合使用UDP奖磁。
  • UDP適合于具有內(nèi)部流量控制和差錯(cuò)控制機(jī)制的進(jìn)程改基,如簡單文件傳輸協(xié)議TFTP。
  • 對多播來說咖为,UDP是一個(gè)合適的傳輸協(xié)議秕狰。
  • UDP常用于交互實(shí)時(shí)應(yīng)用,以避免接收報(bào)文之間的不一致延時(shí)躁染。
  • UDP可用于管理進(jìn)程鸣哀,如SNMP。

3 傳輸控制協(xié)議TCP

3.1 TCP最主要的特點(diǎn)

  • TCP是面向連接的運(yùn)輸層協(xié)議吞彤。應(yīng)用程序在使用TCP協(xié)議之前我衬,必須先簡歷TCP連接。在傳送數(shù)據(jù)完畢后备畦,必須釋放已經(jīng)簡歷的TCP連接低飒。
  • 每一條TCP連接只能有兩個(gè)端點(diǎn),只能是點(diǎn)對點(diǎn)的懂盐。
  • TCP提供可靠交付的服務(wù)褥赊。TCP連接傳送的數(shù)據(jù)保證無差錯(cuò)、不丟失莉恼、不重復(fù)拌喉、并按序到達(dá)速那。
  • TCP提供全雙工通信。TCP允許通信雙方的應(yīng)用進(jìn)程在任何時(shí)候都能發(fā)送數(shù)據(jù)尿背。TCP連接的兩端都設(shè)有發(fā)送緩存和接收緩存端仰,用來臨時(shí)存放雙向通信的數(shù)據(jù)。
  • 面向字節(jié)流田藐。雖然應(yīng)用程序和TCP的交互是一次一個(gè)數(shù)據(jù)塊荔烧,但TCP把應(yīng)用程序交下來的數(shù)據(jù)看成是一連串的務(wù)結(jié)構(gòu)的字節(jié)流。TCP不保證接收方應(yīng)用程序所收到的數(shù)據(jù)塊和發(fā)送方應(yīng)用程序所發(fā)出的數(shù)據(jù)塊具有對應(yīng)大小的關(guān)系(例如汽久,發(fā)送方應(yīng)用程序交給發(fā)送方TCP共有10個(gè)數(shù)據(jù)塊鹤竭,但接收方TCP可能只用了4個(gè)數(shù)據(jù)塊就把收到的字節(jié)流交付給了上層應(yīng)用程序)。但接收方應(yīng)用程序收到的字節(jié)流必須和發(fā)送方應(yīng)用程序發(fā)出的字節(jié)流完全一樣景醇。

3.2 TCP的連接

每一條TCP連接有兩個(gè)端點(diǎn)臀稚,而TCP的端點(diǎn)叫做套接字(由端口號拼接到IP地址形成的),套接字的表示方法是在點(diǎn)分十進(jìn)制的IP地址后面寫上端口號三痰,中間用冒號或都好隔開吧寺。

套接字Socket = (IP地址: 端口號)

每一條TCP連接唯一的被通信兩端的兩個(gè)套接字所確定:

TCP連接::={socket1, socket2} = {(IP1:port1), (IP2:port2)}

3.3 TCP報(bào)文的首部格式

TCP雖然是面向字節(jié)流的,但TCP傳送的數(shù)據(jù)單元卻是報(bào)文段散劫。一個(gè)TCP報(bào)文段分為首部和數(shù)據(jù)兩部分稚机,而TCP的全部功能都體現(xiàn)在它首部中各字段的作用。因此舷丹,只有弄清TCP首部各字段的作用才能掌握TCP的工作原理抒钱。TCP報(bào)文首部固定部分各字段的意義如下:

  1. 源端口和目的端口
    各占兩字節(jié),分別寫入源端口號和目的端口號颜凯。TCP的分用也是通過端口實(shí)現(xiàn)的谋币。

  2. 報(bào)文段序號
    占4字節(jié)。在一個(gè)TCP連接中傳送的字節(jié)流中的每一個(gè)字節(jié)都按順序編號症概。整個(gè)要傳送的字節(jié)流的起始序號必須在連接建立時(shí)設(shè)置蕾额,首部中的序號字段值則是指本報(bào)文所發(fā)送的數(shù)據(jù)的第一個(gè)字節(jié)的序號。

  3. 確認(rèn)號
    期望收到對方下一個(gè)報(bào)文段的第一個(gè)數(shù)據(jù)字節(jié)的序號彼城。若確認(rèn)號為N诅蝶,則表明到序號N-1為止的所有數(shù)據(jù)都已正確收到。

  4. 數(shù)據(jù)偏移
    指出TCP報(bào)文段的數(shù)據(jù)起始處距離TCP報(bào)文段的起始處有多遠(yuǎn)募壕,實(shí)際上指出了TCP報(bào)文段的首部長度调炬。

  5. 保留
    保留為今后使用,目前應(yīng)置為0.

  6. 6個(gè)控制位
    緊急URG:當(dāng)URG為1時(shí)舱馅,表明緊急指針字段有效缰泡,告訴系統(tǒng)有緊急數(shù)據(jù),應(yīng)盡快優(yōu)先傳送代嗤。
    確認(rèn)ACK:TCP規(guī)定棘钞,在連接建立后所有傳送的報(bào)文段都必須把ACK置1缠借。
    推送PSH,很少使用宜猜。
    復(fù)位RST:當(dāng)RST=1時(shí)泼返,表明TCP連接中出現(xiàn)嚴(yán)重錯(cuò)誤,必須釋放連接姨拥,然后再重新建立運(yùn)輸連接绅喉。
    同步SYN:在連接建立時(shí)用來同步序號。當(dāng)SYN=1而ACK=0時(shí)叫乌,表明這是一個(gè)連接請求報(bào)文段霹疫。對方若同意建立連接,則應(yīng)在響應(yīng)的報(bào)文段中使用SYN=1和ACK=1.
    終止FIN:用來釋放一個(gè)連接综芥。當(dāng)FIN=1時(shí),表明此報(bào)文段的發(fā)送方的數(shù)據(jù)已發(fā)送完畢猎拨,并要求釋放運(yùn)輸連接膀藐。

  7. 窗口
    窗口字段明確指出了現(xiàn)在允許對方發(fā)送的數(shù)據(jù)量,該值經(jīng)常在動(dòng)態(tài)變化著红省。例如额各,設(shè)確認(rèn)號是701,窗口字段是1000吧恃。這就表明從701算起虾啦,發(fā)送此報(bào)文段的一方還有接收1000個(gè)字節(jié)數(shù)據(jù)的接收緩存空間。

  8. 檢驗(yàn)和
    檢驗(yàn)和字段檢驗(yàn)的范圍包括首部和數(shù)據(jù)這兩部分痕寓。和UDP一樣傲醉,在計(jì)算檢驗(yàn)和時(shí)要在TCP報(bào)文段的前面加上12字節(jié)的偽首部。

  9. 緊急指針
    緊急指針僅在URG=1時(shí)才有意義呻率,它指出本報(bào)文段中的緊急數(shù)據(jù)的字節(jié)數(shù)硬毕。**即使窗口為零時(shí)也可發(fā)送緊急數(shù)據(jù)。

  10. 選項(xiàng)
    可選選項(xiàng)有最大報(bào)文長度MSS礼仗、窗口擴(kuò)大選項(xiàng)吐咳、時(shí)間戳選項(xiàng)、選擇確認(rèn)選項(xiàng)等

3.4 TCP可靠傳輸?shù)膶?shí)現(xiàn)

為方便描述可靠傳輸原理元践,假定數(shù)據(jù)傳輸只在一個(gè)方向上進(jìn)行韭脊,即A發(fā)送數(shù)據(jù),B給出確認(rèn)单旁。TCP的滑動(dòng)窗口是以字節(jié)為單位的沪羔。假定A收到B發(fā)來的確認(rèn)報(bào)文字段,其中窗口是20字節(jié)慎恒,而確認(rèn)號是31字節(jié)任内。(表明B期望接收到的下一個(gè)序號是31撵渡,序號30之前的數(shù)據(jù)已經(jīng)收到了)。A的發(fā)送窗口的位置由B發(fā)來的確認(rèn)報(bào)文中的確認(rèn)號和窗口大小確定死嗦。

現(xiàn)在假定A發(fā)送了序號為31-41的數(shù)據(jù)趋距,從下圖圖中可以看出要描述一個(gè)發(fā)送窗口的狀態(tài)需要三個(gè)指針P1, P2越除, P3节腐。小于P1的是已發(fā)送并收到確認(rèn)的部分,大于P3的是不允許發(fā)送部分摘盆。

B的接收窗口大小為20翼雀。在接收窗口外面,到30號為止的數(shù)據(jù)均發(fā)送過確認(rèn)并交付主機(jī)使用孩擂,因此B不再保留(之前的數(shù)據(jù))狼渊。假設(shè)B收到了32和33的數(shù)據(jù),卻沒收到31的數(shù)據(jù)(并不保證按序到達(dá))类垦。因此B的發(fā)送的確認(rèn)號仍然是31狈邑,而不能是32或33。

現(xiàn)假定B收到序號為31的數(shù)據(jù)并把序號為31-33的數(shù)據(jù)交付給主機(jī)蚤认,并刪除這些數(shù)據(jù)米苹。接著把接收窗口向前移動(dòng)3個(gè)序號,同時(shí)給A發(fā)出確認(rèn)砰琢。其窗口值仍為20蘸嘶,但確認(rèn)號為34,表明B已經(jīng)接收到序號33為止的數(shù)據(jù)。而B收到的37陪汽、38和40的數(shù)據(jù)训唱,但沒按序到達(dá),只能先暫存在接收窗口中挚冤。A收到B的確認(rèn)后雪情,將發(fā)送窗口向前滑動(dòng)3個(gè)序號,但指針P2不動(dòng)你辣。A繼續(xù)發(fā)送完序號42-53的數(shù)據(jù)后巡通,指針P2向前與P3重合,發(fā)送窗內(nèi)的數(shù)據(jù)以發(fā)送完舍哄,但還沒收到確認(rèn)宴凉,因此必須停止發(fā)送。

緩存機(jī)制

在3.1節(jié)的圖中提到表悬,發(fā)送方的應(yīng)用進(jìn)程把字節(jié)流寫入TCP的發(fā)送緩存弥锄,接收方的應(yīng)用進(jìn)程從TCP的接受緩存中讀取字節(jié)流。下面進(jìn)一步談?wù)摯翱谂c緩存的關(guān)系。

發(fā)送緩存用來暫時(shí)存放:發(fā)送應(yīng)用程序傳送給發(fā)送方TCP準(zhǔn)備的數(shù)據(jù)籽暇,TCP已發(fā)送但尚未收到確認(rèn)的數(shù)據(jù)温治。發(fā)送窗口通常只是發(fā)送緩存的一部分,已被確認(rèn)的數(shù)據(jù)應(yīng)當(dāng)從發(fā)送緩存中刪除戒悠,因此發(fā)送緩存與發(fā)送窗口的后沿是重合的熬荆。發(fā)送應(yīng)用程序必須控制寫入緩存的速率,不能太快绸狐,否則發(fā)送緩存就會沒有存放數(shù)據(jù)的空間卤恳。

接收緩存用來暫時(shí)存放:按序到達(dá)的,但尚未被接收應(yīng)用程序讀取的數(shù)據(jù)寒矿;未按序到達(dá)的數(shù)據(jù)突琳。如果收到的分組檢測出有差錯(cuò),則要丟棄符相。如果接收應(yīng)用程序來不及讀取收到的數(shù)據(jù)拆融,接收緩存最終就會被填滿,使接收窗口減小到0啊终。反之冠息,接收應(yīng)用程序能夠及時(shí)從接收緩存中讀取收到數(shù)據(jù),接收窗口就會變大孕索,但最大也不能超過接收緩存的大小。


超時(shí)重傳機(jī)制

TCP每發(fā)送一個(gè)報(bào)文段躏碳,就對這個(gè)報(bào)文段設(shè)置一次計(jì)時(shí)器搞旭。只要達(dá)到計(jì)時(shí)器設(shè)置的重傳時(shí)間還沒有收到確認(rèn),就要重傳這個(gè)報(bào)文段菇绵。由于數(shù)據(jù)鏈路層和運(yùn)輸層的往返實(shí)驗(yàn)概率分布存在很大差異肄渗,因此有必要選擇合適的超時(shí)重傳時(shí)間。

TCP采用了一中自適應(yīng)算法來確定超時(shí)重傳時(shí)間咬最,它記錄一個(gè)報(bào)文段發(fā)出的時(shí)間翎嫡,以及收到相應(yīng)的確認(rèn)的時(shí)間。這兩個(gè)時(shí)間差就是報(bào)文段的往返時(shí)間RTT永乌。TCP保留了RTT的一個(gè)加權(quán)平均往返時(shí)間RTTs惑申,RTTs的計(jì)算方法如下,推薦的阿爾法值為1/8翅雏。

顯然超時(shí)重傳時(shí)間RTO應(yīng)略大于RTTs:

其中RTTd是TTT的偏差的加權(quán)平均值圈驼。

選擇確認(rèn)SACK
若收到的報(bào)文段無差錯(cuò),只是未按序號望几,中間還缺少一些序號的數(shù)據(jù)绩脆,采用選擇確認(rèn)的方法來傳送缺少的數(shù)據(jù),而不重傳已經(jīng)正確接收到的數(shù)據(jù)。

用一個(gè)例子來說明(Selctive ACK)工作原理靴迫。如圖所示惕味,接收放收到了前面的字節(jié)流不連續(xù)的兩個(gè)字節(jié)塊。如果這些字節(jié)的序號都在接收窗口內(nèi)玉锌,那么接收方就先收下這些數(shù)據(jù)名挥,但要把這些信息準(zhǔn)確的告訴發(fā)送放,使發(fā)送方不要在重復(fù)發(fā)送這些已經(jīng)收到的數(shù)據(jù)芬沉。

TCP首部沒有哪個(gè)字段能夠提供上述這些字節(jié)快的邊界信息躺同。如果要使用選擇確認(rèn),那么在建立TCP連接時(shí)丸逸,就要在TCP首部的選項(xiàng)上加上“允許SACK”的選項(xiàng)蹋艺。

3.5 TCP的流量控制與擁塞控制

流量控制
所謂的流量控制就是讓發(fā)送方的發(fā)送速率不要太快,讓接收方來得及接受黄刚。利用滑動(dòng)窗口機(jī)制可以很方便的在TCP連接上實(shí)現(xiàn)對發(fā)送方的流量控制捎谨。

擁塞控制
在某段時(shí)間,若對網(wǎng)絡(luò)中的某一資源的需求超過了該資源所能提供的可用部分憔维,網(wǎng)絡(luò)的性能就要變化涛救,這種情況叫做擁塞。網(wǎng)絡(luò)擁塞往往是由許多因素引起的业扒,簡單的提高節(jié)點(diǎn)處理機(jī)的速度或者擴(kuò)大結(jié)點(diǎn)緩存的存儲空間并不能解決擁塞問題检吆。問題的是指往往是整個(gè)系統(tǒng)的各個(gè)部分不匹配,只有各個(gè)部分平衡了程储,問題才會得到解決蹭沛。

擁塞控制和流量控制的差別

  • 所謂擁塞控制就是防止過多的數(shù)據(jù)注入到網(wǎng)絡(luò)中,這樣可以使網(wǎng)絡(luò)中的路由器或鏈路不致過載章鲤。擁塞控制所要做的都有一個(gè)前提摊灭,就是網(wǎng)絡(luò)能承受現(xiàn)有的網(wǎng)絡(luò)負(fù)荷。
  • 流量控制往往指的是點(diǎn)對點(diǎn)通信量的控制败徊,是個(gè)端到端的問題帚呼。流量控制所要做的就是控制發(fā)送端發(fā)送數(shù)據(jù)的速率,以便使接收端來得及接受皱蹦。

擁塞控制是很難設(shè)計(jì)的煤杀,因?yàn)樗且粋€(gè)動(dòng)態(tài)的問題,許多情況下沪哺,甚至正式擁塞控制機(jī)制本身成為引起網(wǎng)絡(luò)性能惡化甚至死鎖的原因怜珍。RFC定義了進(jìn)行擁塞控制的四種算法:慢開始、擁塞避免凤粗、快重傳和快恢復(fù)酥泛。

3.6 TCP連接的建立與終止

TCP連接的建立可以簡單的稱為三次握手今豆,而連接的中止則可以叫做四次握手

TCP的建立
  • 首先柔袁,客戶端向服務(wù)器申請打開某一個(gè)端口(用SYN段等于1的TCP報(bào)文)呆躲;
  • 然后,服務(wù)器端發(fā)回一個(gè)ACK報(bào)文通知客戶端請求報(bào)文收到捶索;
  • 客戶端收到確認(rèn)報(bào)文以后再次發(fā)出確認(rèn)報(bào)文插掂,確認(rèn)剛才服務(wù)器端發(fā)出的確認(rèn)報(bào)文。

至此腥例,連接的建立完成辅甥。這就叫做三次握手。如果打算讓雙方都做好準(zhǔn)備的話燎竖,一定要發(fā)送三次報(bào)文璃弄,而且只需要三次報(bào)文就可以了。如果再加上TCP的超時(shí)重傳機(jī)制构回,那么TCP就完全可以保證一個(gè)數(shù)據(jù)包被送到目的地夏块。

TCP的終止

建立一個(gè)連接需要三次握手,而終止一個(gè)連接要經(jīng)過4次握手纤掸,這是由TCP的半關(guān)閉(half close)造成的脐供。既然一個(gè) TCP連接是全雙工(即數(shù)據(jù)在兩個(gè)方向上能同時(shí)傳遞),因此每個(gè)方向必須單獨(dú)地進(jìn)行關(guān)閉借跪。這原則就是當(dāng)一方完成它的數(shù)據(jù)發(fā)送任務(wù)后就能發(fā)送一個(gè) FIN來終止這個(gè)方向連接政己。當(dāng)一端收到一個(gè) FIN,它必須通知應(yīng)用層另一端幾經(jīng)終止了那個(gè)方向的數(shù)據(jù)傳送掏愁。

客戶機(jī)給服務(wù)器一個(gè)FIN為1的TCP報(bào)文歇由,然后服務(wù)器返回給客戶端一個(gè)確認(rèn)ACK報(bào)文,并且發(fā)送一個(gè)FIN報(bào)文托猩,當(dāng)客戶機(jī)回復(fù)ACK報(bào)文后(四次握手),連接就結(jié)束了辽慕。

TCP的狀態(tài)變遷圖

TCP常見狀態(tài)

TCP/IP詳解學(xué)習(xí)筆記(10)-TCP連接的建立與中止

3.7 TCP計(jì)時(shí)器

為更平穩(wěn)地執(zhí)行操作京腥,TCP使用至少四種計(jì)時(shí)器:重傳、堅(jiān)持溅蛉、惫耍活和時(shí)間等待計(jì)時(shí)器

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市船侧,隨后出現(xiàn)的幾起案子欠气,更是在濱河造成了極大的恐慌,老刑警劉巖镜撩,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件预柒,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)宜鸯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門憔古,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人淋袖,你說我怎么就攤上這事鸿市。” “怎么了即碗?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵焰情,是天一觀的道長。 經(jīng)常有香客問我剥懒,道長内舟,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任蕊肥,我火速辦了婚禮谒获,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘壁却。我一直安慰自己批狱,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布展东。 她就那樣靜靜地躺著赔硫,像睡著了一般。 火紅的嫁衣襯著肌膚如雪盐肃。 梳的紋絲不亂的頭發(fā)上爪膊,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天,我揣著相機(jī)與錄音砸王,去河邊找鬼推盛。 笑死,一個(gè)胖子當(dāng)著我的面吹牛谦铃,可吹牛的內(nèi)容都是我干的耘成。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼驹闰,長吁一口氣:“原來是場噩夢啊……” “哼瘪菌!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起嘹朗,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤师妙,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后屹培,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體默穴,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡怔檩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了壁顶。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片珠洗。...
    茶點(diǎn)故事閱讀 39,690評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖若专,靈堂內(nèi)的尸體忽然破棺而出许蓖,到底是詐尸還是另有隱情,我是刑警寧澤调衰,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布膊爪,位于F島的核電站,受9級特大地震影響嚎莉,放射性物質(zhì)發(fā)生泄漏米酬。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一趋箩、第九天 我趴在偏房一處隱蔽的房頂上張望赃额。 院中可真熱鬧,春花似錦叫确、人聲如沸跳芳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽飞盆。三九已至,卻和暖如春次乓,著一層夾襖步出監(jiān)牢的瞬間皆辽,已是汗流浹背蝙叛。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留屯仗,地道東北人摄杂。 一個(gè)月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓坛芽,卻偏偏與公主長得像掉缺,于是被迫代替她去往敵國和親兴泥。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容

  • 個(gè)人認(rèn)為逃默,Goodboy1881先生的TCP /IP 協(xié)議詳解學(xué)習(xí)博客系列博客是一部非常精彩的學(xué)習(xí)筆記鹃愤,這雖然只是...
    貳零壹柒_fc10閱讀 5,054評論 0 8
  • 1.這篇文章不是本人原創(chuàng)的簇搅,只是個(gè)人為了對這部分知識做一個(gè)整理和系統(tǒng)的輸出而編輯成的完域,在此鄭重地向本文所引用文章的...
    SOMCENT閱讀 13,063評論 6 174
  • 11.1 引言 UDP是一個(gè)簡單的面向數(shù)據(jù)報(bào)的運(yùn)輸層協(xié)議:進(jìn)程的每個(gè)輸出操作都正好產(chǎn)生一個(gè)UDP數(shù)據(jù)報(bào),并組裝成一...
    張芳濤閱讀 2,808評論 1 6
  • 計(jì)算機(jī)網(wǎng)絡(luò)七層模型中瘩将,傳輸層有兩個(gè)重要的協(xié)議:(1)用戶數(shù)據(jù)報(bào)協(xié)議UDP (User Datagram Proto...
    Q南南南Q閱讀 1,714評論 0 3
  • 18.1 引言 TCP是一個(gè)面向連接的協(xié)議吟税。無論哪一方向另一方發(fā)送數(shù)據(jù)之前凹耙,都必須先在雙方之間建立一條連接。本章將...
    張芳濤閱讀 3,371評論 0 13