一、TCP/IP分層模型
TCP/IP模型分為5層:應(yīng)用層、傳輸層、網(wǎng)絡(luò)層、數(shù)據(jù)鏈路層以及 物理層。分層就類似接口的定義,定義了每個(gè)層的行為職責(zé)。這樣的分層抽象提供了更多實(shí)現(xiàn)的自由。

二、分層結(jié)構(gòu)
1、應(yīng)用層
應(yīng)用層是我們經(jīng)常接觸使用的部分,比如常用的http協(xié)議、ftp協(xié)議(文件傳輸協(xié)議)、snmp(網(wǎng)絡(luò)管理協(xié)議)、telnet (遠(yuǎn)程登錄協(xié)議 )、smtp(簡(jiǎn)單郵件傳輸協(xié)議)、dns(域名解析),這次主要是面向用戶的交互的。這里的應(yīng)用層集成了osi分層模型中 的應(yīng)用、會(huì)話、表示層三層的功能。
2、傳輸層
傳輸層的作用就是將應(yīng)用層的數(shù)據(jù)進(jìn)行傳輸轉(zhuǎn)運(yùn)。比如我們常說的tcp(可靠的傳輸控制協(xié)議)、udp(用戶數(shù)據(jù)報(bào)協(xié)議)。傳輸單位為報(bào)文段。
tcp(Transmission Control Protocol)
? ? 面向連接(先要和對(duì)方確定連接、傳輸結(jié)束需要斷開連接,類似打電話)、復(fù)雜可靠的、有很好的重傳和查錯(cuò)機(jī)制。一般用與高速、可靠的通信服務(wù)
udp(user datagram protocol)
? ? 面向無連接(無需確認(rèn)對(duì)方是否存在,類似寄包裹)、簡(jiǎn)單高效、沒有重傳機(jī)制。一般用于即時(shí)通訊、廣播通信等
TCP與UDP區(qū)別總結(jié):
TCP面向連接;UDP是無連接的,即發(fā)送數(shù)據(jù)之前不需要建立連接;
TCP提供可靠的服務(wù)。即通過TCP連接傳送的數(shù)據(jù),無差錯(cuò),不丟失,不重復(fù),且按序到達(dá);UDP則不保證可靠交付;
TCP協(xié)議在傳送數(shù)據(jù)段的時(shí)候要給段標(biāo)號(hào);UDP協(xié)議不會(huì);
TCP面向字節(jié)流,把數(shù)據(jù)看成一連串無結(jié)構(gòu)的字節(jié)流;UDP是面向報(bào)文的,且UDP沒有擁塞控制,因此網(wǎng)絡(luò)出現(xiàn)擁塞不會(huì)使源主機(jī)的發(fā)送速率降低(對(duì)實(shí)時(shí)應(yīng)用很有用,如IP電話,實(shí)時(shí)視頻會(huì)議等)
每一條TCP連接只能是點(diǎn)到點(diǎn)的;UDP支持一對(duì)一,一對(duì)多,多對(duì)一和多對(duì)多的交互通信;
TCP的邏輯通信信道是全雙工的可靠信道,UDP則是不可靠信道;
3、網(wǎng)絡(luò)層
網(wǎng)絡(luò)層用來處理網(wǎng)絡(luò)中流動(dòng)的數(shù)據(jù)包,數(shù)據(jù)包為最小的傳遞單位,比如我們常用的ip協(xié)議、icmp協(xié)議、arp協(xié)議(通過分析ip地址得出物理mac地址)。
4、數(shù)據(jù)鏈路層
數(shù)據(jù)鏈路層一般用來處理連接硬件的部分,包括控制網(wǎng)卡、硬件相關(guān)的設(shè)備驅(qū)動(dòng)等。傳輸單位數(shù)據(jù)幀。
5、物理層
物理層一般為負(fù)責(zé)數(shù)據(jù)傳輸?shù)挠布?,比如我們了解的雙絞線電纜、無線、光纖等。比特流光電等信號(hào)發(fā)送接收數(shù)據(jù)。
三、數(shù)據(jù)傳遞
數(shù)據(jù)傳遞
首先應(yīng)用層將數(shù)據(jù)報(bào)文按照協(xié)議封裝格式壓縮然后傳遞給傳輸層、傳輸層通過協(xié)議將數(shù)據(jù)報(bào)封裝為數(shù)據(jù)報(bào)段、然后傳遞給網(wǎng)絡(luò)層,網(wǎng)絡(luò)層將數(shù)據(jù)報(bào)段封裝為數(shù)據(jù)包,并傳遞給數(shù)據(jù)鏈路層,數(shù)據(jù)鏈路層收到數(shù)據(jù)包,封裝為數(shù)據(jù)幀,然后又將數(shù)據(jù)幀轉(zhuǎn)比特流傳遞給物理層,物理層將比特流通過光或電信號(hào)發(fā)送給目標(biāo)。

