|
前言 作為一名程序員, 不可能不與網(wǎng)絡(luò)打交道. 現(xiàn)在我們的手機, 電腦, 不夸張地說, 離開了網(wǎng)絡(luò)就是一塊'廢鐵', 它們的作用將大打折扣.. 本文的作用呢, 主要是針對不是非網(wǎng)絡(luò)專業(yè)開發(fā)的人員準(zhǔn)備的, 以'最短的時間, 了解計網(wǎng)最多的知識'為前提起筆.
概述先來了解下各種我們知道, 但是不太了解的專業(yè)名詞的意思 因特網(wǎng)因特網(wǎng) 因特網(wǎng)是當(dāng)今世界上最大的網(wǎng)絡(luò), 是'網(wǎng)絡(luò)的網(wǎng)絡(luò)'. 即因特網(wǎng)是所有網(wǎng)絡(luò)互連起來的一個巨型網(wǎng)絡(luò). 因特網(wǎng)的組成 :
以太網(wǎng)以太網(wǎng)是現(xiàn)在最常用的局域網(wǎng)通信協(xié)議, 以太網(wǎng)上傳輸?shù)氖荕AC幀. 由于以太網(wǎng)同一時間只允許一臺計算機發(fā)送數(shù)據(jù), 所以必須有一套檢測機制, 那就是CSMA/CD協(xié)議 :
OSI開放系統(tǒng)互連基本參考模型, 只要遵守這個OSI標(biāo)準(zhǔn), 任何兩個系統(tǒng)都能進行通信. OSI是七層協(xié)議體系結(jié)構(gòu), 而TCP/IP是一個四層協(xié)議體系結(jié)構(gòu), 于是我們采取折中的方法, 學(xué)習(xí)計算機網(wǎng)絡(luò)原理的時候往往用的是五層協(xié)議的體系結(jié)構(gòu) : 物理層, 數(shù)據(jù)鏈路層, 網(wǎng)絡(luò)層, 傳輸層和應(yīng)用層 協(xié)議體系結(jié)構(gòu) 物理層計算機的世界里只有0和1, 正如你現(xiàn)在所看這篇文章的文字, 存儲在計算機中也是一大串0和1的組合. 但是這些數(shù)字不能在真實的物理介質(zhì)中傳輸?shù)? 而需要把它轉(zhuǎn)換為光信號或者電信號, 所以這一層負責(zé)將這些比特流(0101)與光電信號進行轉(zhuǎn)換. 如果沒有物理層, 那么也就不存在互聯(lián)網(wǎng), 不存在數(shù)據(jù)的共享, 因為數(shù)據(jù)無法在網(wǎng)絡(luò)中流動. 數(shù)據(jù)鏈路層數(shù)據(jù)在這一層不再是以比特流的形式傳輸, 而是分割成一個一個的幀再進行傳輸. MAC地址又稱計算機的硬件地址, 被固化在適配器(網(wǎng)卡)ROM上的占48位的地址. MAC地址可以用來唯一區(qū)別一臺計算機, 因為它在全球是獨一無二的 分組交換由于數(shù)據(jù)在這次曾要被分割成一個一個的幀, 由于不同的鏈路規(guī)定了不同的最大幀長, 即MTU(最大傳輸單元), 凡是超出這個MTU的幀都必須被分塊. 例如一臺貨車一次能運輸5噸的貨物, 而有條公路限載重2噸, 那么你只好分3次運輸. 網(wǎng)橋網(wǎng)橋工作在數(shù)據(jù)鏈路層, 根據(jù)MAC幀的目的地址對收到的幀進行轉(zhuǎn)發(fā)和過濾. 以太網(wǎng)交換機實際上就是一個多接口的網(wǎng)橋, 以太網(wǎng)交換機的每個接口都直接與一個單個主機或另一個集線器相連, 可以很容易實現(xiàn)VLAN(虛擬局域網(wǎng)) 以太網(wǎng)的MAC幀MAC幀的格式為 : MAC幀格式
網(wǎng)絡(luò)層如果只有數(shù)據(jù)鏈路層沒有網(wǎng)絡(luò)層, 數(shù)據(jù)就只能在同一條鏈路上傳輸, 不能跨鏈路傳輸. 有了網(wǎng)絡(luò)層, 數(shù)據(jù)便能跨域不同的數(shù)據(jù)鏈路傳輸. IP地址IP地址又稱為軟件地址, 存儲在計算機的存儲器上, IPv4地址為32位, IPv6地址為128位 IP地址和MAC地址
IP地址分類IP地址 = {<網(wǎng)絡(luò)號>, <主機號>} A類地址 : 0.0.0.0 ~ 127.0.0.0 劃分子網(wǎng)之后的IP地址IP地址 = {<網(wǎng)絡(luò)號>, <子網(wǎng)號>, <主機號>} 例如某單位擁有一個B類IP地址, 145.13.0.0, 但凡目的地址為145.13.x.x的數(shù)據(jù)報都會被送到這個網(wǎng)絡(luò)上的路由器R. 內(nèi)部劃分子網(wǎng)后變成
: 子網(wǎng)掩碼一般由一串1和一串0組成, 不管網(wǎng)絡(luò)有沒有劃分子網(wǎng), 將子網(wǎng)掩碼和IP地址做按位與運算即可得出網(wǎng)絡(luò)地址. 所有的網(wǎng)絡(luò)都必須使用子網(wǎng)掩碼, 同時在路由表中必須有子網(wǎng)掩碼這一欄. 如果一個網(wǎng)絡(luò)不劃分子網(wǎng),
那么該網(wǎng)絡(luò)的子網(wǎng)掩碼就是默認(rèn)的子網(wǎng)掩碼. 盡管劃分子網(wǎng)增加了靈活性, 但是卻減少了能夠連接在網(wǎng)絡(luò)上的主機總數(shù). 構(gòu)成超網(wǎng)的IP地址IP地址 = {<網(wǎng)絡(luò)前綴>, <主機號>} 使用網(wǎng)絡(luò)前綴, 無分類域間路由選擇CIDR 例如, 128.14.35.7/20, 意思是前20位為網(wǎng)絡(luò)前綴, 后12位為主機號. 另外, CIDR把網(wǎng)絡(luò)前綴相同的連續(xù)的IP地址組成一個'CIDR地址塊' 地址掩碼 : CIDR使用32位的地址掩碼, 類似于子網(wǎng)掩碼. IP數(shù)據(jù)報在網(wǎng)絡(luò)層, 數(shù)據(jù)是以IP數(shù)據(jù)報(IP分組)的形式傳輸?shù)?/p> IP數(shù)據(jù)報的格式 首部前20字節(jié)為固定長度, 是所有IP數(shù)據(jù)報必備的. 后4字節(jié)是可選字段, 其長度可變. IP數(shù)據(jù)報首部固定的字段分析 :
IP層轉(zhuǎn)發(fā)分組的流程每個路由器內(nèi)部都維護一個路由表, 路由表包含以下內(nèi)容( 使用子網(wǎng)時分組轉(zhuǎn)發(fā)時, 路由表必須包含以下三項內(nèi)容: 特定主機路由 : 對特定的目的地址指明一個路由 默認(rèn)路由 : 不知道分組該發(fā)給哪個路由器時就發(fā)給默認(rèn)路由. 當(dāng)一個網(wǎng)絡(luò)只有很少的對外連接時使用默認(rèn)路由非常合適. 路由器的分組轉(zhuǎn)發(fā)算法
虛擬專用網(wǎng)VPN因特網(wǎng)中的所有路由器對該目的地址是專用地址的數(shù)據(jù)報一律不轉(zhuǎn)發(fā), 下面有3種專用地址(虛擬IP地址)
假設(shè)現(xiàn)在公司A有一個部門在廣州和另一個在上海, 而他們在當(dāng)?shù)囟加凶约旱膶S镁W(wǎng). 那么怎么將這兩個專用網(wǎng)連接起來呢?
網(wǎng)絡(luò)地址轉(zhuǎn)換NAT多個專用網(wǎng)內(nèi)部的主機公用一個NAT路由器的IP地址, 在主機發(fā)送和接收IP數(shù)據(jù)報時必須先通過NAT路由器進行網(wǎng)絡(luò)地址轉(zhuǎn)換. NAT路由器的工作原理 不僅如此, NAT還能使用端口號, 搖身一變成為網(wǎng)絡(luò)地址和端口轉(zhuǎn)換NAPT ARP協(xié)議ARP是解決同一個局域網(wǎng)上的主機或路由器的IP地址和MAC地址的映射問題, 即 IP地址 -> ARP -> MAC地址 每一個主機都有一個ARP高速緩存, 里面有本局域網(wǎng)上的各主機和路由器的IP地址到MAC地址的映射表. 以下是ARP的工作原理 : ARP的工作原理.jpg 那如果是跨網(wǎng)絡(luò)使用ARP呢?
傳輸層這一層是重中之重, 因為數(shù)據(jù)鏈路層, 網(wǎng)絡(luò)層這兩層的數(shù)據(jù)傳輸都是不可靠的, 盡最大能力交付的. 什么意思的? 就是它們不負責(zé)提交給你的就是正確的數(shù)據(jù). 然而這一層的TCP協(xié)議將要提供可靠傳輸 這一層主要重點是兩個協(xié)議 : UDP 和 TCP 用戶數(shù)據(jù)報協(xié)議UDPUDP主要特點 :
UDP首部UDP首部格式
傳輸控制協(xié)議TCPTCP主要特點 :
TCP的工作流程TCP字節(jié)流 TCP的連接TCP連接的端點叫套接字(socket)
每一條TCP連接唯一地被通信兩端的兩個端點(socket)所確定. 即 : TCP報文段的首部TCP報文段的首部
窗口TCP中很重要的一個概念, 那就是窗口(發(fā)送窗口和接收窗口) 窗口 由于停止等待協(xié)議非常低效, 于是衍生出窗口這一概念. 上圖為發(fā)送方維持的發(fā)送窗口, 位于發(fā)送窗口的5個分組都可以連續(xù)發(fā)送出去而不需要等待對方的確認(rèn). 每收到一個確認(rèn), 就把發(fā)送窗口前移一個分組的位置. 這大大提高了信道利用率! 接收方不必發(fā)送每個分組的確認(rèn)報文, 而是采用累積確認(rèn)的方式. 也就是說, 對按序到達的最后一個分組發(fā)送確認(rèn)報文. 超時重傳如果發(fā)送方等待一段時間后, 還是沒收到 ACK 確認(rèn)報文, 就會啟動超時重傳. 這個等待的時間為重傳超時時間(RTO, Retransmission TimeOut). 然而, RTO 的值不是固定的, 這個時間總是略大于連接往返時間(RTT,Round Trip Time). 假設(shè)報文發(fā)送過去需要5秒, 對方收到后發(fā)送確認(rèn)報文回來也需要5秒, 那么RTT就為10秒, 那這RTO就要比10秒要略大一些. 那么超過RTO之后還沒有收到確認(rèn)報文就認(rèn)為報文丟失了, 就要重傳. 流量控制利用滑動窗口和報文段的發(fā)送時機來進行流量控制. 擁塞控制發(fā)送方維持一個擁塞窗口cwnd, 發(fā)送窗口 = 擁塞窗口.
- 當(dāng)cwnd < ssthresh, 使用慢開始算法
- 當(dāng)cwnd > ssthresh, 使用擁塞避免算法
- 當(dāng)cwnd = ssthresh, 隨意
擁塞控制 只要判斷網(wǎng)絡(luò)出現(xiàn)擁塞, 把ssthresh設(shè)為當(dāng)前發(fā)送擁塞窗口的一半(不能小于2), 并把cwnd設(shè)為1, 重新執(zhí)行慢開始算法. 除了慢開始和擁塞避免算法外, 還有一組快重傳和快恢復(fù)算法 :
TCP三次握手TCP三次握手建立連接和四次揮手?jǐn)嚅_連接是面試愛問的知識點.
TCP三次握手
更加接地氣的解釋就是 : A打電話給B 第一次握手 : 你好, 我是A, 你能聽到我說話嗎
第二次握手 : 聽到了, 我是B, 你能聽到我說話嗎
第三次握手 : 聽到了, 我們可以開始聊天了
三次握手其實就是為了檢測雙方的發(fā)送和接收能力是否正常, 你說呢?TCP四次揮手
TCP四次揮手
更加接地氣的解釋 : 第一次揮手 : A告訴B, 我沒數(shù)據(jù)發(fā)了, 準(zhǔn)備關(guān)閉連接了, 你要發(fā)送數(shù)據(jù)嗎
第二次揮手 : B發(fā)送最后的數(shù)據(jù)
第三次揮手 : B告訴A, 我也要關(guān)閉連接了
第四次揮手 : A告訴B你可以關(guān)閉了, 我這邊也關(guān)閉了應(yīng)用層應(yīng)用層協(xié)議最著名的就是HTTP, FTP了, 還有一個重要的DNS 域名系統(tǒng)(DNS, Domain Name System)DNS 能將域名(例如, www.jianshu.com)解析成IP地址. 域名服務(wù)器分類
DNS查詢
DNS查詢
DNS查詢例子 : 域名為x.tom.com的主機想知道y.jerry.com的IP地址
URLURL的格式 : 使用HTTP協(xié)議的URL : HTTP協(xié)議HTTP是面向事務(wù)的, 即它傳輸?shù)臄?shù)據(jù)是一個整體, 要么全部收到, 要么全部收不到.
萬維網(wǎng)的工作過程 每一次HTTP請求就需要建立一次TCP連接和釋放TCP連接. HTTP是無連接, 無狀態(tài)的. 每一次請求都是作為一次新請求. HTTP/1.0 缺點 : 無連接, 每一次請求都要重新建立TCP連接, 所以每一次HTTP請求都要花費2倍RTT時間(一次TCP請求, 一次HTTP請求) HTTP/1.1 : 使用持續(xù)連接, 即保持TCP連接一段時間. HTTP/1.1持續(xù)工作的兩種工作方式 : 非流水線方式和流水線方式
非流水線方式 : 收到一個請求的響應(yīng)再發(fā)下一個請求, 效率低, 浪費資源
流水線方式 : 能夠同時發(fā)送多個請求, 效率高HTTP的GET和POSTGET 請求通常用于查詢、獲取數(shù)據(jù),而 POST 請求則用于發(fā)送數(shù)據(jù) ps : POST請求的數(shù)據(jù)也是以明文的形式存放在請求頭中, 因此也不安全Cookie萬維網(wǎng)使用Cookie來跟蹤用戶, 表示HTTP服務(wù)器和用戶之間傳遞的狀態(tài)信息. Cookie工作原理 : 1. 用戶瀏覽某網(wǎng)站, 該網(wǎng)站的服務(wù)器為用戶產(chǎn)生一個唯一的識別碼, 并以此為索引在服務(wù)器后端數(shù)據(jù)庫中產(chǎn)生一個項目
2. 返回給用戶的HTTP響應(yīng)報文中添加一條 'Set-cookie', 值為該識別碼, 如123
3. 用戶的瀏覽器將該cookie保存起來, 在用于繼續(xù)瀏覽該網(wǎng)站時發(fā)送的每一個HTTP請求都會有一行 Cookie: 123
于是, 這個網(wǎng)站就知道Cookie為123的這個用戶做了什么, 為這個用戶維護一個獨立的列表(如購物車)當(dāng)然, Cookie是把雙刃劍, 方便的同時也帶有危險性, 例如隱私泄露等, 用戶可以自行決定是否使用Cookie SessionCookie是保存在客戶端上的, 而Session是保存在服務(wù)器中. 當(dāng)服務(wù)器收到用戶發(fā)出的Cookie時, 會根據(jù)Cookie中的SessionID來查找對應(yīng)的Session, 如沒有則會生成一個新的SessionID返回給用戶 總而言之, Cookie和Session就是同一樣?xùn)|西存放地方不同而已. HTTPS
HTTPS協(xié)議 HTTPS協(xié)議在HTTP協(xié)議的基礎(chǔ)上, 在HTTP和TCP中間加入了一層SSL/TLS加密層, 解決了HTTP不安全的問題: 冒充, 篡改, 竊聽三大風(fēng)險. 對HTTPS是如何做到安全, 加密等有興趣的可以參考以下文章 《SSL/TLS協(xié)議運行機制的概述》 作者:Jerry4me 授權(quán)轉(zhuǎn)載 |
|
|