網(wǎng)絡(luò)基礎(chǔ)知識
TCP/IP四層模型和OSI七層模型的概念
TCP(Transmission Control Protocol 傳輸控制協(xié)議)是一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議,由IETF的RFC 793定義。在簡化的計算機網(wǎng)絡(luò)OSI模型中,它完成第四層傳輸層所指定的功能,用戶數(shù)據(jù)報協(xié)議(UDP)是同一層內(nèi)[1]
另一個重要的傳輸協(xié)議。在因特網(wǎng)協(xié)議族(Internet protocol suite)中,TCP層是位于IP層之上,應(yīng)用層之下的中間層。不同主機的應(yīng)用層之間經(jīng)常需要可靠的、像管道一樣的連接,但是IP層不提供這樣的流機制,而是提供不可靠的包交換
TCP/IP協(xié)議棧主要分為四層:應(yīng)用層、傳輸層、網(wǎng)絡(luò)層、數(shù)據(jù)鏈路層,每層都有相應(yīng)的協(xié)議,如下圖

TCP/IP是一組協(xié)議的代名詞,它還包括許多協(xié)議,組成了TCP/IP協(xié)議簇。TCP/IP協(xié)議簇分為四層,IP位于協(xié)議簇的第二層(對應(yīng)OSI的第三層),TCP位于協(xié)議簇的第三層(對應(yīng)OSI的第四層)。
TCP/IP通訊協(xié)議采用了4層的層級結(jié)構(gòu),每一層都呼叫它的下一層所提供的網(wǎng)絡(luò)來完成自己的需求。這4層分別為:
應(yīng)用層:應(yīng)用程序間溝通的層,如簡單電子郵件傳輸(SMTP)、文件傳輸協(xié)議(FTP)、網(wǎng)絡(luò)遠程訪問協(xié)議(Telnet)等。
傳輸層:在此層中,它提供了節(jié)點間的數(shù)據(jù)傳送服務(wù),如傳輸控制協(xié)議(TCP)、用戶數(shù)據(jù)報協(xié)議(UDP)等,TCP和UDP給數(shù)據(jù)包加入傳輸數(shù)據(jù)并把它傳輸?shù)较乱粚又?,這一層負責(zé)傳送數(shù)據(jù),并且確定數(shù)據(jù)已被送達并接收。
互連網(wǎng)絡(luò)層:負責(zé)提供基本的數(shù)據(jù)封包傳送功能,讓每一塊數(shù)據(jù)包都能夠到達目的主機(但不檢查是否被正確接收),如網(wǎng)際協(xié)議(IP)。
網(wǎng)絡(luò)接口層:對實際的網(wǎng)絡(luò)媒體的管理,定義如何使用實際網(wǎng)絡(luò)(如Ethernet、Serial Line等)來傳送數(shù)據(jù)。
OSI 七層模型通過七個層次化的結(jié)構(gòu)模型使不同的系統(tǒng)不同的網(wǎng)絡(luò)之間實現(xiàn)可靠的通訊,因此其最主要的功能就是幫助不同類型的主機實現(xiàn)數(shù)據(jù)傳輸 。
完成中繼功能的節(jié)點通常稱為中繼系統(tǒng)。在OSI七層模型中,處于不同層的中繼系統(tǒng)具有不同的名稱。

我們運用最多的在 傳輸層 和 應(yīng)用層
UDP和TCP有什么區(qū)別
TCP---傳輸控制協(xié)議,提供的是面向連接、可靠的字節(jié)流服務(wù)。當(dāng)客戶和服務(wù)器彼此交換數(shù)據(jù)前,必須先在雙方之間建立一個TCP連接,之后才能傳輸數(shù)據(jù)。TCP提供超時重發(fā),丟棄重復(fù)數(shù)據(jù),檢驗數(shù)據(jù),流量控制等功能,保證數(shù)據(jù)能從一端傳到另一端。UDP---用戶數(shù)據(jù)報協(xié)議,是一個簡單的面向數(shù)據(jù)報的運輸層協(xié)議。UDP不提供可靠性,它只是把應(yīng)用程序傳給IP層的數(shù)據(jù)報發(fā)送出去,但是并不能保證它們能到達目的地。由于UDP在傳輸數(shù)據(jù)報前不用在客戶和服務(wù)器之間建立一個連接,且沒有超時重發(fā)等機制,故而傳輸速度很快
現(xiàn)在Internet上流行的協(xié)議是TCP/IP協(xié)議,該協(xié)議中對低于1024的端口都有確切的定義,他們對應(yīng)著Internet上一些常見的服務(wù)。這些常見的服務(wù)可以分為使用TCP端口(面向連接)和使用UDP端口(面向無連接)兩種。
說到TCP和UDP,首先要明白“連接”和“無連接”的含義,他們的關(guān)系可以用一個形象地比喻來說明,就是打電話和寫信。兩個人如果要通話,首先要建立連接——即打電話時的撥號,等待響應(yīng)后——即接聽電話后,才能相互傳遞信息,最后還要斷開連接——即掛電話。寫信就比較簡單了,填寫好收信人的地址后將信投入郵筒,收信人就可以收到了。從這個分析可以看出,建立連接可以在需要痛心地雙方建立一個傳遞信息的通道,在發(fā)送方發(fā)送請求連接信息接收方響應(yīng)后,由于是在接受方響應(yīng)后才開始傳遞信息,而且是在一個通道中傳送,因此接受方能比較完整地收到發(fā)送方發(fā)出的信息,即信息傳遞的可靠性比較高。但也正因為需要建立連接,使資源開銷加大(在建立連接前必須等待接受方響應(yīng),傳輸信息過程中必須確認信息是否傳到及斷開連接時發(fā)出相應(yīng)的信號等),獨占一個通道,在斷開連接錢不能建立另一個連接,即兩人在通話過程中第三方不能打入電話。而無連接是一開始就發(fā)送信息(嚴格說來,這是沒有開始、結(jié)束的),只是一次性的傳遞,是先不需要接受方的響應(yīng),因而在一定程度上也無法保證信息傳遞的可靠性了,就像寫信一樣,我們只是將信寄出去,卻不能保證收信人一定可以收到。
TCP是面向連接的,有比較高的可靠性,一些要求比較高的服務(wù)一般使用這個協(xié)議,如FTP、Telnet、SMTP、HTTP、POP3等,而UDP是面向無連接的,使用這個協(xié)議的常見服務(wù)有DNS、SNMP、QQ等。對于QQ必須另外說明一下,QQ2003以前是只使用UDP協(xié)議的,其服務(wù)器使用8000端口,偵聽是否有信息傳來,客戶端使用4000端口,向外發(fā)送信息(這也就不難理解在一般的顯IP的QQ版本中顯示好友的IP地址信息中端口常為4000或其后續(xù)端口的原因了),即QQ程序既接受服務(wù)又提供服務(wù),在以后的QQ版本中也支持使用TCP協(xié)議了。
實時交互(長鏈接)
nodejs 模塊 Net提供了一些用于創(chuàng)建服務(wù)器/客戶端的方法