一. 網絡協(xié)議
1. ISO/OSI七層模型
層級 | 功能 | TCP/IP協(xié)議族 | 設備 |
---|---|---|---|
應用層 | 為用戶提供接口笋除,包括文件傳輸斜友,電子郵件,文件服務垃它,虛擬終端等 | TFTP鲜屏,HTTP烹看,SNMP,F(xiàn)TP墙歪,SMTP听系,DNS,RIP虹菲,Telnet | |
表示層 | 數(shù)據格式化靠胜,碼轉換(如ASCII,GBK,JPEG等)蒋得,數(shù)據加密径缅、壓縮 | ||
會話層 | 對應用會話的管理、同步 | ASAP朴艰、TLS霎褐、SSH址愿、ISO 8327 / CCITT X.225、RPC冻璃、NetBIOS响谓、ASP、Winsock省艳、BSD sockets | |
傳輸層 | 可靠與不可靠的傳輸娘纷、傳輸前的錯誤檢測、流控 | TCP跋炕、UDP | |
網絡層 | 定義IP編址赖晶,定義路由功能 | IP,ICMP辐烂,RIP遏插,OSPF,BGP纠修,IGMP | 路由器 |
數(shù)據鏈路層 | 成幀胳嘲、用MAC地址訪問媒介、錯誤檢測與修正 | SLIP扣草,CSLIP胎围,PPP,ARP德召,RARP,MTU | 網橋汽纤、交換器 |
物理層 | 設備之間的比特流的傳輸上岗、物理接口、電器特性等 | ISO2110蕴坪,IEEE802 | 中繼器肴掷、集線器 |
- 下四層負責實際進行數(shù)據的網絡傳輸敬锐,上三層負責為用戶提供服務
2. TCP/IP 四層模型
二、應用層
- 應用層協(xié)議定義了運行在不同端系統(tǒng)上的應用程序進程如何相互傳遞報文呆瞻。
1. HTTP
2. DNS (Domain Name System)
- DNS是一個將將域名和IP地址相互映射的分布式數(shù)據庫台夺,能夠使人更方便地訪問互聯(lián)網。
- DNS協(xié)議運行在UDP之上痴脾,使用53號端口
- DNS查詢過程:
- DNS查詢包括
遞歸查詢
和迭代查詢
颤介。實踐中,查詢通常遵循:從請求主機到本地DNS服務器的查詢是遞歸的赞赖,其余的查詢是迭代的滚朵。
三、運輸層
- 運輸層協(xié)議為運行在不同主機上的應用進程間提供
邏輯通信
前域。運輸層協(xié)議是在端系統(tǒng)中而不是路由器中實現(xiàn)的辕近。 - 運輸層將應用層報文劃分為較小的塊,并為每塊加上一個運輸層首部以生成運輸層
報文段 (segment)
匿垄。 - 在源主機從不同套接字中收集數(shù)據塊移宅,并為每個數(shù)將運輸層報文段中的數(shù)據交付到正確的套接字的工作稱為
多路分解
。數(shù)據塊封裝上首部信息從而生成報文段椿疗,然后將報文段傳遞到網絡層漏峰,所有這些工作稱為多路復用
。 - 網絡層的IP模型不確保報文段的交付变丧,不保證報文段的按序交付芽狗,不保證報文段中數(shù)據的完整性。因此IP被稱為
不可靠服務
痒蓬。
1. UDP
- 進程到進程的數(shù)據交付和
差錯檢查
是兩種最低限度的運輸層服務童擎,也是UDP能夠提供的僅有的兩種服務。 - UDP不能保證一個進程所發(fā)送的數(shù)據能夠完整無缺地到達目的進程攻晒。因此也是一種
不可靠
的服務顾复。 - 使用UDP的應用可以通過在應用程序自身建立可靠機制來實現(xiàn)可靠數(shù)據傳播。
- UDP
差錯檢查
用于確定當UDP報文段從源到達目的地移動時鲁捏,其中的比特是否發(fā)生了改變芯砸。但它對差錯恢復無能為力。只是丟棄受損的報文段或者將受損的報文段交給應用程序并發(fā)出警告给梅。 - UDP相比TCP優(yōu)勢包括:1)關于發(fā)送什么數(shù)據及何時發(fā)送的應用層控制更為精細假丧;2)無需建立連接。避免了建立連接的時延动羽,更快包帚;3)無連接狀態(tài)。不需要在端系統(tǒng)中維護連接狀態(tài)运吓,服務器因此一般能支持更多的活躍客戶渴邦;4)分組首部開銷小疯趟。僅有8字節(jié)開銷。
2. TCP
TCP報文首部
- TCP可以從緩存中取出并放入報文段中的數(shù)據受限于
最大報文長度(MSS)
谋梭。MSS通常根據最初確定的有本地發(fā)送主機發(fā)送的最大鏈路幀長度來設置信峻。TCP通常是將文件劃分成長度為MSS的若干塊。
- 其中瓮床,
序號(seq)
用來解決亂序問題盹舞。確認號(ACK)
用來解決丟包問題。窗口(sliding window)
用來控流
TCP的可靠性
丟失重傳
- TCP把數(shù)據看成一個無結構的纤垂、有序的字節(jié)流矾策。一個報文段的
序號(seq)
是該報文段首字節(jié)的字節(jié)流編號。 - 一條TCP連接的雙方均可隨機地選擇初始序號峭沦。
- 主機A填充進報文段的
確認號
是主機A期望從主機B收到的下一字節(jié)的序號贾虽。 - TCP只確認該流中至第一個丟失字節(jié)為止的字節(jié),所以TCP被稱為提供
累計確認
吼鱼。
- 每次
TCP重傳
時都會將下一次的超時間隔設為先前的兩倍蓬豁。 - 當TCP接收方收到一個序號大于下一個所期望的、按序的報文段時菇肃,說明報文段丟失或亂序地粪。它會對已經接收到的最后一個按序字節(jié)數(shù)據進行重復確認,稱為
冗余ACK
琐谤。如果發(fā)送方收到對相同數(shù)據的3個冗余ACK蟆技,它會執(zhí)行快速重傳
,即在定時器過期之前重傳丟失的報文段斗忌。
流量控制
- TCP通過讓發(fā)送方維護一個
接受窗口
來提供流量控制质礼。接受窗口用于給發(fā)送方指示接收方還有多少可用的緩存空間。 - 主機B有一塊接收緩存织阳,當數(shù)據來到時會先把數(shù)據放到緩存中眶蕉,上層應用等緩存中有數(shù)據時就會到緩存中取數(shù)據。其中
LastByteRead
是接收方從緩存讀取的數(shù)據流的最后一個字節(jié)的編號唧躲。LastByteRcvd
是從網路中到達的并放入接收方緩存的數(shù)據流的最后一個字節(jié)編號造挽。接收窗口rwnd = RcvBuffer - [LastByteRcvd - LastByteRead]
- 主機B通過把當前rwnd放入發(fā)給主機A的報文段接收窗口字段中,主機A通過將未確認的數(shù)據量控制在rwnd內弄痹,即可保證主機B的接收緩存不會溢出饭入。
TCP連接管理
- 三次握手
- 第一次握手 (SYN=1, seq=x)
Client發(fā)送一個特殊的SYN報文段
(標志位SYN置為1)。隨機產生一個初始序號值seq=x肛真,發(fā)送給Server圣拄,Client進入SYN_SENT狀態(tài),等待Server確認毁欣。
- 第二次握手 (SYN=1, ACK=1, seq=y, ack=x+1)
Server收到數(shù)據包后由標志位SYN=1知道Client請求建立連接庇谆,會為該TCP連接分配TCP緩存和變量。并向client發(fā)送允許連接報文段的ACK報文段(ACK標志位設置為1)凭疮,報文段中SYN=1, ack=x+1饭耳,并隨機產生一個服務端的初始序號seq=y。發(fā)送后执解,Server進入SYN_RCVD狀態(tài)寞肖。
- 第三次握手 (ACK=1, ack=y+1,seq=x+1, ack=y+1)
Client收到確認后衰腌,也要給該連接分配緩存和變量新蟆。將發(fā)送一個ACK報文段對服務器的允許連接的報文段進行確認。設置ack=y+1右蕊。因為連接已被建立了SYN被置為0琼稻。Client和Server進入ESTABLISHED狀態(tài),完成三次握手饶囚,隨后Client與Server之間可以開始傳輸數(shù)據了帕翻。以后每個階段中SYN都將被置為0.
- SYN 洪泛攻擊 (SYN flood attack)
- 在第二次握手時,服務器會分配并初始化連接變量和緩存萝风。如果客戶不發(fā)送ACK來完成第三次握手嘀掸,服務器(通常在一分鐘后)將終止該半開連接并回收資源。
SYN 洪泛攻擊
者可能會發(fā)送大量的TCP SYN報文段规惰,而不完成第三次握手導致服務器的連接資源被消耗殆盡睬塌。 -
SYN cookie
可用有效防御這種攻擊:服務器不對SYN報文生成一個半開連接,而是生成一個初始TCP序列號歇万,稱為cookie
揩晴,它是SYN報文段的源和目的IP地址
與端口號
以及僅有該服務器知道的秘密數(shù)
的一個HASH,發(fā)送給客戶端堕花。如果客戶是合法的將返回一個ACK報文段文狱。服務端對其進行驗證,如果合法缘挽,則生成一個具有套接字的全開的連接瞄崇。
- 四次揮手
- 第一次揮手(FIN=1,seq=u):
Client(也可以是server壕曼,后面流程相反)設置seq=u, 發(fā)送一個FIN報文段(FIN標志位設置為1)苏研,Client進入FIN_WAIT_1狀態(tài)。表示client沒有數(shù)據要發(fā)送給server了腮郊。
- 第二次揮手(ACK=1摹蘑,ack=u+1, seq=v):
Server收到FIN后,發(fā)送一個ACK報文段給Client轧飞,ack=u+1衅鹿,并隨機產生一個服務端的初始序號seq=v, Server進入CLOSE_WAIT狀態(tài)撒踪。表示“同意”client關閉請求
- 第三次揮手(FIN=1,ACK=1, ack=u+1, seq=w):
Server發(fā)送一個FIN報文段大渤,用來請求關閉Server到Client的數(shù)據傳送制妄,同時包含ack=u+1,并隨機產生一個服務端的初始序號seq=w泵三,server進入LAST_ACK狀態(tài)耕捞。
- 第四次揮手(ACK=1,ack=w+1):
Client收到FIN后烫幕,Client進入TIME_WAIT狀態(tài)俺抽,接著發(fā)送一個ACK報文段ack=w+1給Server, Server收到后進入CLOSED狀態(tài)较曼。client在等待了某個固定時間(兩個最大段生命周期磷斧,2MSL)之后,沒有收到服務器端的 ACK 诗芜,認為服務器端已經正常關閉連接瞳抓,于是自己也關閉連接,進入 CLOSED 狀態(tài)伏恐。(目的是如果server由于網絡原因沒有收到最后的ACK孩哑,server將會再發(fā)送一個FIN,但若此時client已經CLOSED翠桦,則無法回復横蜒。因此引入了等待2MSL的流程)。自此就完成了四次揮手销凑,主機中的連接資源也被釋放丛晌。
四、網絡層
1. 概述
- 網絡層作用是將分組從一臺發(fā)送主機移動到一臺接收主機斗幼。需要使用兩種重要功能:
轉發(fā)
和路由選擇
澎蛛。 -
轉發(fā)
指當一個分組到達某路由器的一條輸入鏈路時,該路由器必須將該分組移動到適當?shù)妮敵鲦溌吠闪^D發(fā)發(fā)生的時間很短(通常為幾納秒)谋逻,因此通常用硬件來實現(xiàn)。 -
路由選擇
指當分組從發(fā)送方流向接收方時桐经,決定這些分組所采用的路由或路徑的算法毁兆。 - 每臺路由器都有一個
轉發(fā)表
。路由器檢查到達分組首部的一個或多個字段阴挣,進而使用這些首部值在其轉發(fā)表中索引气堕,通過這種方法來轉發(fā)分組。 - 路由器的組成部件包括:輸入端口、交換結構茎芭、輸出端口和路由選擇處理器揖膜。
- 在
輸入端口
和輸出端口
都可以形成分組隊列。排隊的位置和程度將取決于流量負載骗爆、交換結構的相對速率和線路速率次氨。隨著這些隊列的增長,路由器的緩存空間將會耗盡摘投,并且當無內存可用于存儲到達的分組時將會出現(xiàn)丟包
。 - 排隊可選的規(guī)則有:先進先出虹蓄,優(yōu)先權排隊犀呼,循環(huán)和加權公平排隊。
- 轉發(fā)表是由
路由選擇處理器
計算和更新的薇组,使用路由選擇協(xié)議與其他網絡路由器中的路由選擇處理器進行交互外臂,或者轉發(fā)表接收來自遠程CDN控制器的內容。
2. 網際協(xié)議:IPv4律胀、尋址宋光、IPv6及其他
IPv4數(shù)據報
- IPv4數(shù)據報格式
其中生存時間(TTL)
字段用來確保數(shù)據不會永遠在網絡中循環(huán)。每當一臺路由器處理數(shù)據報時炭菌,該字段的值減1罪佳。若TTL字段減為0,則該數(shù)據報必須丟棄黑低。
IPv4編址
- 一個鏈路層幀能承載的最大數(shù)據量叫作
最大傳送單元(MTU)
赘艳。它限制了每個IP數(shù)據報的長度。因此需要將較大的IP數(shù)據報中的數(shù)據分片成多個更小的IP數(shù)據報克握。TCP與UDP都希望從網絡層收到完整的蕾管、未分片的報文。IPv4的數(shù)據報的重新組裝工作會在端系統(tǒng)中完成菩暗。 - 主機與物理鏈路之間的便捷叫作
接口
掰曾。一個IP地址與一個接口相關聯(lián),而不是包括該接口的主機或路由器相關聯(lián)停团。 - 因特網中的每臺主機和路由器上的每個接口都必須有一個全球唯一的
IP地址
(NAT后面的接口除外)旷坦。 - IP地址的最高x比特被稱為IP地址的網絡部分。一個組織通常被分配一塊連續(xù)的地址客蹋,即具有相同網絡部分的一段地址塞蹭。剩余32-x比特用于區(qū)分組織內部設備。
-
子網掩碼 (network mask)
用來指明一個IP地址的哪些位標識的是主機所在的子網讶坯,以及哪些位標識的是主機的位掩碼番电。 - IP地址可分為
跨網絡通信需要經過路由器,同一網絡間的通信不需要。127只有127.0.0.1一個地址可用漱办,代表當前計算機自己这刷。255.255.255.255是廣播地址
。當一臺主機向廣播地址發(fā)出數(shù)據報時娩井,該報文會交付給網絡中的所有主機暇屋。
無類別域間路由選擇(CIDR)
將子網的概念一般化了,不局限于A洞辣、B咐刨、C類,x可以是任意位數(shù)扬霜。IP地址由
因特網名字和編號分配機構(ICANN)
管理定鸟。一個組織網絡管理員從一個ISP獲取一組地址用于一個組織的子網內。該組織系統(tǒng)管理員通常手動配置路由器中的IP地址著瓶,再通過配置動態(tài)主機配置協(xié)議(DHCP)
以使某給定主機每次與網絡連接時能得到一個相同的或者臨時的IP地址
联予。DHCP還允許一臺主機得知其他信息,如它的子網掩碼材原,第一條路由器地址(常稱為默認網關
)與它本地DNS服務器的地址沸久。對于一臺新到達主機,它會經過 1)DHCP服務器發(fā)現(xiàn):主機發(fā)送
DHCP發(fā)現(xiàn)報文
到廣播地址余蟹;2)DHCP服務器提供:子網中存在的一個或多個DHCP服務器通過廣播發(fā)出DHCP提供報文
卷胯,報文包括所收到的發(fā)現(xiàn)報文的事務IP、自己的IP地址客叉、子網掩碼和IP地址租用期(通常為幾個小時或幾天诵竭;)3)DHCP請求:客戶從多個服務提供者中選擇一個,并向其發(fā)送DHCP請求報文
兼搏;4)DHCP ACK:服務器用ACK報文進行響應NAT路由器
對外界的行為如同一個具有單一IP地址的單一設備卵慰。使其所有流出報文的源IP地址都是其IP地址。NAT路由器能對外界隱藏家庭網絡的細節(jié)佛呻。位于家庭網絡等專用網絡
中的主機裳朋,其地址僅對該網絡中的設備才有意義。NAT路由器內部維護了一張
NAT轉換表
吓著,表項中包含了端口號及其IP地址鲤嫡。因為端口號字段為16比特,NAT協(xié)議可支持60000個并行使用路由器廣域網一側單個IP地址的連接绑莺。
IPv6數(shù)據報
- IPv6將IP地址增加到128比特暖眼。
- 引入
任播地址
,可使數(shù)據報交付給一組主機中的任意一個纺裁。 - IPv6不允許在中間路由器進行分片和重新組裝诫肠,只能在源與目的端執(zhí)行司澎。
3. 路由選擇算法
五、鏈路層
1. 概述
- 鏈路層能夠提供的可能服務包括:成幀栋豫,鏈路接入挤安,可靠交付,差錯檢測和糾正丧鸯。
- 鏈路層的主體部分是在
網絡適配器
也稱為網絡接口卡(NIC)
中實現(xiàn)的蛤铜。位于NIC核心的是鏈路層控制器
,它是一個實現(xiàn)了許多鏈路層服務(成幀丛肢,鏈路接入围肥,差錯檢測等)的專用芯片。 - 在發(fā)送節(jié)點蜂怎,為了保護比特免受差錯虐先,使用
差錯檢測和糾正比特
來增強數(shù)據。差錯檢測方式包括奇偶校驗位
派敷,循環(huán)冗余檢測編碼(CRC)
等。
2. 多路訪問鏈路和協(xié)議
- 網絡鏈路有:
點對點鏈路
和廣播鏈路
兩種撰洗。廣播鏈路能夠讓多個發(fā)送和接收節(jié)點都連接到相同的篮愉、單一的、共享的廣播信道上差导。 - 當多個節(jié)點同時傳輸幀试躏,所有節(jié)點會同時接收到多個幀,即發(fā)生
碰撞
设褐,導致沒有一個節(jié)點能夠有效地獲得任何傳輸?shù)膸?code>多路訪問協(xié)議用來規(guī)范協(xié)調多個發(fā)送和接收節(jié)點對同一個廣播信道的訪問颠蕴。 - 多路訪問協(xié)議包括3種類型:
信道劃分協(xié)議
,隨機接入協(xié)議
和輪流協(xié)議
助析。 - 信道劃分協(xié)議某種方式對信道進行劃分犀被,包括:
時分多路復用(TDM)
,頻分多路復用(FDM)
和碼分多址(CDMA)
- 隨機接入協(xié)議中外冀,一個傳輸節(jié)點總是以信道的全部速率進行發(fā)送寡键,當有碰撞時,涉及碰撞的每個節(jié)點等待一個隨機時延后反復地重發(fā)它的幀雪隧,到該幀無碰撞地通過為止西轩。
3. 交換局域網
- 主機或路由器的
網絡適配器
具有鏈路層地址。因此脑沿,具有多個NIC的主機或路由器有與之相關聯(lián)的多個鏈路層地址藕畔。鏈路層地址又稱為LAN 地址
、物理地址
和MAC地址
庄拇。 - MAC地址長度為6字節(jié)注服,共有2^48個可能的MAC地址。當某適配器要向某些目的適配器發(fā)送一個幀時,發(fā)送適配器將目的適配器的MAC地址插入到該幀中祠汇,并將該幀發(fā)送到局域網上仍秤。當適配器接受到一個幀時,將檢查給幀中的目的MAC地址是否與它自己的MAC地址匹配可很。
-
地址解析協(xié)議(ARP)
用于將IP地址和MAC地址進行轉換诗力。每臺主機或路由器在其內存中具有一個ARP表,這張表包含IP地址到MAC地址的映射關系我抠。ARP只為同一個子網上的主機和路由器接口解析IP地址苇本。
4. 以太網
- 以太網幾乎占領著現(xiàn)有的有線局域網市場。
- 位于以太網星型拓撲中心的是
交換機
菜拓。交換機的任務是接收入鏈路層幀并將它們轉發(fā)到出鏈路瓣窄。 - 交換機的
過濾
和轉發(fā)
借助于交換機表
完成。過濾是決定一個幀應該轉發(fā)到某個接口還是丟棄纳鼎。轉發(fā)是決定一個幀應該被導向哪個接口俺夕。 - 交換機的交換機表是
自學習
形成的。 - 支持
虛擬局域網(VLAN)
的交換機允許經一個單一的物理局域網基礎設施定義多個虛擬局域網贱鄙。在一個VLAN內的主機彼此通信劝贸,仿佛它們(并沒有其他主機)與交換機連接。 - 在一個基于端口的VLAN中逗宁,交換機的端口由網絡管理員劃分為組映九。每個組構成一個VLAN,在每個VLAN中的端口形成一個廣播域瞎颗。
- 兩個VLAN可通過與一臺外部的路由器相連件甥,進行相互間的通信。還有一種方法是通過
VLAN干線連接(VLAN trunking)
5. 鏈路虛擬化
- 一個
多協(xié)議標簽交換(MPLS)
加強的幀在第二層首部和第三層首部間增加了一個MPLS首部哼拔。MPLS加強的幀只能在兩個均為MPLS使能的路由器之間發(fā)送引有。這種路由器也被稱為標簽交換路由器
。因為它通過在其轉發(fā)表中查找MPLS標簽管挟,立即將數(shù)據報傳遞給適當?shù)妮敵鼋涌趤磙D發(fā)MPLS幀轿曙。因此MPLS使能的路由器不需要提取目的IP地址和在轉發(fā)表中執(zhí)行最長前綴匹配的查找。 - MPLS提供了新的流量管理能力僻孝,網絡運行者能夠超越普通的IP路由選擇导帝,迫使某些流量沿著一條路徑朝著某給定的目的地引導,并且朝著相同目的地的其他流量沿著另一條路徑流動穿铆。
- MPLS被用于實現(xiàn)
虛擬專用網(VPN)
您单。在為用戶實現(xiàn)一個VPNR的過程中,ISP使用它的MPLS使能網絡將用戶的各種網絡連接在一起荞雏。MBPS能被用于將資源和由用戶的VPN使用的尋址方式相隔離虐秦,其他用戶利用該VPN跨越該ISP網絡