詳細(xì)的數(shù)據(jù)傳遞

數(shù)據(jù)交互
數(shù)據(jù)交互傳遞的過程

http報(bào)文通過tcp發(fā)送的舉例

應(yīng)用交互舉例

TCP(Transmission Control Protocol) 傳輸控制協(xié)議。TCP是主機(jī)對(duì)主機(jī)層的傳輸控制協(xié)議,提供可靠的連接服務(wù),采用三次握手確認(rèn)建立一個(gè)連接。位碼即tcp標(biāo)志位,有6種 標(biāo)示:SYN(synchronous建立聯(lián)機(jī)) ACK(acknowledgement 確認(rèn)) PSH(push傳送) FIN(finish結(jié)束) RST(reset重置) URG(urgent緊急)Sequence number(順序號(hào)碼) Acknowledge number(確認(rèn)號(hào)碼)。
手機(jī)能夠使用聯(lián)網(wǎng)功能是因?yàn)槭謾C(jī)底層實(shí)現(xiàn)了TCP/IP協(xié)議,可以使手機(jī)終端通過無線網(wǎng)絡(luò)建立TCP連接。TCP協(xié)議可以對(duì)上層網(wǎng)絡(luò)提供接口,使上層網(wǎng)絡(luò)數(shù)據(jù)的傳輸建立在“無差別”的網(wǎng)絡(luò)之上。建立起一個(gè)TCP連接需要經(jīng)過“三次握手”:
第一次握手:客戶端發(fā)送syn包(syn=j)到服務(wù)器,并進(jìn)入SYN_SEND狀態(tài),等待服務(wù)器確認(rèn);
第二次握手:服務(wù)器收到syn包,必須確認(rèn)客戶的SYN(ack=j+1),同時(shí)自己也發(fā)送一個(gè)SYN包(syn=k),即SYN+ACK包,此時(shí)服務(wù)器進(jìn)入SYN_RECV狀態(tài);
第三次握手:客戶端收到服務(wù)器的SYN+ACK包,向服務(wù)器發(fā)送確認(rèn)包ACK(ack=k+1),此包發(fā)送完畢,客戶端和服務(wù)器進(jìn)入ESTABLISHED狀態(tài),完成三次握手。握手完成后,兩臺(tái)主機(jī)開始傳輸數(shù)據(jù)了。

