一. 體系結(jié)構(gòu)
由高到低
- OSI七層體系結(jié)構(gòu)
- 應(yīng)用層
- 表示層
- 會話層
- 運輸層
- 網(wǎng)絡(luò)層
- 數(shù)據(jù)鏈路層
- 物理層
- TCP/IP四層體系結(jié)構(gòu)
- 應(yīng)用層(各種應(yīng)用協(xié)議如TELNET, FTP, SMTP等)
- 運輸層(TCP或者UDP)
- 網(wǎng)際層(IP)
- 網(wǎng)絡(luò)接口層(數(shù)據(jù)鏈路層罩缴,物理層)
- 五層協(xié)議的體系結(jié)構(gòu)
- 應(yīng)用層
- 運輸層
- 網(wǎng)絡(luò)層
- 數(shù)據(jù)鏈路層
- 物理層
二. 各層介紹
1. 應(yīng)用層:
應(yīng)用層是體系結(jié)構(gòu)中的最高層晤碘,直接為用戶的應(yīng)用進(jìn)程(正在運行的程序)提供服務(wù) 。在因特網(wǎng)中的應(yīng)用層協(xié)議很多瓜饥,如支持萬維網(wǎng)應(yīng)用的HTTP協(xié)議,支持文件傳輸?shù)?strong>FTP協(xié)議浴骂,支持電子郵件的SMTP協(xié)議等等乓土。
2. 運輸層:
運輸層的任務(wù)是負(fù)責(zé)向兩個主機(jī)中進(jìn)程之間的通信提供服務(wù)。由于一個主機(jī)可同時運行多個進(jìn)程溯警,因此運輸層有復(fù)用和分用的功能趣苏。復(fù)用就是多個應(yīng)用層進(jìn)程可以同時使用下面運輸層的服務(wù),分用則是運輸層把收到的信息分別交付給上面應(yīng)用層中的相應(yīng)的進(jìn)程梯轻。
運輸層主要使用兩種協(xié)議:
- 傳輸控制協(xié)議 TCP(Transmission Control Protocol)----面向連接的食磕,數(shù)據(jù)傳輸?shù)膯挝皇?strong>報文段(segment),能夠提供可靠的交付
- 用戶數(shù)據(jù)報協(xié)議 UDP(User Datagram Protocol)----無連接的喳挑,數(shù)據(jù)傳輸?shù)膯挝皇?strong>用戶數(shù)據(jù)報彬伦,不保證提供可靠的交付,只能“盡最大努力交付(best-effort delivery)“伊诵。
3. 網(wǎng)絡(luò)層:
網(wǎng)絡(luò)層負(fù)責(zé)為分組交換網(wǎng)上的不同主機(jī)提供通信服務(wù)单绑。在發(fā)送數(shù)據(jù)的時候,網(wǎng)絡(luò)層把運輸層產(chǎn)生的報文段或者用戶數(shù)據(jù)報封裝成分組或包進(jìn)行傳送曹宴。在TCP/IP體系中搂橙,由于網(wǎng)絡(luò)層使用IP協(xié)議,因此分組也叫IP數(shù)據(jù)報浙炼,或簡稱數(shù)據(jù)報份氧。
無論在哪一層傳送的數(shù)據(jù)單元,習(xí)慣上都可以籠統(tǒng)地用“分組”來表示
因特網(wǎng)是一個很大的互聯(lián)網(wǎng)弯屈,它由大量的異構(gòu)網(wǎng)絡(luò)通過路由器(router)相連接蜗帜。因特網(wǎng)主要的網(wǎng)絡(luò)層協(xié)議是無連接的網(wǎng)際協(xié)議IP和許多種路由選擇協(xié)議,所以因特網(wǎng)的網(wǎng)絡(luò)層也叫網(wǎng)際層或者IP層资厉。
4. 數(shù)據(jù)鏈路層:
簡稱鏈路層厅缺。兩個主機(jī)之間的數(shù)據(jù)傳輸總是在一段一段的鏈路上傳送的,也就是說宴偿,在兩個相鄰結(jié)點之間(主機(jī)和路由器之間或者兩個路由器之間)傳送數(shù)據(jù)是直接傳送的(點對點)湘捎。這時就需要使用專門的鏈路層的協(xié)議。 在兩個相鄰結(jié)點之間傳送數(shù)據(jù)時窄刘,數(shù)據(jù)鏈路層把網(wǎng)絡(luò)層交下來的IP數(shù)據(jù)報組裝成幀(frame)窥妇,在兩個相鄰結(jié)點間的鏈路上“透明”的傳送幀中的數(shù)據(jù)。每一幀包括數(shù)據(jù)和必要的控制信息(如同步信息娩践、地址信息活翩、差錯控制等)烹骨。典型的幀長是幾百字節(jié)到一千多字節(jié)。
透明:某一個實際存在的事物看起來卻好像不存在一樣材泄。
在接收數(shù)據(jù)時沮焕,控制信息使接收端能夠知道一個幀從哪個比特開始和到哪個比特結(jié)束,還使接收端能夠檢測到所收到的幀中有無差錯拉宗,如發(fā)現(xiàn)錯誤峦树,數(shù)據(jù)鏈路層就簡單地丟棄這個出了差錯的幀,以免繼續(xù)浪費網(wǎng)絡(luò)資源旦事。如需改錯魁巩,則交給運輸層的TCP協(xié)議完成。
5. 物理層:
在物理層上傳輸數(shù)據(jù)的單位是比特族檬。物理層的任務(wù)就是透明地傳送比特流歪赢。
在因特網(wǎng)所使用的各種協(xié)議中,最重要的和最著名的就是TCP和IP兩個協(xié)議〉チ希現(xiàn)在人們經(jīng)常提起的TCP/IP并不一定是單指TCP和IP這兩個具體的協(xié)議埋凯,而是表示因特網(wǎng)所使用的整個TCP/IP協(xié)議族(Protocol suite)
三. TCP的運輸連接管理(三次握手)
TCP運輸連接的建立和釋放是每一次面向連接的通信中必不可少的過程。因此扫尖,運輸連接就有三個階段:連接建立白对、數(shù)據(jù)傳送和連接釋放。運輸連接的管理就是使運輸連接的建立和釋放都能正常地進(jìn)行换怖。
在TCP建立連接的過程中要解決三個問題:
- 要使每一方能夠確知對方的存在
- 要允許雙方協(xié)商一些參數(shù)(如最大窗口值甩恼、是否使用窗口擴(kuò)大選項和時間戳選項以及服務(wù)質(zhì)量等)
- 能夠?qū)嶓w資源(緩存大小、連接表中的項目等)進(jìn)行分配
TCP連接的建立采用客戶服務(wù)器方式沉颂。主動發(fā)起連接建立的應(yīng)用進(jìn)程叫做客戶(Client)条摸,被動等待連接建立的應(yīng)用程序叫做服務(wù)器(Server)。
假設(shè)主機(jī)A運行的是TCP客戶程序铸屉,主機(jī)B運行TCP服務(wù)器程序钉蒲。最初兩端的TCP進(jìn)程都處在CLOSED(關(guān)閉)狀態(tài)。
A主動打開連接彻坛,而B被動打開連接顷啼。
B的TCP服務(wù)器進(jìn)程先創(chuàng)建傳輸控制塊TCB,準(zhǔn)備接受客戶進(jìn)程的連接請求昌屉。然后服務(wù)器就處于LISTEN(收聽)狀態(tài)钙蒙,等待客戶的連接請求,如有间驮,即作出反應(yīng)躬厌。
過程1.
???A的TCP客戶進(jìn)程也是首先創(chuàng)建傳輸控制模塊TCB,然后向B發(fā)出連接請求報文段竞帽,——>首部中的同步位 SYN = 1烤咧,同時選擇一個初始序號 seq = x偏陪,——>TCP客戶進(jìn)入SYN-SENT(同步以發(fā)送)狀態(tài)。
注:TCP規(guī)定煮嫌,SYN報文段(即SYN = 1的報文段)不能攜帶數(shù)據(jù),但要消耗掉一個序號抱虐。
過程2.
???B收到連接請求報文段后昌阿,如同意建立連接,則向A發(fā)送確認(rèn)恳邀。——>在確認(rèn)報文段中把SYN位和ACK位都置1懦冰,確認(rèn)號是ack = x+1,同時也為自己選擇一個初始序號seq = y谣沸。(注:該確認(rèn)報文段也不能攜帶數(shù)據(jù)刷钢,但同樣要消耗掉一個序號。)——>這時乳附,TCP服務(wù)器進(jìn)程進(jìn)入SYN-RCVD(同步收到)狀態(tài)内地。
過程3.
???TCP客戶進(jìn)程收到B的確認(rèn)后,還要向B給出確認(rèn)赋除。——>確認(rèn)報文段的ACK置1阱缓,確認(rèn)號ack = y+1,而自己的序號seq = x + 1(注:TCP規(guī)定举农,ACK報文段可以攜帶數(shù)據(jù)荆针,但如果不攜帶數(shù)據(jù)則不消耗序號,在這種情況下颁糟,下一個數(shù)據(jù)報文段的序號仍是seq = x +1航背。)——>這時,TCP連接已經(jīng)建立棱貌,A進(jìn)入ESTABLISHED(已建立連接)狀態(tài)玖媚。
???當(dāng)B收到A的確認(rèn)后也進(jìn)入ESTABLISHED狀態(tài)。
上面給出的連接建立過程叫做三次握手(three-way handshake)键畴,或三次聯(lián)絡(luò)最盅。
問題:
為什么客戶主機(jī)A還要發(fā)送一次確認(rèn)呢?
???主要是為了防止已失效的連接請求報文段突然又傳送到了服務(wù)器主機(jī)B
???假定A發(fā)出連接請求起惕,但因連接請求報文丟失而未收到確認(rèn)涡贱,于是A再重傳一次連接請求,后來收到了確認(rèn)惹想,建立了連接问词,數(shù)據(jù)傳輸完畢后就釋放了連接。這個過程中嘀粱,A共發(fā)送了兩個請求報文段激挪,其中第一個丟失辰狡,第二個到達(dá)了B。
???于是就可能有“已失效的連接請求報文段產(chǎn)生”:假定一種異常的情況垄分,即A發(fā)出的第一個連接請求報文段并沒有丟失宛篇,而是在某些網(wǎng)絡(luò)結(jié)點長時間的滯留了,以致延誤到第二個請求報文段連接釋放以后的某個時間才到達(dá)B薄湿。本來這是一個已失效的報文段叫倍。但B收到此失效的連接請求報文段后,就誤以為A又一次發(fā)出了一次新的連接請求豺瘤,于是就向A發(fā)送確認(rèn)報文段吆倦,同意建立連接請求。假如不采用三次握手坐求,那么只要B發(fā)出確認(rèn)蚕泽,新的連接就建立了。
???由于現(xiàn)在A并沒有發(fā)出建立連接的請求桥嗤,所以不會理睬B的確認(rèn)须妻,也不會向B發(fā)送數(shù)據(jù),但是B卻以為新的運輸連接已經(jīng)建立了砸逊,并一直等待A發(fā)來數(shù)據(jù)璧南。于是,B的許多資源就這樣被白白浪費了师逸。
???采用三次握手司倚,A 不會向 B 的確認(rèn)發(fā)出確認(rèn),B由于收不到確認(rèn)篓像,就知道A并沒有要求要建立連接动知。