(一)計(jì)算機(jī)網(wǎng)絡(luò)和因特網(wǎng)
什么是因特網(wǎng)
- 具體構(gòu)成描述:因特網(wǎng)是一個(gè)世紀(jì)范圍內(nèi)的計(jì)算機(jī)網(wǎng)絡(luò)俺祠,互聯(lián)了數(shù)以億計(jì)的計(jì)算機(jī)設(shè)備(主機(jī),或稱為端系統(tǒng)).
- 端系統(tǒng)通過通信鏈路(同軸電纜,銅線叭首,光纖)和分組交換機(jī)(路由器,鏈路層交換機(jī))連接互广,發(fā)送信息的端系統(tǒng)將報(bào)文數(shù)據(jù)分段敛腌,并加上首部字節(jié),形成分組(包).
- 端系統(tǒng)通過ISP(因特網(wǎng)服務(wù)商)接入網(wǎng)絡(luò)惫皱,每個(gè)ISP是一個(gè)由多個(gè)分組交換機(jī)和多段通信鏈路組成的網(wǎng)絡(luò).
- 端系統(tǒng)像樊、交換機(jī)及其他因特網(wǎng)部件都要運(yùn)行一系列協(xié)議. 因特網(wǎng)的主要協(xié)議統(tǒng)稱為TCP/IP(IP協(xié)議定義了路由器和端之間收發(fā)分組的格式).
- RFC(請求評(píng)論)是IETF(因特網(wǎng)工程任務(wù)組)研發(fā),定義了TCP旅敷,IP生棍,HTTP,SMTP等協(xié)議.
- 服務(wù)描述:因特網(wǎng)是應(yīng)用程序的平臺(tái).
- 端提供了一個(gè)API(應(yīng)用程序編程接口)媳谁,其是一套發(fā)送數(shù)據(jù)的軟件必須遵循的規(guī)則集合涂滴,因此因特網(wǎng)能夠?qū)?shù)據(jù)交付給目的地.
網(wǎng)絡(luò)邊緣
- 接入網(wǎng):將端連接到離其最近的路由器的物理鏈路.
- 家庭接入:DSL(數(shù)字用戶線),F(xiàn)TTH(光纖到戶)晴音,電纜柔纵,HFC(混合光纖同軸),撥號(hào)锤躁,衛(wèi)星.
- 企業(yè)接入:以太網(wǎng)搁料,WiFi.
- 廣域無線接入:3G,LTE.
- 物理媒體:雙絞銅線系羞,同軸電纜郭计,光纖,陸地?zé)o線電信道椒振,衛(wèi)星無線電信道.
網(wǎng)絡(luò)核心
- 分組交換(另一種數(shù)據(jù)傳輸方式是電路交換:端系統(tǒng)通信期間始終占用帶寬):端將報(bào)文分成分組 昭伸,通過交換機(jī)和鏈路傳遞.
- 存儲(chǔ)轉(zhuǎn)發(fā):交換機(jī)必須接受到整個(gè)分組,才開始傳輸.
- 排隊(duì)時(shí)延:若分組需要傳輸?shù)侥硹l鏈路杠人,而該鏈路正忙勋乾,則其必須在輸出緩存中等待.
- 分組丟失:緩存空間有限,若其充滿則會(huì)丟包.
- 轉(zhuǎn)發(fā)表:分組到達(dá)路由器時(shí)嗡善,路由器讀取其首部中目的地的IP地址辑莫,并在轉(zhuǎn)發(fā)表(轉(zhuǎn)發(fā)表由路由器自動(dòng)地設(shè)置)搜索,之后決定從哪條鏈路輸出.
- 因特網(wǎng)是網(wǎng)絡(luò)的網(wǎng)絡(luò)罩引,由十多個(gè)第一層ISP和數(shù)十萬個(gè)低層ISP組成. 低層ISP(用戶各吨,內(nèi)容提供商)和高層ISP,高層ISP彼此互連. 內(nèi)容提供商也可創(chuàng)建網(wǎng)絡(luò),在可能的地方與用戶直接互聯(lián)揭蜒,以減少費(fèi)用.
時(shí)延横浑,丟包和吞吐量
- 時(shí)延分為:處理,排隊(duì)屉更,傳輸和傳播時(shí)延.
- 傳輸時(shí)延:路由器將分組推出所需的時(shí)間徙融,是分組長度和鏈路傳輸速率的函數(shù),與路由器之間的距離無關(guān).
- 傳播時(shí)延:1個(gè)比特從一臺(tái)路由器向另一臺(tái)傳播所需的時(shí)間瑰谜,是亮路由器間距離的函數(shù)欺冀,與分組長度和鏈路傳輸速率無關(guān).
- 設(shè)計(jì)系統(tǒng)時(shí)流量強(qiáng)度 La/R 不能大于1. 接近于1時(shí)將會(huì)丟包.
注:a 是分組到達(dá)隊(duì)列的平均速率;R 是從隊(duì)列中推出比特的速率(傳輸速率)萨脑;假定所有分組都是由 L 比特組成. - 瞬時(shí)吞吐量:主機(jī)B接收到該文件的速率.
- 平均吞吐量:文件比特?cái)?shù)/瞬時(shí)吞吐量
協(xié)議層次和服務(wù)模型
(因特網(wǎng))協(xié)議棧:各協(xié)議棧的所有協(xié)議隐轩,報(bào)文從上到下經(jīng)過各層時(shí),分別在首部加入各層的信息進(jìn)行封裝.
注: 另有7層OSI參考模型:將應(yīng)用層分為應(yīng)用渤早、表示和會(huì)話層.
- 應(yīng)用層:是網(wǎng)絡(luò)應(yīng)用程序及其應(yīng)用層協(xié)議存留的地方(HTTP, SMTP,FTP)
- 運(yùn)輸層:在應(yīng)用程序端點(diǎn)間傳送應(yīng)用層報(bào)文(TCP职车,UDP),運(yùn)輸層分組稱為報(bào)文段.
- 網(wǎng)絡(luò)層:負(fù)責(zé)將網(wǎng)絡(luò)層分組(數(shù)據(jù)報(bào))鹊杖,在主機(jī)間傳遞(IP協(xié)議)悴灵,有時(shí)簡稱為IP層.
- 鏈路層:將分組從一個(gè)結(jié)點(diǎn)(主機(jī)或路由器)移動(dòng)到下一個(gè)結(jié)點(diǎn).
- 物理層:將幀(鏈路層分組)中每個(gè)比特從一個(gè)結(jié)點(diǎn)移動(dòng)到下一個(gè).
網(wǎng)絡(luò)攻擊
- 惡意軟件的自我復(fù)制
- 病毒:需要用戶交互,如包含惡意可執(zhí)行代碼的電子郵件.
- 蠕蟲:無需交互.
- 攻擊服務(wù)器(拒絕服務(wù)攻擊Dos)
- 弱點(diǎn)攻擊:向目標(biāo)主機(jī)發(fā)送報(bào)文骂蓖,使之停止運(yùn)行或崩潰.
- 帶寬洪泛:向目標(biāo)主機(jī)發(fā)送大量分組称勋,使合法分組無法到達(dá)服務(wù)器.
- 連接洪泛:在目標(biāo)主機(jī)中創(chuàng)建大量TCP連接,使主機(jī)停止接受合法連接.
- 嗅探分組:在無線傳輸設(shè)備的附近設(shè)置一臺(tái)被動(dòng)的接收機(jī)涯竟,該接收機(jī)就能得到每個(gè)分組的副本.
- IP欺騙:將具有虛假源地址的分組注入因特網(wǎng).
發(fā)展歷史
1.從電路交換到分組交換(1961-1972)
- 第一個(gè)因特網(wǎng):ARPAnet(1967)赡鲜,4個(gè)交換機(jī).
- 專用網(wǎng)絡(luò)和網(wǎng)絡(luò)互聯(lián)(1972-1980)
- 創(chuàng)建了網(wǎng)絡(luò)的網(wǎng)絡(luò),期間就已經(jīng)形成了TCP庐船,UDP银酬,IP協(xié)議的概念.
- 網(wǎng)絡(luò)激增(1980-1990)
- 聯(lián)網(wǎng)的主機(jī)達(dá)到10萬臺(tái).
- 1983年TCP/IP作為ARPAnet的新標(biāo)準(zhǔn)協(xié)議正式部署.
- DNS(域名系統(tǒng))出世,用于將可讀的因特網(wǎng)名字(www.tukif.com)映射到其32比特的IP地址.
- 爆炸(1990-):ARPAnet和NSFNET相繼退役筐钟,因特網(wǎng)商業(yè)化揩瞪,萬維網(wǎng)應(yīng)用(WWW)出現(xiàn).
- 最新發(fā)展
- 自2000年起,家庭寬帶接入高速化.
- 高速公共WiFi網(wǎng)絡(luò)普及篓冲,2011年無限聯(lián)網(wǎng)設(shè)備數(shù)量超過有線.
- 社交網(wǎng)絡(luò)軟件興起.
- 谷歌李破、微軟部署專用網(wǎng)絡(luò),繞過因特網(wǎng).
- 云計(jì)算興起.
(二)應(yīng)用層
應(yīng)用層協(xié)議原理
- 網(wǎng)絡(luò)應(yīng)用程序體系結(jié)構(gòu)
- 客戶-服務(wù)器結(jié)構(gòu):服務(wù)器具有固定壹将、周知的地址(IP地址)嗤攻,且總是打開,如Web應(yīng)用程序.
- P2P結(jié)構(gòu):應(yīng)用程序在間斷連接的主機(jī)對之間直接通信.
- 進(jìn)程通信
進(jìn)程可以認(rèn)為是運(yùn)行在端系統(tǒng)中的一個(gè)程序.
- 客戶-服務(wù)器進(jìn)程:發(fā)起通信的進(jìn)程被標(biāo)識(shí)為客戶诽俯,在會(huì)話開始時(shí)等待聯(lián)系的進(jìn)程是服務(wù)器.
- 進(jìn)程與計(jì)算機(jī)網(wǎng)絡(luò)的接口:套接字.
- 套接字是一個(gè)軟件接口妇菱,進(jìn)程通過其向網(wǎng)絡(luò)收發(fā)報(bào)文.
- 套接字是應(yīng)用程序和運(yùn)輸層的接口,也就是之前提到的API,開發(fā)者可以控制套接字在應(yīng)用層端的一切闯团,但對其在運(yùn)輸端幾乎沒有控制權(quán).
- 將進(jìn)程比作房子辛臊,套接字就是門.
- 進(jìn)程尋址
- 主機(jī)地址:32比特的IP地址.
- 目的主機(jī)的接收進(jìn)程(接收套接字)的標(biāo)識(shí)符.
- 可供應(yīng)用程序使用的運(yùn)輸服務(wù)
當(dāng)開發(fā)一個(gè)應(yīng)用時(shí),必須選擇一種可用的運(yùn)輸層協(xié)議房交,選擇依據(jù)為:
- 可靠性:防止丟包.
- 吞吐量:數(shù)據(jù)傳輸率.
- 定時(shí):數(shù)據(jù)交付的時(shí)間限制(游戲時(shí)延).
- 安全性:運(yùn)輸過程加/解密數(shù)據(jù).
- 因特網(wǎng)提供的運(yùn)輸服務(wù)
- TCP服務(wù):包括面向連接和可靠數(shù)據(jù)傳輸服務(wù).
- 面向連接:對話前TCP讓客戶和服務(wù)器握手彻舰,交換運(yùn)輸層控制信息,在兩進(jìn)程間建立一個(gè)TCP連接候味,雙方進(jìn)程都可在此連接上進(jìn)行報(bào)文收發(fā)淹遵,對話結(jié)束后必須拆除該連接.
- 可靠數(shù)據(jù)傳送:數(shù)據(jù)通過TCP連接在兩套接字間流動(dòng),沒有丟失和冗余.
- TCP協(xié)議還有擁塞控制機(jī)制负溪,出現(xiàn)擁塞時(shí),其會(huì)抑制發(fā)送進(jìn)程.
- SSL(安全套接字層):對TCP的加強(qiáng)济炎,多了SSL獨(dú)有的API川抡,在TCP的API間交流數(shù)據(jù)的前后對數(shù)據(jù)進(jìn)行加解密,提高安全性.
- UDP服務(wù):無連接须尚,并不保證報(bào)文到達(dá)接收進(jìn)程崖堤,也有可能亂序到達(dá).
- 應(yīng)用層協(xié)議
應(yīng)用層協(xié)議只是網(wǎng)絡(luò)應(yīng)用的一部分,有些由RFC文檔定義(HTTP)是公開的耐床,有些則是專用的(Skype).
定義了以下信息:
- 報(bào)文類型:請求或響應(yīng)報(bào)文
- 報(bào)文類型的語法:報(bào)文中字段及其描述方式
- 字段的語義:字段中包含的信息的含義
- 進(jìn)程發(fā)送報(bào)文的時(shí)間和方式密幔,及響應(yīng)規(guī)則
Web和HTTP
- HTTP概述
- HTTP(超文本傳輸協(xié)議)是Web的應(yīng)用層協(xié)議,是Web的核心.
- HTTP由客戶和服務(wù)器兩個(gè)程序?qū)崿F(xiàn)撩轰,二者運(yùn)行在不同的端胯甩,通過交換報(bào)文進(jìn)行會(huì)話.
- Web 頁面(文檔)由對象組成,Web頁面一般有一個(gè)HTML基本文件和幾個(gè)引用對象.
- HTML基本文件通過對象的URL地址引用它.
- URL存放對象的主機(jī)名(www.baidu.com)和路徑名(/tieba/cat.jpg)
- Web瀏覽器(IE9)和Web服務(wù)器堪嫂,分別實(shí)現(xiàn)了HTTP的客戶端和服務(wù)器端偎箫,Web對象存放在服務(wù)器中.
- HTTP使用TCP作為其支撐運(yùn)輸協(xié)議.
- HTTP是無狀態(tài)協(xié)議,不保存關(guān)于客戶的任何信息.
- 持續(xù)/非持續(xù)連接
- 三次握手(三次握手的目的是在瀏覽器和服務(wù)器建立TCP連接.):客戶向服務(wù)器發(fā)送一個(gè)小TCP報(bào)文段皆串,服務(wù)器用其作出確認(rèn)和響應(yīng)淹办,最后客戶向服務(wù)器返回確認(rèn)(二者之間發(fā)送了三次報(bào)文段)
- 非持續(xù)連接:每個(gè)TCP連接只傳輸一個(gè)請求和一個(gè)響應(yīng)報(bào)文;必須為每個(gè)請求的對象建立和維護(hù)一個(gè)全新的連接(服務(wù)器負(fù)擔(dān)大)恶复,且每個(gè)對象經(jīng)受兩倍的RTT時(shí)延(一個(gè)短分組在客戶和服務(wù)器間往返一次的耗時(shí)).
- 持續(xù)連接(默認(rèn)):所有的請求及其響應(yīng)經(jīng)相同的TCP連接發(fā)送.
- HTTP報(bào)文格式
- 請求報(bào)文
請求報(bào)文的通用格式是1個(gè)請求行+4個(gè)首部行+實(shí)體體
GET /somedir/page.html HTTP/1.1 #請求行
Host: www.someschool.edu #對象所在主機(jī)
Connection: close #通信后就關(guān)閉此連接
User-agent: Mozilla/5.0 #用戶的瀏覽器信息
Accept-language:fr #對象的語言版本
- 響應(yīng)報(bào)文
HTTP/1.1 200 OK #狀態(tài)行
Connection: close
Date:Tue,09 Agu 2011 15:44:04 GMT #服務(wù)器發(fā)送報(bào)文的時(shí)間
Server: Apache/2.2.3(Centos) #服務(wù)器類型
Last-Modified: Tue,09 Agu 2011 15:44:04 GMT #對象最后修改時(shí)間
Content-length: 6821 #發(fā)送對象的字節(jié)數(shù)
Content-Type: text/html #對象類型(HTML文本)
(data data data ...) #實(shí)體體(主要部分怜森,包含請求對象)
- Cookie
- 當(dāng)某用戶首次訪問某網(wǎng)站時(shí),服務(wù)器根據(jù)請求報(bào)文產(chǎn)生一個(gè)唯一的識(shí)別碼谤牡,添入響應(yīng)報(bào)文.
- 瀏覽器收到響應(yīng)報(bào)文后將識(shí)別碼添入Cookie 文件副硅,以后每次向該網(wǎng)站發(fā)送請求報(bào)文時(shí),都會(huì)在其中添入該識(shí)別碼翅萤,從而 Cookie 向服務(wù)器標(biāo)識(shí)了該用戶.
- Web緩存(代理服務(wù)器)
- 代理服務(wù)器通常由ISP購買并安裝想许,且要預(yù)先配置其配套的瀏覽器指向它們.
- 瀏覽器向代理服務(wù)器發(fā)送請求報(bào)文,代理服務(wù)器檢查本地是否存儲(chǔ)了該對象的副本,若有則返回流纹,沒有則代理服務(wù)器向初始服務(wù)器請求該對象糜烹,收到響應(yīng)后,代理服務(wù)器先在本地存儲(chǔ)副本漱凝,再響應(yīng)瀏覽器.
- 緩存器使用GET方法發(fā)送請求報(bào)文疮蹦,以保證其對象副本是最新的.
文件傳輸和FTP
- 用戶從FTP服務(wù)器中獲取或存放文件.
- FTP協(xié)議使用兩個(gè)并行的TCP連接來傳輸文件;控制連接用于傳輸控制信息(用戶賬戶茸炒,密碼等)愕乎,數(shù)據(jù)連接傳輸實(shí)際文件.
電子郵件
- 基本過程:用戶A想向B發(fā)郵件,需打開郵件代理程序并提供B的地址壁公,發(fā)送到A的郵件服務(wù)器感论,A的郵件服務(wù)器和B的郵件服務(wù)器聯(lián)系,若不能成功連接則多次嘗試(服務(wù)器可能未開機(jī))紊册,連接成功后比肄,將郵件交付B的郵件服務(wù)器,放至B的存儲(chǔ)空間囊陡,等B下次登錄時(shí)則可見.
- SMTP:SMTP是電子郵件主要的應(yīng)用層協(xié)議芳绩,在兩個(gè)郵件服務(wù)器間運(yùn)行,把文件從發(fā)送服務(wù)器推向接收服務(wù)器.
- 郵件訪問協(xié)議:用戶代理程序不能使用SMTP取回郵件撞反,必須使用某個(gè)郵件訪問協(xié)議.
- POP3
- IMAP:IMAP讓用戶創(chuàng)建遠(yuǎn)程文件夾妥色,并為郵件指派文件夾.
- 基于Web的電子郵件:用戶代理程序就是瀏覽器,用戶與服務(wù)器的通信使用HTTP遏片,但郵件服務(wù)器之間的通信仍使用SMTP.
DNS(域名系統(tǒng))
- DNS是提供將主機(jī)名轉(zhuǎn)換到IP地址的目錄服務(wù)的應(yīng)用層協(xié)議嘹害,運(yùn)行在UDP之上,由一個(gè)分布式數(shù)據(jù)庫服務(wù)器實(shí)現(xiàn).
- DNS分布式服務(wù)器
- 根服務(wù)器
- TLD服務(wù)器(頂級(jí)域):com, org, edu
- 權(quán)威服務(wù)器:amazon.com, baidu.com
- 外部還有本地服務(wù)器吮便,如用戶想查詢tieba.baidu.com吼拥,需先將請求報(bào)文發(fā)送到本地DNS服務(wù)器,本地服務(wù)器請求某個(gè)根DNS服務(wù)器线衫,根服務(wù)器返回com TLD服務(wù)器地址凿可,本地服務(wù)器再請求baidu.com權(quán)威服務(wù)器,其找到tieba.baidu.com的IP地址授账,返回本地服務(wù)器枯跑,本地服務(wù)器將其返回用戶.
3.DNS緩存:在一個(gè)IP地址請求鏈中,某個(gè)DNS服務(wù)器收到地址回答后白热,將其存到自身的本地存儲(chǔ)器敛助,以便下次直接回答;緩存通常兩天一清.
P2P應(yīng)用
- BitTorrent是一種流行的用于文件分發(fā)的P2P協(xié)議.
- DHT(分布式散列表)是分布在大型對等方社區(qū)中的數(shù)據(jù)庫.
TCP套接字編程
對于專用的網(wǎng)絡(luò)應(yīng)用程序屋确,其應(yīng)用層協(xié)議未發(fā)布在某個(gè)RFC中纳击,為此需編寫套接字续扔,首先需決定程序是運(yùn)行在TCP還是UDP上.
- UDPClient.py (代碼采用Python 2.7編寫)
from socket import * #導(dǎo)入套接字模塊
serverName = '128.138.32.126' # 服務(wù)器主機(jī)地址或主機(jī)名
serverPort = 12000 #端口號(hào)
clientSocket = socket(AF_INET,SOCK_DRAM)
#創(chuàng)建用戶套接字
#AF_INET指示底層網(wǎng)絡(luò)使用IPv4地址簇,SOCK_DRAM表示這是一個(gè)UDP套接字
message = raw_input('shuru xiaoxie juzi:')
clientSocket.sendto(message,(serverName,serverPort))
#為報(bào)文附上目的地址焕数,并發(fā)送給套接字
modifiedMessage, serverAddress = clientSocket.recvfrom(2048)
#接收響應(yīng)報(bào)文纱昧,serverAddress 存放其源地址(實(shí)際并不需要)
print modifiedMessage
clientSocket.close()
- UDPServer.py
from socket import *
serverPort = 12000
serverSocket = socket(AF_INET,SOCK_DRAM)
serverSocket.bind(('',serverPort)) #將端口號(hào)與服務(wù)器套接字綁定
print "Fuwuqi zhunBei Haole"
while True: #無限循環(huán)
message,clientAddress = serverSocket.recvfrom(2048) # 接受報(bào)文與對應(yīng)地址
modifiedMessage = message.upper()
serverSocket.sendto(modifiedMessage,clientAddress) #返回客戶
- TCPClent.py
from socket import *
serverName = '128.138.32.126'
serverPort = 12000
clientSocket = socket(AF_INET,SOCK_STREAM)
#SOCK_STREAM表示這是一個(gè)TCP套接字
clientSocket.connect((serverName,serverPort)) #建立TCP連接
message = raw_input('shuru xiaoxie juzi:')
clientSocket.send(sentence)
modifiedSentence = clientSocket.recv(1024)
print 'cong fuWuQi: ', modifiedSentence
clientSocket.close()
- TCPServer.py
from socket import *
serverPort = 12000
serverSocket = socket(AF_INET,SOCK_STREAM)
serverSocket.bind(('',serverPort)) #歡迎套接字,等待敲門
serverSocket.listen(1) #服務(wù)器聆聽客戶的TCP連接請求
print "Fuwuqi zhunBei Haole"
while 1:
connectionSocket,addr = serverSocket.accept()
#用戶敲門后堡赔,在服務(wù)器中創(chuàng)建了一個(gè)此用戶的專用套接字
sentence = connectionSocket.recv(1024)
capitalizedSentence = sentence.upper()
connectionSocket.send(capitalizedSentence)
connectionSocket.close()
(三)運(yùn)輸層
概述
- 運(yùn)輸層協(xié)議為不同主機(jī)上的應(yīng)用進(jìn)程提供邏輯通信识脆,因此進(jìn)程可以依此相互收發(fā)報(bào)文(網(wǎng)絡(luò)層提供的是主機(jī)間的邏輯通信).
- 運(yùn)輸層協(xié)議在端系統(tǒng)中實(shí)現(xiàn),主要有TCP和UDP.
- 將主機(jī)間的交付擴(kuò)展到進(jìn)程間的交付稱為多路復(fù)用和多路分解善已,是UDP和TCP的最基本的任務(wù)灼捂,此外還提供差錯(cuò)檢測服務(wù).
多路復(fù)用與多路分解
- 多路復(fù)用包括在源主機(jī)從不同套接字中收集數(shù)據(jù)塊,并為每個(gè)數(shù)據(jù)塊封裝上首部信息换团,從而生成報(bào)文段悉稠,再將其傳到網(wǎng)絡(luò)層.
- 多路分解是指將運(yùn)輸層報(bào)文段中的數(shù)據(jù)交付到正確的套接字.
- IP地址指向主機(jī),端口號(hào)指向套接字.
- 主機(jī)上的每個(gè)套接字能夠分配一個(gè)端口號(hào)艘包,當(dāng)報(bào)文段到達(dá)主機(jī)時(shí)的猛,運(yùn)輸層檢查報(bào)文段中的目的端口號(hào),并將其定向到相應(yīng)的套接字辑甜,然后報(bào)文段中的數(shù)據(jù)通過套接字進(jìn)入其所連接的進(jìn)程.
- 如果兩個(gè)UDP報(bào)文段的目的IP地址和端口號(hào)相同,而源IP地址或端口號(hào)不同袍冷,則二者進(jìn)入相同的目的套接字磷醋;而對于兩個(gè)TCP報(bào)文段,源IP地址或端口號(hào)不同胡诗,則會(huì)被定向到兩個(gè)不同的套接字.
無連接傳輸:UDP
- UDP報(bào)文段包括報(bào)文和首部邓线,首部有4個(gè)字段,每個(gè)字段有2個(gè)字節(jié). 字段有:源端口號(hào)煌恢,目的端口號(hào)骇陈,長度,檢驗(yàn)和.
- UDP只能提供差錯(cuò)檢測(檢驗(yàn)和)瑰抵,但不能恢復(fù).
可靠數(shù)據(jù)傳輸原理
- 包括差錯(cuò)檢測(檢驗(yàn)和)你雌,接收方反饋(ACK,NAK)二汛,重傳婿崭,分組序號(hào),定時(shí)器(停等)等技術(shù).
- 若不使用停等方式運(yùn)行肴颊,允許發(fā)送方發(fā)送多個(gè)分組而無需等待確認(rèn)氓栈,稱為流水線技術(shù),解決其差錯(cuò)恢復(fù)的方法有回退N步(GBN)和選擇重傳(SR).
面向連接的運(yùn)輸:TCP
- 客戶和服務(wù)器經(jīng)三次握手后建立TCP連接婿着;數(shù)據(jù)在套接字間傳遞時(shí)會(huì)被TCP放入發(fā)送和接收緩存中授瘦;TCP從緩存中取數(shù)據(jù)的數(shù)量受限于MSS(最大報(bào)文段長度).
- TCP報(bào)文段結(jié)構(gòu):首部字段(20字節(jié))= 源醋界、目的端口號(hào)(各16比特)+ 檢驗(yàn)和(16比特)+ 序號(hào)和確認(rèn)號(hào)(各32比特)+接收窗口(16比特)+首部長度(4比特)+選項(xiàng)(變長)+標(biāo)志字段(6比特,ACK提完,RST形纺,SYN,F(xiàn)IN氯葬,PSH挡篓,URG)+緊急數(shù)據(jù)指針(16比特)以及數(shù)據(jù)字段(1字節(jié))
- TCP采用超時(shí)/重傳機(jī)制來處理報(bào)文段的丟失問題.
- TCP的可靠數(shù)據(jù)傳輸服務(wù)確保一個(gè)進(jìn)程從其接收緩存中讀出的數(shù)據(jù)流是無損、無間隔帚称、非冗余和按序的.
- TCP為其應(yīng)用程序提供流量控制服務(wù)官研,即通過速率匹配以消除發(fā)送方使接受方緩存溢出的可能性(不同于擁塞控制機(jī)制)
- TCP連接管理(三次握手)
客戶和服務(wù)器都能終止TCP連接.比如客戶向終止連接,則向服務(wù)器進(jìn)程發(fā)送一個(gè)報(bào)文段. FIN比特=1. 服務(wù)器收到后闯睹,返回確認(rèn)戏羽,之后發(fā)送自己的一份終止報(bào)文段,F(xiàn)IN=1. 最后客戶對其確認(rèn)楼吃,此時(shí)兩臺(tái)主機(jī)用于該連接的所有資源都被釋放了.
- Step 1: 客戶TCP向服務(wù)器TCP發(fā)送SYN報(bào)文段(封裝進(jìn)IP數(shù)據(jù)報(bào))始花,SYN比特=1,隨機(jī)選擇的客戶序號(hào)clientIsn.
- Step 2: 一旦到達(dá)服務(wù)器孩锡,服務(wù)器提取TCP SYN報(bào)文段酷宵,為該TCP分配緩存和變量,并向該客戶發(fā)送允許連接的SYN ACK報(bào)文段躬窜,包含SYN比特=1浇垦,確認(rèn)號(hào) = clientIsn + 1,服務(wù)器初始序號(hào) serverIsn.
- Step 3: 一旦到達(dá)客戶荣挨,客戶也要給該連接分配緩存和變量男韧,同時(shí)客戶向服務(wù)器發(fā)送另一個(gè)報(bào)文段,確認(rèn)號(hào) = clientIsn +1默垄,SYN比特=0此虑,用于對服務(wù)器允許連接的報(bào)文段進(jìn)行確認(rèn);這一報(bào)文段可以攜帶想要傳輸?shù)臄?shù)據(jù).
- SYN洪泛攻擊:攻擊者發(fā)送大量的TCP SYN報(bào)文段而不完成三次握手口锭,使服務(wù)器的連接資源被耗盡朦前;使用SYN cookie防御.
- TCP使用端到端的擁塞機(jī)制.
(四)網(wǎng)絡(luò)層
網(wǎng)絡(luò)層功能和服務(wù)
- 網(wǎng)絡(luò)層的作用是將分組在主機(jī)間傳輸,需要以下兩種網(wǎng)絡(luò)層功能:
- 轉(zhuǎn)發(fā):選擇路由器中的哪條鏈路(由路由選擇算法決定插入路由器中轉(zhuǎn)發(fā)表的值.)
- 路由選擇:選擇哪條路由器.
- 因特網(wǎng)的網(wǎng)絡(luò)層服務(wù)模型是單一的盡力而為服務(wù)鹃操,此外還有ATM CBR和ATM ABR等模型.
- 計(jì)算機(jī)網(wǎng)絡(luò)按提供服務(wù)類型分為虛電路網(wǎng)絡(luò)(連接服務(wù))和數(shù)據(jù)報(bào)網(wǎng)絡(luò)(無連接)况既,因特網(wǎng)是數(shù)據(jù)報(bào)網(wǎng)絡(luò).
網(wǎng)際協(xié)議:因特網(wǎng)中的轉(zhuǎn)發(fā)與轉(zhuǎn)址
- 因特網(wǎng)的網(wǎng)絡(luò)層組件:IP協(xié)議,路由選擇部分组民,ICMP(控制報(bào)文協(xié)議)
- IPv4是第4版IP協(xié)議棒仍,IP地址長度為32比特,允許數(shù)據(jù)報(bào)分片臭胜,以解決鏈路層幀的MTU(最大傳送單元)的限制.
- IPv4編址
- 每臺(tái)主機(jī)和路由器接口都有自己的IP地址莫其,全球唯一(除NAT接口)癞尚,不能任意選擇.
- 三臺(tái)主機(jī)223.1.1.1,223.1.1.2乱陡,223.1.1.3與路由器接口223.1.1.4的前24比特相同浇揩,四者形成一個(gè)子網(wǎng),IP編址為其分配一個(gè)地址223.1.1.0/24憨颠,其中/24稱為子網(wǎng)掩碼.
- 因特網(wǎng)的地址分配策略稱為CIDR(無類別域間路由選擇)
如一個(gè)ISP有兩個(gè)子網(wǎng)胳徽,200.23.16.0/23,200.23.18.0/23爽彤,外界只需要向此ISP發(fā)送前20比特與200.23.16.0/20相同的數(shù)據(jù)報(bào)(地址聚合原則)
注:CIDR之前的策略是分類編址(A养盗,B,C類) - 目的地址是255.255.255.255(IP廣播地址)的報(bào)文將會(huì)交付到同一個(gè)網(wǎng)絡(luò)中的所有主機(jī).
- 子網(wǎng)的地址塊獲取方法
- 從其ISP已獲取的較大的地址塊獲取
- 直接從ICANN請求
- 主機(jī)地址分配:DHCP(動(dòng)態(tài)主機(jī)配置協(xié)議)
網(wǎng)絡(luò)管理員可以配置DHCP适篙,可以選擇某臺(tái)主機(jī)每次聯(lián)網(wǎng)時(shí)得到的是固定的IP還是臨時(shí)分配的IP(每次聯(lián)網(wǎng)可能不同) - NAT(網(wǎng)絡(luò)地址轉(zhuǎn)換)
- NAT路由器對外界的行為如同一個(gè)具有單一IP地址的單一設(shè)備往核;所有離開家庭路由器流向更大網(wǎng)絡(luò)的報(bào)文和所有進(jìn)入家庭網(wǎng)絡(luò)的報(bào)文都擁有同一個(gè)源或目的IP地址.
- NAT使能路由器對外界隱藏了家庭網(wǎng)絡(luò)的細(xì)節(jié).
- 當(dāng)分組進(jìn)入路由器時(shí),路由器上的NAT轉(zhuǎn)換表(包含端口號(hào)和IP地址)決定分組轉(zhuǎn)發(fā)給哪個(gè)內(nèi)部主機(jī).
- ICMP(控制報(bào)文協(xié)議)用于差錯(cuò)報(bào)告和控制擁塞(源抑制報(bào)文)
- 防火墻和IDS(入侵檢測系統(tǒng))
- 防火墻檢查報(bào)文的首部字段嚷节,拒絕可疑的數(shù)據(jù)報(bào)進(jìn)入內(nèi)部網(wǎng)絡(luò)(大多數(shù)路由器即可實(shí)現(xiàn))
- 當(dāng)分組通過IDS時(shí)聂儒,分組的首部字段和有效載荷與其攻擊特征數(shù)據(jù)庫進(jìn)行匹配;如果匹配成功則報(bào)警.
- IPv6
- IPv6將IP地址長度從32擴(kuò)到128比特.
- IPv6不允許在中間路由器上進(jìn)行報(bào)文分片與重新組裝.
- IPv6刪除了首部檢驗(yàn)和功能.
- 使用雙棧方法引入IPv6結(jié)點(diǎn)硫痰,即使用該方法的IPv6結(jié)點(diǎn)還具有完整的IPv4實(shí)現(xiàn).
- IPsec(安全性網(wǎng)絡(luò)層協(xié)議):通信時(shí)兩臺(tái)主機(jī)建立一個(gè)IPsec會(huì)話衩婚,發(fā)送端的運(yùn)輸層向IPsec傳遞一個(gè)報(bào)文段,經(jīng)IPsec加密效斑,并添入安全性字段非春, 發(fā)送到目的主機(jī),IPsec解密后傳給運(yùn)輸層.
路由選擇算法
(五)鏈路層
概述
- 主機(jī)的鏈路層主體是在網(wǎng)卡(網(wǎng)絡(luò)適配器鳍悠,NIC)中實(shí)現(xiàn)税娜,網(wǎng)卡的核心是鏈路層控制器坐搔,其是一個(gè)專用芯片(即鏈路層控制器的許多功能是用硬件實(shí)現(xiàn)的)藏研;網(wǎng)卡現(xiàn)大多被綜合進(jìn)主板.
- 部分鏈路層是在運(yùn)行于主機(jī)CPU中的軟件實(shí)現(xiàn),因此鏈路層是硬件和軟件的結(jié)合體.
- 幀就是封裝了鏈路層信息的數(shù)據(jù)報(bào).
差錯(cuò)檢測和糾錯(cuò)技術(shù)
多路訪問鏈路和協(xié)議
交換局域網(wǎng)
- 鏈路層尋址和ARP(地址解析協(xié)議)
- Mac地址(鏈路層地址):
- 主機(jī)和路由器的適配器(網(wǎng)絡(luò)接口)具有Mac地址(主機(jī)和路由器的連接口并沒有)概行,長度為6字節(jié)(16進(jìn)制表示)蠢挡;
- 沒有兩塊適配器的MAC地址相同(IEEE管理MAC地址空間),但現(xiàn)在有可能用軟件改變MAC地址(一般假定不變)凳忙;
- 鏈路層采用MAC尋址.
- 網(wǎng)口除網(wǎng)絡(luò)層地址外业踏,還需要MAC地址,是因?yàn)榫钟蚓W(wǎng)是為任意網(wǎng)絡(luò)層協(xié)議設(shè)計(jì)的涧卵,而不只用于IP和因特網(wǎng)勤家;另外如果適配器采用網(wǎng)絡(luò)層地址而非MAC地址,網(wǎng)絡(luò)層地址必須存儲(chǔ)在適配器的RAM中柳恐,且每次適配器移動(dòng)或加電時(shí)要重新配置.}
- 當(dāng)適配器A要向適配器B發(fā)送一個(gè)幀伐脖,A將B的MAC地址插入到該幀热幔,并將該幀發(fā)送到局域網(wǎng).
- ARP為同一個(gè)子網(wǎng)上的主機(jī)和路由器網(wǎng)口提供IP地址與MAC地址的轉(zhuǎn)換(ARP表)
- 主機(jī)A想要發(fā)送報(bào)文到子網(wǎng)外的主機(jī)B,首先使用ARP將數(shù)據(jù)報(bào)發(fā)送到子網(wǎng)A的網(wǎng)口讼庇,路由器A使用轉(zhuǎn)發(fā)表將其發(fā)送到路由器B绎巨,對報(bào)文再次封裝成幀,再由ARP轉(zhuǎn)到主機(jī)B.
- 以太網(wǎng):最流行的有線局域網(wǎng)技術(shù)
- 鏈路層交換機(jī):任務(wù)是接入鏈路層幀并將其轉(zhuǎn)發(fā)到出鏈路.
- VLAN(虛擬局域網(wǎng)):只使用物理局域網(wǎng)交換機(jī)蠕啄,通過對其接口劃分組场勤,定義多個(gè)虛擬局域子網(wǎng).