握手過程中傳送的包里不包含數(shù)據(jù),三次握手完畢后,客戶端與服務(wù)器才正式開始傳送數(shù)據(jù)。理想狀態(tài)下,TCP連接一旦建立,在通信雙方中的任何一方主動(dòng)關(guān)閉連接之前,TCP 連接都將被一直保持下去。斷開連接時(shí)服務(wù)器和客戶端均可以主動(dòng)發(fā)起斷開TCP連接的請(qǐng)求,斷開過程需要經(jīng)過“四次握手”(過程就不細(xì)寫了,就是服務(wù)器和客戶端交互,最終確定斷開)。
實(shí)例一:
IP 192.168.1.116.3337 > 192.168.1.123.7788: S 3626544836:3626544836
IP 192.168.1.123.7788 > 192.168.1.116.3337: S 1739326486:1739326486 ack 3626544837
IP 192.168.1.116.3337 > 192.168.1.123.7788: ack 1739326487,ack 1
第一次握手:192.168.1.116發(fā)送位碼syn=1,隨機(jī)產(chǎn)生seq number=3626544836的數(shù)據(jù)包到192.168.1.123,192.168.1.123由SYN=1知道192.168.1.116要求建立聯(lián)機(jī);
第二次握手:192.168.1.123收到請(qǐng)求后要確認(rèn)聯(lián)機(jī)信息,向192.168.1.116發(fā)送ack number=3626544837,syn=1,ack=1,隨機(jī)產(chǎn)生seq=1739326486的包;
第三次握手:192.168.1.116收到后檢查ack number是否正確,即第一次發(fā)送的seq number+1,以及位碼ack是否為1,若正確,192.168.1.116會(huì)再發(fā)送ack number=1739326487,ack=1,192.168.1.123收到后確認(rèn)seq=seq+1,ack=1則連接建立成功。
實(shí)例二:
TCP的作用是流量控制,主要是控制數(shù)據(jù)流的傳輸。下面以瀏覽網(wǎng)頁(yè)為例,根據(jù)自身理解來解釋一下這個(gè)過程。(注:第二個(gè)ack屬于代碼段ack位)
pc瀏覽服務(wù)器網(wǎng)頁(yè)此過程不包括域名查詢,只描述TCP與http數(shù)據(jù)流的變化。
pc與http服務(wù)器進(jìn)行三次握手來建立連接。
1.pc:seq=0 ack=0 syn=1 ack=0 發(fā)送給服務(wù)器建立同步請(qǐng)求。
2.server: seq=0 ack=1 syn=1 ack=1 發(fā)送給客戶端建立同步響應(yīng).
3.pc:seq=1 ack=1 syn=0 ack=1 發(fā)送給服務(wù)器,三次握手完成建立同步信息成功.
4.pc產(chǎn)生http數(shù)據(jù)消息,向服務(wù)器發(fā)送get請(qǐng)求.
5.服務(wù)器收到請(qǐng)求并發(fā)送TCP確認(rèn),然后發(fā)送http數(shù)據(jù)信息給客戶端的瀏覽器.
6.客戶端收到服務(wù)器的http信息,然后發(fā)送TCP確認(rèn)信息給服務(wù)器.
7.客戶端發(fā)送FIN+ACK給服務(wù)器,要求結(jié)束數(shù)據(jù)傳輸.
8.服務(wù)器發(fā)送TCP確認(rèn)消息用于確認(rèn)pc的TCP的FIN消息
9.服務(wù)器向客戶端發(fā)送FIN+ACK消息用于結(jié)束TCP會(huì)話.
10.客戶端發(fā)送確認(rèn)信息給服務(wù)器,整個(gè)會(huì)話結(jié)束.
TCP四次揮手:
在網(wǎng)絡(luò)數(shù)據(jù)傳輸中,傳輸層協(xié)議斷開連接的過程我們稱為四次揮手
第一次,A端像B端發(fā)送FIN結(jié)束報(bào)文段,準(zhǔn)備關(guān)閉連接
第二次,B端確認(rèn)A端的FIN,表示自己已經(jīng)收到對(duì)方關(guān)閉連接的請(qǐng)求
中間這段時(shí)間,A端停止向B端發(fā)送數(shù)據(jù),但是B端可以向A端發(fā)送數(shù)據(jù),要將自己未處理完任務(wù)處理完
第三次,B端向A端發(fā)送FIN結(jié)束報(bào)文段,準(zhǔn)備關(guān)閉連接
第四次,A端確認(rèn)B端的FIN,進(jìn)入TIME_WAIT狀態(tài),此時(shí)A端進(jìn)程已經(jīng)退出,但是連接還在
當(dāng)B端收到A端的ACK之后,先斷開連接
當(dāng)A端等待2 MSL之后,確認(rèn)的B端接收到ACK后,再斷開連接
發(fā)起斷開連接請(qǐng)求的一端最后要進(jìn)入有一個(gè)TIME_WAIT狀態(tài)
發(fā)起連接請(qǐng)求的可以是客戶端也可以是服務(wù)器端
2、HTTP連接
HTTP協(xié)議即超文本傳送協(xié)議(Hypertext Transfer Protocol ),是Web聯(lián)網(wǎng)的基礎(chǔ),也是手機(jī)聯(lián)網(wǎng)常用的協(xié)議之一,HTTP協(xié)議是建立在TCP協(xié)議之上的一種應(yīng)用。
HTTP連接最顯著的特點(diǎn)是客戶端發(fā)送的每次請(qǐng)求都需要服務(wù)器回送響應(yīng),在請(qǐng)求結(jié)束后,會(huì)主動(dòng)釋放連接。從建立連接到關(guān)閉連接的過程稱為“一次連接”。
1)在HTTP 1.0中,客戶端的每次請(qǐng)求都要求建立一次單獨(dú)的連接,在處理完本次請(qǐng)求后,就自動(dòng)釋放連接。
2)在HTTP 1.1中則可以在一次連接中處理多個(gè)請(qǐng)求,并且多個(gè)請(qǐng)求可以重疊進(jìn)行,不需要等待一個(gè)請(qǐng)求結(jié)束后再發(fā)送下一個(gè)請(qǐng)求。
由于HTTP在每次請(qǐng)求結(jié)束后都會(huì)主動(dòng)釋放連接,因此HTTP連接是一種“短連接”,要保持客戶端程序的在線狀態(tài),需要不斷地向服務(wù)器發(fā)起連接請(qǐng)求。通常的做法是即時(shí)不需要獲得任何數(shù)據(jù),客戶端也保持每隔一段固定的時(shí)間向服務(wù)器發(fā)送一次“保持連接”的請(qǐng)求,服務(wù)器在收到該請(qǐng)求后對(duì)客戶端進(jìn)行回復(fù),表明知道 客戶端“在線”。若服務(wù)器長(zhǎng)時(shí)間無法收到客戶端的請(qǐng)求,則認(rèn)為客戶端“下線”,若客戶端長(zhǎng)時(shí)間無法收到服務(wù)器的回復(fù),則認(rèn)為網(wǎng)絡(luò)已經(jīng)斷開。
3、SOCKET原理
3.1 套接字(socket)概念
套接字(socket)是通信的基石,是支持TCP/IP協(xié)議的網(wǎng)絡(luò)通信的基本操作單元。它是網(wǎng)絡(luò)通信過程中端點(diǎn)的抽象表示,包含進(jìn)行網(wǎng)絡(luò)通信必須的五種信息:連接使用的協(xié)議,本地主機(jī)的IP地址,本地進(jìn)程的協(xié)議端口,遠(yuǎn)地主機(jī)的IP地址,遠(yuǎn)地進(jìn)程的協(xié)議口。
應(yīng)用層通過傳輸層進(jìn)行數(shù)據(jù)通信時(shí),TCP會(huì)遇到同時(shí)為多個(gè)應(yīng)用程序進(jìn)程提供并發(fā)服務(wù)的問題。多個(gè)TCP連接或多個(gè)應(yīng)用程序進(jìn)程可能需要通過同一個(gè) TCP協(xié)議端口傳輸數(shù)據(jù)。為了區(qū)別不同的應(yīng)用程序進(jìn)程和連接,許多計(jì)算機(jī)操作系統(tǒng)為應(yīng)用程序與TCP/IP協(xié)議交互提供了套接字(Socket)接口。應(yīng)用層可以和傳輸層通過Socket接口,區(qū)分來自不同應(yīng)用程序進(jìn)程或網(wǎng)絡(luò)連接的通信,實(shí)現(xiàn)數(shù)據(jù)傳輸?shù)牟l(fā)服務(wù)。
3.2 建立socket連接
建立Socket連接至少需要一對(duì)套接字,其中一個(gè)運(yùn)行于客戶端,稱為ClientSocket ,另一個(gè)運(yùn)行于服務(wù)器端,稱為ServerSocket 。
套接字之間的連接過程分為三個(gè)步驟:服務(wù)器監(jiān)聽,客戶端請(qǐng)求,連接確認(rèn)。
服務(wù)器監(jiān)聽:服務(wù)器端套接字并不定位具體的客戶端套接字,而是處于等待連接的狀態(tài),實(shí)時(shí)監(jiān)控網(wǎng)絡(luò)狀態(tài),等待客戶端的連接請(qǐng)求。
客戶端請(qǐng)求:指客戶端的套接字提出連接請(qǐng)求,要連接的目標(biāo)是服務(wù)器端的套接字。為此,客戶端的套接字必須首先描述它要連接的服務(wù)器的套接字,指出服務(wù)器端套接字的地址和端口號(hào),然后就向服務(wù)器端套接字提出連接請(qǐng)求。
連接確認(rèn):當(dāng)服務(wù)器端套接字監(jiān)聽到或者說接收到客戶端套接字的連接請(qǐng)求時(shí),就響應(yīng)客戶端套接字的請(qǐng)求,建立一個(gè)新的線程,把服務(wù)器端套接字的描述發(fā) 給客戶端,一旦客戶端確認(rèn)了此描述,雙方就正式建立連接。而服務(wù)器端套接字繼續(xù)處于監(jiān)聽狀態(tài),繼續(xù)接收其他客戶端套接字的連接請(qǐng)求。
4、SOCKET連接與TCP連接
創(chuàng)建Socket連接時(shí),可以指定使用的傳輸層協(xié)議,Socket可以支持不同的傳輸層協(xié)議(TCP或UDP),當(dāng)使用TCP協(xié)議進(jìn)行連接時(shí),該Socket連接就是一個(gè)TCP連接。
5、Socket連接與HTTP連接
由于通常情況下Socket連接就是TCP連接,因此Socket連接一旦建立,通信雙方即可開始相互發(fā)送數(shù)據(jù)內(nèi)容,直到雙方連接斷開。但在實(shí)際網(wǎng)絡(luò)應(yīng)用中,客戶端到服務(wù)器之間的通信往往需要穿越多個(gè)中間節(jié)點(diǎn),例如路由器、網(wǎng)關(guān)、防火墻等,大部分防火墻默認(rèn)會(huì)關(guān)閉長(zhǎng)時(shí)間處于非活躍狀態(tài)的連接而導(dǎo)致 Socket 連接斷連,因此需要通過輪詢告訴網(wǎng)絡(luò),該連接處于活躍狀態(tài)。而HTTP連接使用的是“請(qǐng)求—響應(yīng)”的方式,不僅在請(qǐng)求時(shí)需要先建立連接,而且需要客戶端向服務(wù)器發(fā)出請(qǐng)求后,服務(wù)器端才能回復(fù)數(shù)據(jù)。
很多情況下,需要服務(wù)器端主動(dòng)向客戶端推送數(shù)據(jù),保持客戶端與服務(wù)器數(shù)據(jù)的實(shí)時(shí)與同步。此時(shí)若雙方建立的是Socket連接,服務(wù)器就可以直接將數(shù)據(jù)傳送給客戶端;若雙方建立的是HTTP連接,則服務(wù)器需要等到客戶端發(fā)送一次請(qǐng)求后才能將數(shù)據(jù)傳回給客戶端,因此,客戶端定時(shí)向服務(wù)器端發(fā)送連接請(qǐng)求,不僅可以保持在線,同時(shí)也是在“詢問”服務(wù)器是否有新的數(shù)據(jù),如果有就將數(shù)據(jù)傳給客戶端。
6、IP協(xié)議
IP是英文Internet Protocol(網(wǎng)絡(luò)之間互連的協(xié)議)的縮寫,中文簡(jiǎn)稱為“網(wǎng)協(xié)”,也就是為計(jì)算機(jī)網(wǎng)絡(luò)相互連接進(jìn)行通信而設(shè)計(jì)的協(xié)議。在因特網(wǎng)中,它是能使連接到網(wǎng)上的所有計(jì)算機(jī)網(wǎng)絡(luò)實(shí)現(xiàn)相互通信的一套規(guī)則,規(guī)定了計(jì)算機(jī)在因特網(wǎng)上進(jìn)行通信時(shí)應(yīng)當(dāng)遵守的規(guī)則。任何廠家生產(chǎn)的計(jì)算機(jī)系統(tǒng),只要遵守 IP協(xié)議就可以與因特網(wǎng)互連互通。IP地址具有唯一性,根據(jù)用戶性質(zhì)的不同,可以分為5類。另外,IP還有進(jìn)入防護(hù),知識(shí)產(chǎn)權(quán),指針寄存器等含義。
IP是怎樣實(shí)現(xiàn)網(wǎng)絡(luò)互連設(shè)備,如以太網(wǎng)、分組交換網(wǎng)等,它們相互之間不能互通,不能互通的主要原因是因?yàn)樗鼈兯鶄魉蛿?shù)據(jù)的基本單元(技術(shù)上稱之為“幀”)的格式不同。IP協(xié)議實(shí)際上是一套由軟件、程序組成的協(xié)議軟件,它把各種不同“幀”統(tǒng)一轉(zhuǎn)換成“IP數(shù)據(jù)包”格式,這種轉(zhuǎn)換是因特網(wǎng)的一個(gè)最重要的特點(diǎn),使所有各種計(jì)算機(jī)都能在因特網(wǎng)上實(shí)現(xiàn)互通,即具有“開放性”的特點(diǎn)。
IP協(xié)議中還有一個(gè)非常重要的內(nèi)容,那就是給因特網(wǎng)上的每臺(tái)計(jì)算機(jī)和其它設(shè)備都規(guī)定了一個(gè)唯一的地址,叫做“IP 地址”。由于有這種唯一的地址,才保證了用戶在連網(wǎng)的計(jì)算機(jī)上操作時(shí),能夠高效而且方便地從千千萬(wàn)萬(wàn)臺(tái)計(jì)算機(jī)中選出自己所需的對(duì)象來。如今電信網(wǎng)正在與 IP網(wǎng)走向融合,以IP為基礎(chǔ)的新技術(shù)是熱門的技術(shù),如用IP網(wǎng)絡(luò)傳送話音的技術(shù)(即VoIP)就很熱門,其它如IP overATM、IPoverSDH、IP over WDM等等,都是IP技術(shù)的研究重點(diǎn)。