激活、維持、關閉通訊端點之間的機械特性、電氣特性、功能特性以及過程特性。該層爲上層協議提供了一個傳輸數據的可靠的物理媒體。簡單的說,物理層確保原始的數據可在各類物理媒體上傳輸。物理層記住兩個重要的設備名稱,中繼器(Repeater,也叫放大器)和集線器。html
2)數據鏈路層(Data Link Layer)linux
數據鏈路層在物理層提供的服務的基礎上向網絡層提供服務,其最基本的服務是將源自網絡層來的數據可靠地傳輸到相鄰節點的目標機網絡層。爲達到這一目的,數據鏈路必須具有一系列相應的功能,主要有:如何將數據組合成數據塊,在數據鏈路層中稱這種數據塊爲幀(frame),幀是數據鏈路層的傳送單位;如何控制幀在物理信道上的傳輸,包括如何處理傳輸差錯,如何調節發送速率以使與接收方相匹配;以及在兩個網絡實體之間提供數據鏈路通路的創建、維持和釋放的管理。數據鏈路層在不可靠的物理介質上提供可靠的傳輸。該層的做用包括:物理地址尋址、數據的成幀、流量控制、數據的檢錯、重發等。面試
有關數據鏈路層的重要知識點:算法
1> 數據鏈路層爲網絡層提供可靠的數據傳輸;編程
2> 基本數據單位爲幀;瀏覽器
3> 主要的協議:以太網協議;緩存
4> 兩個重要設備名稱:網橋和交換機。安全
3)網絡層(Network Layer)bash
網絡層的目的是實現兩個主機系統之間的數據透明傳送,具體功能包括尋址和路由選擇、鏈接的創建、保持和終止等。它提供的服務使傳輸層不須要了解網絡中的數據傳輸和交換技術。若是您想用盡可能少的詞來記住網絡層,那就是「路徑選擇、路由及邏輯尋址」。服務器
網絡層中涉及衆多的協議,其中包括最重要的協議,也是TCP/IP的核心協議——IP協議。IP協議很是簡單,僅僅提供不可靠、無鏈接的傳送服務。IP協議的主要功能有:無鏈接數據報傳輸、數據報路由選擇和差錯控制。與IP協議配套使用實現其功能的還有地址解析協議ARP、逆地址解析協議RARP、因特網報文協議ICMP、因特網組管理協議IGMP。具體的協議咱們會在接下來的部分進行總結,有關網絡層的重點爲:
1> 網絡層負責對子網間的數據包進行路由選擇。此外,網絡層還能夠實現擁塞控制、網際互連等功能;
2> 基本數據單位爲IP數據報;
3> 包含的主要協議:
IP協議(Internet Protocol,因特網互聯協議);
ICMP協議(Internet Control Message Protocol,因特網控制報文協議);
ARP協議(Address Resolution Protocol,地址解析協議)可當作是跨網絡層和鏈路層的協議;
RARP協議(Reverse Address Resolution Protocol,逆地址解析協議)。
4> 重要的設備:路由器。
4)傳輸層(Transport Layer)
第一個端到端,即主機到主機的層次。傳輸層負責將上層數據分段並提供端到端的、可靠的或不可靠的傳輸。此外,傳輸層還要處理端到端的差錯控制和流量控制問題。
5)會話層
會話層管理主機之間的會話進程,即負責創建、管理、終止進程之間的會話。會話層還利用在數據中插入校驗點來實現數據的同步。
6)表示層
表示層對上層數據或信息進行變換以保證一個主機應用層信息能夠被另外一個主機的應用程序理解。表示層的數據轉換包括數據的加密、壓縮、格式轉換等。
7)應用層
是最靠近用戶的OSI層,爲用戶的應用程序提供網絡服務的接口。將用戶的操做經過應用程序轉換成爲服務,並匹配一個相應的服務協議發送給傳輸層。
注:咱們在傳輸數據時,能夠只使用(傳輸層)TCP/IP協議,可是那樣的話,若是沒有應用層,便沒法識別數據內容,若是想要使傳輸的數據有意義,則必須使用到應用層協議。
會話層、表示層和應用層重點:
1> 數據傳輸基本單位爲報文;
2> 包含的主要協議:FTP(文件傳送協議)、Telnet(遠程登陸協議)、DNS(域名解析協議)、SMTP(郵件傳送協議),POP3協議(郵局協議),HTTP協議(Hyper Text Transfer Protocol)。
1)網絡地址
IP地址由網絡號(包括子網號)和主機號組成,網絡地址的主機號爲全0,網絡地址表明着整個網絡。
2)廣播地址
廣播地址一般稱爲直接廣播地址,是爲了區分受限廣播地址。
廣播地址與網絡地址的主機號正好相反,廣播地址中,主機號爲全1。當向某個網絡的廣播地址發送消息時,該網絡內的全部主機都能收到該廣播消息。
3)組播地址
D類地址就是組播地址。
先回憶下A,B,C,D類地址吧:
A類地址以0開頭,第一個字節做爲網絡號,地址範圍爲:0.0.0.0~127.255.255.255;(modified @2016.05.31)
B類地址以10開頭,前兩個字節做爲網絡號,地址範圍是:128.0.0.0~191.255.255.255;
C類地址以110開頭,前三個字節做爲網絡號,地址範圍是:192.0.0.0~223.255.255.255。
D類地址以1110開頭,地址範圍是224.0.0.0~239.255.255.255,D類地址做爲組播地址(一對多的通訊);
E類地址以1111開頭,地址範圍是240.0.0.0~255.255.255.255,E類地址爲保留地址,供之後使用。
注:只有A,B,C有網絡號和主機號之分,D類地址和E類地址沒有劃分網絡號和主機號。
4)255.255.255.255
該IP地址指的是受限的廣播地址。受限廣播地址與通常廣播地址(直接廣播地址)的區別在於,受限廣播地址只能用於本地網絡,路由器不會轉發以受限廣播地址爲目的地址的分組;通常廣播地址既可在本地廣播,也可跨網段廣播。例如:主機192.168.1.1/30上的直接廣播數據包後,另一個網段192.168.1.5/30也能收到該數據報;若發送受限廣播數據報,則不能收到。
注:通常的廣播地址(直接廣播地址)可以經過某些路由器(固然不是全部的路由器),而受限的廣播地址不能經過路由器。
5)0.0.0.0
經常使用於尋找本身的IP地址,例如在咱們的RARP,BOOTP和DHCP協議中,若某個未知IP地址的無盤機想要知道本身的IP地址,它就以255.255.255.255爲目的地址,向本地範圍(具體而言是被各個路由器屏蔽的範圍內)的服務器發送IP請求分組。
6)迴環地址
127.0.0.0/8被用做迴環地址,迴環地址表示本機的地址,經常使用於對本機的測試,用的最多的是127.0.0.1。
7)A、B、C類私有地址
私有地址(private address)也叫專用地址,它們不會在全球使用,只具備本地意義。
A類私有地址:10.0.0.0/8,範圍是:10.0.0.0~10.255.255.255
B類私有地址:172.16.0.0/12,範圍是:172.16.0.0~172.31.255.255
C類私有地址:192.168.0.0/16,範圍是:192.168.0.0~192.168.255.255
隨着互連網應用的不斷擴大,原先的IPv4的弊端也逐漸暴露出來,即網絡號佔位太多,而主機號位太少,因此其能提供的主機地址也愈來愈稀缺,目前除了使用NAT在企業內部利用保留地址自行分配之外,一般都對一個高類別的IP地址進行再劃分,以造成多個子網,提供給不一樣規模的用戶羣使用。
這裏主要是爲了在網絡分段狀況下有效地利用IP地址,經過對主機號的高位部分取做爲子網號,從一般的網絡位界限中擴展或壓縮子網掩碼,用來建立某類地址的更多子網。但建立更多的子網時,在每一個子網上的可用主機地址數目會比原先減小。
什麼是子網掩碼?
子網掩碼是標誌兩個IP地址是否同屬於一個子網的,也是32位二進制地址,其每個爲1表明該位是網絡位,爲0表明主機位。它和IP地址同樣也是使用點式十進制來表示的。若是兩個IP地址在子網掩碼的按位與的計算下所得結果相同,即代表它們共屬於同一子網中。
在計算子網掩碼時,咱們要注意IP地址中的保留地址,即「 0」地址和廣播地址,它們是指主機地址或網絡地址全爲「 0」或「 1」時的IP地址,它們表明着本網絡地址和廣播地址,通常是不能被計算在內的。
子網掩碼的計算:
對於無須再劃分紅子網的IP地址來講,其子網掩碼很是簡單,即按照其定義便可寫出:如某B類IP地址爲 10.12.3.0,無須再分割子網,則該IP地址的子網掩碼255.255.0.0。若是它是一個C類地址,則其子網掩碼爲 255.255.255.0。其它類推,再也不詳述。下面咱們關鍵要介紹的是一個IP地址,還須要將其高位主機位再做爲劃分出的子網網絡號,剩下的是每一個子網的主機號,這時該如何進行每一個子網的掩碼計算。
下面總結一下有關子網掩碼和網絡劃分常見的面試考題:
1)利用子網數來計算
在求子網掩碼以前必須先搞清楚要劃分的子網數目,以及每一個子網內的所需主機數目。
(1) 將子網數目轉化爲二進制來表示;
如欲將B類IP地址168.195.0.0劃分紅27個子網:27=11011;
(2) 取得該二進制的位數,爲N;
該二進制爲五位數,N = 5
(3) 取得該IP地址的類子網掩碼,將其主機地址部分的的前N位置1即得出該IP地址劃分子網的子網掩碼。
將B類地址的子網掩碼255.255.0.0的主機地址前5位置 1,獲得 255.255.248.0
2)利用主機數來計算
如欲將B類IP地址168.195.0.0劃分紅若干子網,每一個子網內有主機700臺:
(1) 將主機數目轉化爲二進制來表示;
700=1010111100;
(2) 若是主機數小於或等於254(注意去掉保留的兩個IP地址),則取得該主機的二進制位數,爲N,這裏確定 N<8。若是大於254,則 N>8,這就是說主機地址將佔據不止8位;
該二進制爲十位數,N=10;
(3) 使用255.255.255.255來將該類IP地址的主機地址位數所有置1,而後從後向前的將N位所有置爲 0,即爲子網掩碼值。
將該B類地址的子網掩碼255.255.0.0的主機地址所有置1,獲得255.255.255.255,而後再從後向前將後 10位置0,即爲:11111111.11111111.11111100.00000000,即255.255.252.0。這就是該欲劃分紅主機爲700臺的B類IP地址 168.195.0.0的子網掩碼。
3)還有一種題型,要你根據每一個網絡的主機數量進行子網地址的規劃和計算子網掩碼。這也可按上述原則進行計算。
好比一個子網有10臺主機,那麼對於這個子網須要的IP地址是:
10+1+1+1=13
注意:加的第一個1是指這個網絡鏈接時所需的網關地址,接着的兩個1分別是指網絡地址和廣播地址。
由於13小於16(16等於2的4次方),因此主機位爲4位。而256-16=240,因此該子網掩碼爲255.255.255.240。
若是一個子網有14臺主機,很多人常犯的錯誤是:依然分配具備16個地址空間的子網,而忘記了給網關分配地址。這樣就錯誤了,由於14+1+1+1=17,17大於16,因此咱們只能分配具備32個地址(32等於2的5次方)空間的子網。這時子網掩碼爲:255.255.255.224。
地址解析協議,即ARP(Address Resolution Protocol),是根據IP地址獲取物理地址的一個TCP/IP協議。主機發送信息時將包含目標IP地址的ARP請求廣播到網絡上的全部主機,並接收返回消息,以此肯定目標的物理地址;收到返回消息後將該IP地址和物理地址存入本機ARP緩存中並保留必定時間,下次請求時直接查詢ARP緩存以節約資源。地址解析協議是創建在網絡中各個主機互相信任的基礎上的,網絡上的主機能夠自主發送ARP應答消息,其餘主機收到應答報文時不會檢測該報文的真實性就會將其記入本機ARP緩存;由此攻擊者就能夠向某一主機發送僞ARP應答報文,使其發送的信息沒法到達預期的主機或到達錯誤的主機,這就構成了一個ARP欺騙。ARP命令可用於查詢本機ARP緩存中IP地址和MAC地址的對應關係、添加或刪除靜態對應關係等。
ARP協議工做流程:
逆地址解析協議,即RARP,功能和ARP協議相對,其將局域網中某個主機的物理地址轉換爲IP地址,好比局域網中有一臺主機只知道物理地址而不知道IP地址,那麼能夠經過RARP協議發出徵求自身IP地址的廣播請求,而後由RARP服務器負責回答。
RARP協議工做流程:
(1)給主機發送一個本地的RARP廣播,在此廣播包中,聲明本身的MAC地址而且請求任何收到此請求的RARP服務器分配一個IP地址;
(2)本地網段上的RARP服務器收到此請求後,檢查其RARP列表,查找該MAC地址對應的IP地址;
TCP和UDP是OSI模型中的運輸層中的協議。TCP提供可靠的通訊傳輸,而UDP則常被用於讓廣播和細節控制交給應用的通訊傳輸。
二者的區別大體以下:
TCP:當對網絡通信質量有要求的時候,好比:整個數據要準確無誤的傳遞給對方,這每每用於一些要求可靠的應用,好比HTTP、HTTPS、FTP等傳輸文件的協議,POP、SMTP等郵件傳輸的協議。
在平常生活中,常見使用TCP協議的應用如:瀏覽器,用的HTTP;
FlashFXP,用的FTP;
Outlook,用的POP、SMTP;
Putty,用的Telnet、SSH;
QQ文件傳輸
UDP:當強調傳輸性能而不是傳輸的完整性時, 要求網絡通信速度能儘可能的快。如:QQ語音 QQ視頻等。
TCP對應的協議:
UDP對應的協議:
詳見博客連接(重點)以及《計算機網絡》(謝希仁)。
在TCP/IP協議中,TCP協議提供可靠的鏈接服務,鏈接是經過三次握手進行初始化的。三次握手的目的是同步鏈接雙方的序列號和確認號並交換TCP窗口大小信息
端口詳解連接(百度百科)
注意區別硬件端口。
確認機制、重傳機制、滑動窗口。
傳輸層沒法保證數據的可靠傳輸,只能經過應用層來實現了。實現的方式能夠參照tcp可靠性傳輸的方式,只是實現不在傳輸層,實現轉移到了應用層。
實現確認機制、重傳機制、窗口確認機制。
若是你不利用linux協議棧以及上層socket機制,本身經過抓包和發包的方式去實現可靠性傳輸,那麼必須實現以下功能:
發送:包的分片、包確認、包的重發
接收:包的調序、包的序號確認
注:
1)給數據包編號,按照包的順序接收並存儲;
2)接收端接收到數據包後發送確認信息給發送端,發送端接收確認數據之後再繼續發送下一個包,若是接收端收到的數據包的編號不是指望的編號,則要求發送端從新發送。
目前有以下開源程序利用udp實現了可靠的數據傳輸。分別爲RUDP、RTP、UDT。
一、應用層:客戶端瀏覽器經過DNS解析到www.baidu.com的IP地址220.181.27.48,經過這個IP地址找到客戶端到服務器的路徑。客戶端瀏覽器發起一個HTTP會話到220.161.27.48,而後經過TCP進行封裝數據包,輸入到網絡層。
二、運輸層:在客戶端的傳輸層,把HTTP會話請求分紅報文段,添加源和目的端口,如服務器使用80端口監聽客戶端的請求,客戶端由系統隨機選擇一個端口如5000,與服務器進行交換,服務器把相應的請求返回給客戶端的5000端口。而後使用IP層(網絡層)的IP地址查找目的端。
三、網絡層:客戶端的網絡層不用關心應用層或者傳輸層的東西,主要作的是經過查找路由表肯定如何到達服務器,期間可能通過多個路由器,這些都是由路由器來完成的工做,我不做過多的描述,無非就是經過查找路由表決定經過那個路徑到達服務器。
四、鏈路層:客戶端的鏈路層,包經過鏈路層發送到路由器,經過鄰居協議查找給定IP地址的MAC地址,而後發送ARP請求查找目的地址,若是獲得迴應後就可使用ARP的請求應答交換的IP數據包如今就能夠傳輸了,而後發送IP數據包到達服務器的地址。
HTTP是一個應用層協議,由請求和響應構成,是一個標準的客戶端服務器模型。
HTTP是一個基於TCP/IP通訊協議來傳遞數據,默認端口號爲80。
HTTP工做原理
HTTP協議定義Web客戶端如何從Web服務器請求Web頁面,以及服務器如何把Web頁面傳送給客戶端。
HTTP 請求/響應的步驟
一、客戶端鏈接到Web服務器
一個HTTP客戶端,一般是瀏覽器,與Web服務器的HTTP端口(默認爲80)創建一個TCP套接字鏈接。例如,http://www.oakcms.cn。
二、發送HTTP請求
經過TCP套接字,客戶端向Web服務器發送一個文本的請求報文,一個請求報文由請求行、請求頭部、空行和請求數據4部分組成。
三、服務器接受請求並返回HTTP響應
Web服務器解析請求,定位請求資源。服務器將資源複本寫到TCP套接字,由客戶端讀取。一個響應由狀態行、響應頭部、空行和響應數據4部分組成。
四、釋放鏈接TCP鏈接
若connection 模式爲close,則服務器主動關閉TCP鏈接,客戶端被動關閉鏈接,釋放TCP鏈接;若connection 模式爲keepalive,則該鏈接會保持一段時間,在該時間內能夠繼續接收請求;
五、客戶端瀏覽器解析HTML內容
客戶端瀏覽器首先解析狀態行,查看代表請求是否成功的狀態代碼。而後解析每個響應頭,響應頭告知如下爲若干字節的HTML文檔和文檔的字符集。客戶端瀏覽器讀取響應數據HTML,根據HTML的語法對其進行格式化,並在瀏覽器窗口中顯示。
HTTP消息結構
HTTP是基於客戶端/服務端(C/S)的架構模型
客戶端發送一個HTTP請求到服務器的請求消息包括如下格式:請求行(request line)、請求頭部(header)、空行和請求數據四個部分組成,請求報文的通常格式
HTTP響應也由四個部分組成,分別是:狀態行、消息報頭、空行和響應正文。
狀態碼告知從服務器端返回的請求結果。
200 (成功) 服務器已成功處理了請求。 一般。
304 (未修改) 自從上次請求後,請求的網頁未修改過。 服務器返回此響應時,不會返回網頁內容。
1:400 (錯誤請求) 服務器不理解請求的語法。 2:403 (禁止) 服務器拒絕請求。 3:404 (未找到) 服務器找不到請求的網頁。
500 (服務器內部錯誤) 服務器遇到錯誤,沒法完成請求。 501 (還沒有實施) 服務器不具有完成請求的功能。 例如,服務器沒法識別請求方法時可能會返回此代碼。 502 (錯誤網關) 服務器做爲網關或代理,從上游服務器收到無效響應。 503 (服務不可用) 服務器目前沒法使用(因爲超載或停機維護)。 一般,這只是暫時狀態。 504 (網關超時) 服務器做爲網關或代理,可是沒有及時從上游服務器收到請求。 505 (HTTP 版本不受支持) 服務器不支持請求中所用的 HTTP 協議版本。
重點:200,304,403,404,500
一、https協議須要到ca申請證書,通常免費證書較少,於是須要必定費用。
二、http是超文本傳輸協議,信息是明文傳輸,https則是具備安全性的ssl加密傳輸協議。
三、http和https使用的是徹底不一樣的鏈接方式,用的端口也不同,前者是80,後者是443。
四、http的鏈接很簡單,是無狀態的;HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,比http協議安全。
在HTTP/1.0中默認使用短鏈接。也就是說,客戶端和服務器每進行一次HTTP操做,就創建一次鏈接,任務結束就中斷鏈接。當客戶端瀏覽器訪問的某個HTML或其餘類型的Web頁中包含有其餘的Web資源(如JavaScript文件、圖像文件、CSS文件等),每遇到這樣一個Web資源,瀏覽器就會從新創建一個HTTP會話。
而從HTTP/1.1起,默認使用長鏈接,用以保持鏈接特性。使用長鏈接的HTTP協議,會在響應頭加入這行代碼:
Connection:keep-alive
在使用長鏈接的狀況下,當一個網頁打開完成後,客戶端和服務器之間用於傳輸HTTP數據的TCP鏈接不會關閉,客戶端再次訪問這個服務器時,會繼續使用這一條已經創建的鏈接。Keep-Alive不會永久保持鏈接,它有一個保持時間,能夠在不一樣的服務器軟件(如Apache)中設定這個時間。實現長鏈接須要客戶端和服務端都支持長鏈接。
HTTP協議的長鏈接和短鏈接,實質上是TCP協議的長鏈接和短鏈接。
當DNS客戶機須要在程序中使用名稱時,它會查詢DNS服務器來解析該名稱。客戶機發送的每條查詢信息包括三條信息:包括:指定的DNS域名,指定的查詢類型,DNS域名的指定類別。基於UDP服務,端口53. 該應用通常不直接爲用戶使用,而是爲其餘應用服務,如HTTP,SMTP等在其中須要完成主機名到IP地址的轉換。
路由選擇協議的任務就是要肯定數據報在源與目的地之間採用的路徑。
路由選擇協議分爲:靜態的和動態的。Internet中使用的是動態路由選擇協議,在Internet的概念中,將整個互聯網劃分爲許多個小的自治系統(AS)。AS的最主要的特徵:一個AS對其餘AS表現出的是一個單一 和一致的路由選擇策略。
因爲AS的存在,路由選擇協議又分爲兩種:
網絡萬一阻塞了呢?發出去的請求包在規定時間內沒有收到ACK,無論是請求包丟失,仍是ACK包丟失,仍是網絡延遲,總之,這裏都是須要有個重傳機制的。TCP的重傳機制有兩種:超時重傳和快速重傳。
說白了就是在請求包發出去的時候,開啓一個計時器,當計時器達到時間以後,沒有收到ACK,則就進行重發請求的操做,一直重發直到達到重發上限次數或者收到ACK。
還有一種機制就是快速重傳,當接收方收到的數據包是不正常的序列號,那麼接收方會重複把應該收到的那一條ACK重複發送,這個時候,若是發送方收到連續3條的同一個序列號的ACK,那麼就會啓動快速重傳機制,把這個ACK對應的發送包從新發送一次。具體能夠參考:
TCP粘包是指發送方發送的若干包數據到接收方接收時粘成一包,從接收緩衝區看,後一包數據的頭緊接着前一包數據的尾。
(1)發送方緣由
咱們知道,TCP默認會使用Nagle算法。而Nagle算法主要作兩件事:1)只有上一個分組獲得確認,纔會發送下一個分組;2)收集多個小分組,在一個確認到來時一塊兒發送。
因此,正是Nagle算法形成了發送方有可能形成粘包現象。
(2)接收方緣由
TCP接收到分組時,並不會馬上送至應用層處理,或者說,應用層並不必定會當即處理;實際上,TCP將收到的分組保存至接收緩存裏,而後應用程序主動從緩存裏讀收到的分組。這樣一 來,若是TCP接收分組的速度大於應用程序讀分組的速度,多個包就會被存至緩存,應用程序讀時,就會讀到多個首尾相接粘到一塊兒的包。
(1)若是發送方發送的多個分組原本就是同一個數據的不一樣部分,好比一個很大的文件被分紅多個分組發送,這時,固然不須要處理粘包的現象;
(2)但若是多個分組本絕不相干,甚至是並列的關係,咱們就必定要處理粘包問題了。
(1)發送方
對於發送方形成的粘包現象,咱們能夠經過關閉Nagle算法來解決,使用TCP_NODELAY選項來關閉Nagle算法。
(2)接收方
遺憾的是TCP並無處理接收方粘包現象的機制,咱們只能在應用層進行處理。
(3)應用層處理
應用層的處理簡單易行!而且不只能夠解決接收方形成的粘包問題,還能解決發送方形成的粘包問題。
解決方法就是循環處理:應用程序在處理從緩存讀來的分組時,讀完一條數據時,就應該循環讀下一條數據,直到全部的數據都被處理;可是如何判斷每條數據的長度呢?
兩種途徑:
1)格式化數據:每條數據有固定的格式(開始符、結束符),這種方法簡單易行,但選擇開始符和結束符的時候必定要注意每條數據的內部必定不能出現開始符或結束符;
2)發送長度:發送每條數據的時候,將數據的長度一併發送,好比能夠選擇每條數據的前4字節是數據的長度(一個int來儲存數據長度大小),應用層處理時能夠根據長度來判斷每條數據的開始和結束。
詳細還能夠參考此博客:連接
注: