一亭饵、TCP/IP分層模型
TCP/IP模型分為5層:應(yīng)用層赠涮、傳輸層子寓、網(wǎng)絡(luò)層、數(shù)據(jù)鏈路層以及 物理層笋除。分層就類似接口的定義斜友,定義了每個層的行為職責(zé)。這樣的分層抽象提供了更多實現(xiàn)的自由垃它。
二蝙寨、分層結(jié)構(gòu)
1、應(yīng)用層
應(yīng)用層是我們經(jīng)常接觸使用的部分嗤瞎,比如常用的http協(xié)議墙歪、ftp協(xié)議(文件傳輸協(xié)議)、snmp(網(wǎng)絡(luò)管理協(xié)議)贝奇、telnet (遠程登錄協(xié)議 )虹菲、smtp(簡單郵件傳輸協(xié)議)、dns(域名解析)掉瞳,這次主要是面向用戶的交互的毕源。這里的應(yīng)用層集成了osi分層模型中 的應(yīng)用、會話陕习、表示層三層的功能霎褐。
2、傳輸層
傳輸層的作用就是將應(yīng)用層的數(shù)據(jù)進行傳輸轉(zhuǎn)運该镣。比如我們常說的tcp(可靠的傳輸控制協(xié)議)冻璃、udp(用戶數(shù)據(jù)報協(xié)議)。傳輸單位為報文段。
tcp(Transmission Control Protocol)
? ? 面向連接(先要和對方確定連接省艳、傳輸結(jié)束需要斷開連接娘纷,類似打電話)、復(fù)雜可靠的跋炕、有很好的重傳和查錯機制赖晶。一般用與高速、可靠的通信服務(wù)
udp(user datagram protocol)
? ? 面向無連接(無需確認對方是否存在辐烂,類似寄包裹)遏插、簡單高效、沒有重傳機制纠修。一般用于即時通訊涩堤、廣播通信等
TCP與UDP區(qū)別總結(jié):
TCP面向連接;UDP是無連接的分瘾,即發(fā)送數(shù)據(jù)之前不需要建立連接胎围;
TCP提供可靠的服務(wù)。即通過TCP連接傳送的數(shù)據(jù)德召,無差錯白魂,不丟失,不重復(fù)上岗,且按序到達福荸;UDP則不保證可靠交付;
TCP協(xié)議在傳送數(shù)據(jù)段的時候要給段標號;UDP協(xié)議不會肴掷;
TCP面向字節(jié)流敬锐,把數(shù)據(jù)看成一連串無結(jié)構(gòu)的字節(jié)流;UDP是面向報文的,且UDP沒有擁塞控制呆瞻,因此網(wǎng)絡(luò)出現(xiàn)擁塞不會使源主機的發(fā)送速率降低(對實時應(yīng)用很有用台夺,如IP電話,實時視頻會議等)
每一條TCP連接只能是點到點的;UDP支持一對一痴脾,一對多颤介,多對一和多對多的交互通信;
TCP的邏輯通信信道是全雙工的可靠信道赞赖,UDP則是不可靠信道滚朵;
3、網(wǎng)絡(luò)層
網(wǎng)絡(luò)層用來處理網(wǎng)絡(luò)中流動的數(shù)據(jù)包前域,數(shù)據(jù)包為最小的傳遞單位辕近,比如我們常用的ip協(xié)議、icmp協(xié)議匿垄、arp協(xié)議(通過分析ip地址得出物理mac地址)移宅。
4归粉、數(shù)據(jù)鏈路層
數(shù)據(jù)鏈路層一般用來處理連接硬件的部分,包括控制網(wǎng)卡吞杭、硬件相關(guān)的設(shè)備驅(qū)動等盏浇。傳輸單位數(shù)據(jù)幀变丧。
5芽狗、物理層
物理層一般為負責(zé)數(shù)據(jù)傳輸?shù)挠布热缥覀兞私獾碾p絞線電纜痒蓬、無線童擎、光纖等。比特流光電等信號發(fā)送接收數(shù)據(jù)攻晒。
三顾复、數(shù)據(jù)傳遞
數(shù)據(jù)傳遞
首先應(yīng)用層將數(shù)據(jù)報文按照協(xié)議封裝格式壓縮然后傳遞給傳輸層、傳輸層通過協(xié)議將數(shù)據(jù)報封裝為數(shù)據(jù)報段鲁捏、然后傳遞給網(wǎng)絡(luò)層芯砸,網(wǎng)絡(luò)層將數(shù)據(jù)報段封裝為數(shù)據(jù)包,并傳遞給數(shù)據(jù)鏈路層给梅,數(shù)據(jù)鏈路層收到數(shù)據(jù)包假丧,封裝為數(shù)據(jù)幀,然后又將數(shù)據(jù)幀轉(zhuǎn)比特流傳遞給物理層动羽,物理層將比特流通過光或電信號發(fā)送給目標包帚。
詳細的數(shù)據(jù)傳遞
數(shù)據(jù)交互
數(shù)據(jù)交互傳遞的過程
http報文通過tcp發(fā)送的舉例
應(yīng)用交互舉例
TCP(Transmission Control Protocol) 傳輸控制協(xié)議。TCP是主機對主機層的傳輸控制協(xié)議运吓,提供可靠的連接服務(wù)渴邦,采用三次握手確認建立一個連接。位碼即tcp標志位拘哨,有6種 標示:SYN(synchronous建立聯(lián)機) ACK(acknowledgement 確認) PSH(push傳送) FIN(finish結(jié)束) RST(reset重置) URG(urgent緊急)Sequence number(順序號碼) Acknowledge number(確認號碼)谋梭。
手機能夠使用聯(lián)網(wǎng)功能是因為手機底層實現(xiàn)了TCP/IP協(xié)議,可以使手機終端通過無線網(wǎng)絡(luò)建立TCP連接倦青。TCP協(xié)議可以對上層網(wǎng)絡(luò)提供接口章蚣,使上層網(wǎng)絡(luò)數(shù)據(jù)的傳輸建立在“無差別”的網(wǎng)絡(luò)之上。建立起一個TCP連接需要經(jīng)過“三次握手”:
第一次握手:客戶端發(fā)送syn包(syn=j)到服務(wù)器姨夹,并進入SYN_SEND狀態(tài)纤垂,等待服務(wù)器確認;
第二次握手:服務(wù)器收到syn包磷账,必須確認客戶的SYN(ack=j+1)峭沦,同時自己也發(fā)送一個SYN包(syn=k),即SYN+ACK包逃糟,此時服務(wù)器進入SYN_RECV狀態(tài)吼鱼;
第三次握手:客戶端收到服務(wù)器的SYN+ACK包蓬豁,向服務(wù)器發(fā)送確認包ACK(ack=k+1),此包發(fā)送完畢菇肃,客戶端和服務(wù)器進入ESTABLISHED狀態(tài)地粪,完成三次握手。握手完成后琐谤,兩臺主機開始傳輸數(shù)據(jù)了蟆技。
握手過程中傳送的包里不包含數(shù)據(jù),三次握手完畢后斗忌,客戶端與服務(wù)器才正式開始傳送數(shù)據(jù)质礼。理想狀態(tài)下,TCP連接一旦建立织阳,在通信雙方中的任何一方主動關(guān)閉連接之前眶蕉,TCP 連接都將被一直保持下去。斷開連接時服務(wù)器和客戶端均可以主動發(fā)起斷開TCP連接的請求唧躲,斷開過程需要經(jīng)過“四次握手”(過程就不細寫了造挽,就是服務(wù)器和客戶端交互,最終確定斷開)弄痹。
實例一:
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,隨機產(chǎn)生seq number=3626544836的數(shù)據(jù)包到192.168.1.123,192.168.1.123由SYN=1知道192.168.1.116要求建立聯(lián)機;
第二次握手:192.168.1.123收到請求后要確認聯(lián)機信息饭入,向192.168.1.116發(fā)送ack number=3626544837,syn=1,ack=1,隨機產(chǎn)生seq=1739326486的包;
第三次握手:192.168.1.116收到后檢查ack number是否正確,即第一次發(fā)送的seq number+1,以及位碼ack是否為1界酒,若正確圣拄,192.168.1.116會再發(fā)送ack number=1739326487,ack=1,192.168.1.123收到后確認seq=seq+1,ack=1則連接建立成功毁欣。
實例二:
TCP的作用是流量控制庇谆,主要是控制數(shù)據(jù)流的傳輸。下面以瀏覽網(wǎng)頁為例凭疮,根據(jù)自身理解來解釋一下這個過程饭耳。(注:第二個ack屬于代碼段ack位)
pc瀏覽服務(wù)器網(wǎng)頁此過程不包括域名查詢,只描述TCP與http數(shù)據(jù)流的變化执解。
pc與http服務(wù)器進行三次握手來建立連接寞肖。
1.pc:seq=0 ack=0 syn=1 ack=0 發(fā)送給服務(wù)器建立同步請求。
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請求.
5.服務(wù)器收到請求并發(fā)送TCP確認,然后發(fā)送http數(shù)據(jù)信息給客戶端的瀏覽器.
6.客戶端收到服務(wù)器的http信息,然后發(fā)送TCP確認信息給服務(wù)器.
7.客戶端發(fā)送FIN+ACK給服務(wù)器,要求結(jié)束數(shù)據(jù)傳輸.
8.服務(wù)器發(fā)送TCP確認消息用于確認pc的TCP的FIN消息
9.服務(wù)器向客戶端發(fā)送FIN+ACK消息用于結(jié)束TCP會話.
10.客戶端發(fā)送確認信息給服務(wù)器,整個會話結(jié)束.
TCP四次揮手:
在網(wǎng)絡(luò)數(shù)據(jù)傳輸中衰腌,傳輸層協(xié)議斷開連接的過程我們稱為四次揮手
第一次新蟆,A端像B端發(fā)送FIN結(jié)束報文段,準備關(guān)閉連接
第二次右蕊,B端確認A端的FIN琼稻,表示自己已經(jīng)收到對方關(guān)閉連接的請求
中間這段時間,A端停止向B端發(fā)送數(shù)據(jù)饶囚,但是B端可以向A端發(fā)送數(shù)據(jù)帕翻,要將自己未處理完任務(wù)處理完
第三次鸠补,B端向A端發(fā)送FIN結(jié)束報文段,準備關(guān)閉連接
第四次嘀掸,A端確認B端的FIN紫岩,進入TIME_WAIT狀態(tài),此時A端進程已經(jīng)退出睬塌,但是連接還在
當B端收到A端的ACK之后铣焊,先斷開連接
當A端等待2 MSL之后庙睡,確認的B端接收到ACK后敲长,再斷開連接
發(fā)起斷開連接請求的一端最后要進入有一個TIME_WAIT狀態(tài)
發(fā)起連接請求的可以是客戶端也可以是服務(wù)器端
2凰锡、HTTP連接
HTTP協(xié)議即超文本傳送協(xié)議(Hypertext Transfer Protocol )堕花,是Web聯(lián)網(wǎng)的基礎(chǔ)文狱,也是手機聯(lián)網(wǎng)常用的協(xié)議之一,HTTP協(xié)議是建立在TCP協(xié)議之上的一種應(yīng)用缘挽。
HTTP連接最顯著的特點是客戶端發(fā)送的每次請求都需要服務(wù)器回送響應(yīng)瞄崇,在請求結(jié)束后,會主動釋放連接壕曼。從建立連接到關(guān)閉連接的過程稱為“一次連接”苏研。
1)在HTTP 1.0中,客戶端的每次請求都要求建立一次單獨的連接腮郊,在處理完本次請求后摹蘑,就自動釋放連接。
2)在HTTP 1.1中則可以在一次連接中處理多個請求轧飞,并且多個請求可以重疊進行衅鹿,不需要等待一個請求結(jié)束后再發(fā)送下一個請求。
由于HTTP在每次請求結(jié)束后都會主動釋放連接过咬,因此HTTP連接是一種“短連接”大渤,要保持客戶端程序的在線狀態(tài),需要不斷地向服務(wù)器發(fā)起連接請求掸绞。通常的做法是即時不需要獲得任何數(shù)據(jù)泵三,客戶端也保持每隔一段固定的時間向服務(wù)器發(fā)送一次“保持連接”的請求,服務(wù)器在收到該請求后對客戶端進行回復(fù)衔掸,表明知道 客戶端“在線”烫幕。若服務(wù)器長時間無法收到客戶端的請求,則認為客戶端“下線”敞映,若客戶端長時間無法收到服務(wù)器的回復(fù)较曼,則認為網(wǎng)絡(luò)已經(jīng)斷開。
3驱显、SOCKET原理
3.1 套接字(socket)概念
套接字(socket)是通信的基石诗芜,是支持TCP/IP協(xié)議的網(wǎng)絡(luò)通信的基本操作單元瞳抓。它是網(wǎng)絡(luò)通信過程中端點的抽象表示,包含進行網(wǎng)絡(luò)通信必須的五種信息:連接使用的協(xié)議伏恐,本地主機的IP地址孩哑,本地進程的協(xié)議端口,遠地主機的IP地址翠桦,遠地進程的協(xié)議口横蜒。
應(yīng)用層通過傳輸層進行數(shù)據(jù)通信時,TCP會遇到同時為多個應(yīng)用程序進程提供并發(fā)服務(wù)的問題销凑。多個TCP連接或多個應(yīng)用程序進程可能需要通過同一個 TCP協(xié)議端口傳輸數(shù)據(jù)丛晌。為了區(qū)別不同的應(yīng)用程序進程和連接,許多計算機操作系統(tǒng)為應(yīng)用程序與TCP/IP協(xié)議交互提供了套接字(Socket)接口斗幼。應(yīng)用層可以和傳輸層通過Socket接口澎蛛,區(qū)分來自不同應(yīng)用程序進程或網(wǎng)絡(luò)連接的通信,實現(xiàn)數(shù)據(jù)傳輸?shù)牟l(fā)服務(wù)蜕窿。
3.2 建立socket連接
建立Socket連接至少需要一對套接字谋逻,其中一個運行于客戶端,稱為ClientSocket 桐经,另一個運行于服務(wù)器端毁兆,稱為ServerSocket 。
套接字之間的連接過程分為三個步驟:服務(wù)器監(jiān)聽阴挣,客戶端請求气堕,連接確認。
服務(wù)器監(jiān)聽:服務(wù)器端套接字并不定位具體的客戶端套接字畔咧,而是處于等待連接的狀態(tài)茎芭,實時監(jiān)控網(wǎng)絡(luò)狀態(tài),等待客戶端的連接請求盒卸。
客戶端請求:指客戶端的套接字提出連接請求骗爆,要連接的目標是服務(wù)器端的套接字。為此蔽介,客戶端的套接字必須首先描述它要連接的服務(wù)器的套接字摘投,指出服務(wù)器端套接字的地址和端口號,然后就向服務(wù)器端套接字提出連接請求虹蓄。
連接確認:當服務(wù)器端套接字監(jiān)聽到或者說接收到客戶端套接字的連接請求時犀呼,就響應(yīng)客戶端套接字的請求,建立一個新的線程薇组,把服務(wù)器端套接字的描述發(fā) 給客戶端外臂,一旦客戶端確認了此描述,雙方就正式建立連接律胀。而服務(wù)器端套接字繼續(xù)處于監(jiān)聽狀態(tài)宋光,繼續(xù)接收其他客戶端套接字的連接請求貌矿。
4、SOCKET連接與TCP連接
創(chuàng)建Socket連接時罪佳,可以指定使用的傳輸層協(xié)議逛漫,Socket可以支持不同的傳輸層協(xié)議(TCP或UDP),當使用TCP協(xié)議進行連接時赘艳,該Socket連接就是一個TCP連接酌毡。
5、Socket連接與HTTP連接
由于通常情況下Socket連接就是TCP連接蕾管,因此Socket連接一旦建立枷踏,通信雙方即可開始相互發(fā)送數(shù)據(jù)內(nèi)容,直到雙方連接斷開掰曾。但在實際網(wǎng)絡(luò)應(yīng)用中旭蠕,客戶端到服務(wù)器之間的通信往往需要穿越多個中間節(jié)點,例如路由器婴梧、網(wǎng)關(guān)下梢、防火墻等客蹋,大部分防火墻默認會關(guān)閉長時間處于非活躍狀態(tài)的連接而導(dǎo)致 Socket 連接斷連塞蹭,因此需要通過輪詢告訴網(wǎng)絡(luò),該連接處于活躍狀態(tài)讶坯。而HTTP連接使用的是“請求—響應(yīng)”的方式番电,不僅在請求時需要先建立連接,而且需要客戶端向服務(wù)器發(fā)出請求后辆琅,服務(wù)器端才能回復(fù)數(shù)據(jù)漱办。
很多情況下,需要服務(wù)器端主動向客戶端推送數(shù)據(jù)婉烟,保持客戶端與服務(wù)器數(shù)據(jù)的實時與同步娩井。此時若雙方建立的是Socket連接,服務(wù)器就可以直接將數(shù)據(jù)傳送給客戶端似袁;若雙方建立的是HTTP連接洞辣,則服務(wù)器需要等到客戶端發(fā)送一次請求后才能將數(shù)據(jù)傳回給客戶端,因此昙衅,客戶端定時向服務(wù)器端發(fā)送連接請求扬霜,不僅可以保持在線,同時也是在“詢問”服務(wù)器是否有新的數(shù)據(jù)而涉,如果有就將數(shù)據(jù)傳給客戶端著瓶。
6、IP協(xié)議
IP是英文Internet Protocol(網(wǎng)絡(luò)之間互連的協(xié)議)的縮寫啼县,中文簡稱為“網(wǎng)協(xié)”材原,也就是為計算機網(wǎng)絡(luò)相互連接進行通信而設(shè)計的協(xié)議沸久。在因特網(wǎng)中,它是能使連接到網(wǎng)上的所有計算機網(wǎng)絡(luò)實現(xiàn)相互通信的一套規(guī)則余蟹,規(guī)定了計算機在因特網(wǎng)上進行通信時應(yīng)當遵守的規(guī)則麦向。任何廠家生產(chǎn)的計算機系統(tǒng),只要遵守 IP協(xié)議就可以與因特網(wǎng)互連互通客叉。IP地址具有唯一性诵竭,根據(jù)用戶性質(zhì)的不同,可以分為5類兼搏。另外卵慰,IP還有進入防護,知識產(chǎn)權(quán)佛呻,指針寄存器等含義裳朋。
IP是怎樣實現(xiàn)網(wǎng)絡(luò)互連設(shè)備,如以太網(wǎng)吓著、分組交換網(wǎng)等鲤嫡,它們相互之間不能互通,不能互通的主要原因是因為它們所傳送數(shù)據(jù)的基本單元(技術(shù)上稱之為“幀”)的格式不同绑莺。IP協(xié)議實際上是一套由軟件暖眼、程序組成的協(xié)議軟件,它把各種不同“幀”統(tǒng)一轉(zhuǎn)換成“IP數(shù)據(jù)包”格式纺裁,這種轉(zhuǎn)換是因特網(wǎng)的一個最重要的特點诫肠,使所有各種計算機都能在因特網(wǎng)上實現(xiàn)互通,即具有“開放性”的特點欺缘。
IP協(xié)議中還有一個非常重要的內(nèi)容栋豫,那就是給因特網(wǎng)上的每臺計算機和其它設(shè)備都規(guī)定了一個唯一的地址,叫做“IP 地址”谚殊。由于有這種唯一的地址丧鸯,才保證了用戶在連網(wǎng)的計算機上操作時,能夠高效而且方便地從千千萬萬臺計算機中選出自己所需的對象來嫩絮。如今電信網(wǎng)正在與 IP網(wǎng)走向融合丛肢,以IP為基礎(chǔ)的新技術(shù)是熱門的技術(shù),如用IP網(wǎng)絡(luò)傳送話音的技術(shù)(即VoIP)就很熱門絮记,其它如IP overATM摔踱、IPoverSDH、IP over WDM等等怨愤,都是IP技術(shù)的研究重點派敷。