售前電話
135-3656-7657
售前電話 : 135-3656-7657
由于互聯(lián)網(wǎng)各個組成網(wǎng)絡(luò)的特性有很大差異,要在網(wǎng)絡(luò)層提供面向連接服務(wù)就需要很復(fù)雜的互通能力和信令協(xié)議,為了簡化網(wǎng)絡(luò)互聯(lián)實現(xiàn),Internet在網(wǎng)絡(luò)層只提供簡單的無連接服務(wù),而將保證可靠傳送的任務(wù)交給了運輸層的TCP。TCP的設(shè)計目的就是動態(tài)適配互聯(lián)網(wǎng)絡(luò)的變化特性,在不可靠的網(wǎng)絡(luò)上提供一條可靠的端到端的傳輸通道。這條通道就是TCP連接。
TCP連接是點到點的雙向連接,對應(yīng)源主機和目的主機應(yīng)用進程之間的邏輯聯(lián)系。它不支持多播和廣播。任一方發(fā)起建立連接后,雙方都可以在此連接上向?qū)Χ税l(fā)送信息。信息發(fā)送為雙工方式,也就是說,雙向數(shù)據(jù)流發(fā)送互相獨立,在發(fā)送數(shù)據(jù)的報文中也可捎帶傳送控制信息,以提高帶寬利用率。
作為一個點到點連接,TCP連接應(yīng)該由二端的端點地址對來標(biāo)識:{端點1地址,端點2地址}用分層協(xié)議結(jié)構(gòu)中的服務(wù)接人點(SAP)概念來描述,端點地址應(yīng)為:(主機地址,NSAP,TSAP) 其中,主機地址就是IP地址,NSAP為網(wǎng)絡(luò)層SAP,也就是TCP協(xié)議,已在IP數(shù)據(jù)報頭部標(biāo)明,TSAP指明是哪一個應(yīng)用進程,在TCP中將其稱為端口(Port),因此,一個TCP連接的標(biāo)識應(yīng)為:(IP地址1,端口l),(IP地址2,端口2),每個端口可用一個整數(shù)表示,稱為端口號,TCP協(xié)議規(guī)定端口號可占16比特。原則上,一個應(yīng)用進程和端口號沒有固定的對應(yīng)關(guān)系。當(dāng)一個進程創(chuàng)建后需要和遠端建立聯(lián)系或準(zhǔn)備接受遠端的聯(lián)系請求時,該進程可通過系統(tǒng)調(diào)用請求操作系統(tǒng)為其隨機分配一個端口號,其后即用該端口號代表該進程。當(dāng)通信關(guān)系結(jié)束時,就將該端口號歸還系統(tǒng)。這稱為端口動態(tài)綁定技術(shù)。但隨之而來的一個問題就是源主機如何才能獲知目的進程的端口號。
為了解決這一問題,ARPANET專門提出了一個初始連接協(xié)議??紤]到計算機網(wǎng)絡(luò)應(yīng)用采用的基本上都是客戶機/服務(wù)器工作模式,之所以要建立TCP連接一般是客戶機需要從服務(wù)器獲得某項信息,進行某項運算或共享某項資源,因此TCP連接建立也采用客戶機/服務(wù)器模式,發(fā)起連接請求的主機叫客戶,接受連接請求的則是服務(wù)器。初始連接協(xié)議要求所有服務(wù)器主機裝備一個后臺進程,叫進程服務(wù)器。該進程隨系統(tǒng)一起啟動,常駐內(nèi)存,并和一個固定的端口號綁定(靜態(tài)綁定),該端口號為互聯(lián)網(wǎng)中的公開號碼,稱為“公認(rèn)端口”(WE1l-knownport)。客戶按服務(wù)器的IP地址和此公認(rèn)端口發(fā)出連接請求,由進程服務(wù)器負(fù)責(zé)建立一條臨時連接。然后,客戶通過此臨時連接向進程服務(wù)器發(fā)送一個報文,告之它希望得到的服務(wù),進程服務(wù)器負(fù)責(zé)創(chuàng)建一個運行指定服務(wù)程序的進程,并給它分配一個端口號。最后,進程服務(wù)器向客戶告之該端口號,并釋放臨時連接。其后,客戶即可通過該端口號和指定服務(wù)程序建立連接,獲得所需要的服務(wù)。
初始連接協(xié)議對于那些可以按需隨時創(chuàng)建的服務(wù)進程是有效的,但是有許多情況,服務(wù)進程必須獨立于進程服務(wù)器存在,例如文件服務(wù)器必須在專門的硬件上運行,不能在某客戶需要用到時才創(chuàng)建。為此,又提出了一種名字服務(wù)器方案。該服務(wù)器獨立設(shè)置,也與一個公認(rèn)端口綁定。每當(dāng)一個新的服務(wù)進程創(chuàng)建時,必須向名字服務(wù)器登記,告之其端口號??蛻粢驮摲?wù)進程建立聯(lián)系時就向名字服務(wù)器查詢,獲得該進程的端點地址。名字服務(wù)器的作用猶如電話網(wǎng)中的查號臺,因此也稱為目錄服務(wù)器。
TCP協(xié)議結(jié)合靜態(tài)綁定和動態(tài)綁定技術(shù),將端口分為兩類,一類為公認(rèn)端口,固定分配給一些標(biāo)準(zhǔn)的服務(wù)進程,另一類為自由端口,可由操作系統(tǒng)自行分配??蛻暨M程要與遠程服務(wù)進程通信之前,先申請一個自由端口,然后根據(jù)公認(rèn)端口和遠程服務(wù)器建立聯(lián)系。不常用的服務(wù)進程可通過名字服務(wù)器建立聯(lián)系。
TCP規(guī)定小于256的端口號為公認(rèn)端口號,例如,F(xiàn)IP為21,TE1NEr為23等。公認(rèn)端口分配表可見RFC1700。
從協(xié)議角度說,端口是運輸層的服務(wù)接人點;從軟件結(jié)構(gòu)來說,端口對應(yīng)為應(yīng)用程序和通信程序之間的接口,包括一定容量的數(shù)據(jù)緩沖區(qū)和數(shù)據(jù)結(jié)構(gòu),端口操作類似于一般的1/0操作,可以用讀寫原語對其詢問。需要指出的是,TCP/IP并沒有對應(yīng)用程序接口標(biāo)準(zhǔn)化。實際中,應(yīng)用最為廣泛的是UNIX關(guān)于TCP的插口(SOCKEf)原語。它包括8個原語,如表2.3所示。
服務(wù)器側(cè)啟動后,先調(diào)用SOCKEf原語,請求在TCP實體中分配緩沖區(qū)空間,執(zhí)行后返回一個文件描述符,其方式和open調(diào)用相同;然后再用BIND原語綁定端口號,多為公認(rèn)端口號;接著調(diào)用USTEN,分配隊列,以便處理數(shù)個客戶同時請求建立連接的情況;最后調(diào)用ACCF.Pf,使進程掛起,等待連接請求到來。當(dāng)客戶發(fā)來連接請求報文時,TCP實體創(chuàng)建一個和原先插口特性相同的新的插口,并返回一個文件描述符,服務(wù)器創(chuàng)建一個進程或線程來處理該新插口上的連接,然后退回等待原接口上的下一個連接。