osi的七層模型及相關協議
1、物理層協議:EIA/TIA-232, EIA/TIA-499,V.35, V.24,RJ45, Ethernet, 802.3
2、數據鏈路層協議:Frame Relay,HDLC,PPP, IEEE 802.3/802.2
3、網絡層協議:IP,IPX,AppleTalk DDP
4、傳輸層協議:TCP,UDP,SPX
5、會話層協議:RPC,SQL,NFS,NetBIOS,names,AppleTalk
6、表示層協議:TIFF,GIF,JPEG,PICT,ASCII,EBCDIC,encryption
7、應用層協議:FTP,WWW,Telnet,NFS,SMTP,Gateway,SNMP
一次http的過程
1.對www.baidu.com這個網址進行DNS域名解析,得到對應的IP地址
2.根據這個IP,找到對應的服務器,發起TCP的三次握手
3.建立TCP連接后發起HTTP請求
4.服務器響應HTTP請求,瀏覽器得到html代碼
5.瀏覽器解析html代碼,並請求html代碼中的資源(如js、css圖片等)(先得到html代碼,才能去找這些資源)
6.瀏覽器對頁面進行渲染呈現給用戶
DNS域名解析
是域名到IP地址的映射,DNS解析請求采用UDP數據報且明文
DNS的工作原理
1) 瀏覽器緩存
當用戶通過瀏覽器訪問某域名時,瀏覽器首先會在自己的緩存中查找是否有該域名對應的IP地址(若曾經訪問過該域名且沒有清空緩存便存在);
2) 系統緩存
當瀏覽器緩存中無域名對應IP則會自動檢查用戶計算機系統Hosts文件DNS緩存是否有該域名對應IP;
3) 路由器緩存
當瀏覽器及系統緩存中均無域名對應IP則進入路由器緩存中檢查,以上三步均為客服端的DNS緩存;
4) ISP(互聯網服務提供商)DNS緩存
當在用戶客服端查找不到域名對應IP地址,則將進入ISP DNS緩存中進行查詢。比如你用的是電信的網絡,則會進入電信的DNS緩存服務器中進行查找;
5) 根域名服務器
當以上均未完成,則進入根服務器進行查詢。全球僅有13台根域名服務器,1個主根域名服務器,其余12為輔根域名服務器。根域名收到請求后會查看區域文件記錄,若無則將其管轄范圍內頂級域名(如.com)服務器IP告訴本地DNS服務器;
6) 頂級域名服務器
頂級域名服務器收到請求后查看區域文件記錄,若無則將其管轄范圍內主域名服務器的IP地址告訴本地DNS服務器;
7) 主域名服務器
主域名服務器接受到請求后查詢自己的緩存,如果沒有則進入下一級域名服務器進行查找,並重復該步驟直至找到正確紀錄;
8)保存結果至緩存
本地域名服務器把返回的結果保存到緩存,以備下一次使用,同時將該結果反饋給客戶端,客戶端通過這個IP地址與web服務器建立鏈接
DNS解析查詢方式?
遞歸查詢,迭代查詢
客戶機向本地域名服務器查詢是遞歸查詢,本地域名服務器向其他域名服務器是迭代查詢,
DNS解析存在哪些常見問題?
DNS劫持問題(DNS解析是udp數據報且明文,可能會有釣魚服務器,會劫持到對應DNS請求,釣魚服務器可能返回一個錯誤IP地址),DNS劫持轉發問題(發送DNS請求時可能會把請求轉發給其他服務器進行解析)
DNS劫持與HTTP的關系是怎么樣的?
沒有關系,DNS解析發生在HTTP建立連接之前,DNS解析請求使用UDP數據報
怎么解決DNS劫持?
1.httpDNS(使用HTTP協議向DNS服務器的80端口進行請求)
2.長連接(客戶端和API Server中間建立長連Server,客戶端和長連Server建立長連通道,長連Server和API Server通過內網專線進行http請求和響應)
三次握手四次揮手
三次揮手(建立連接)
第一次:建立連接時,客戶端發送SYN包(syn=j)到服務器,並進入SYN_SEND狀態,等待服務器確認;
第二次:服務器收到SYN包,向客戶端返回ACK(ack=j+1),同時自己也發送一個SYN包(syn=k),即SYN+ACK包,此時服務器進入SYN_RCVD狀態;
第三次:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=k+1),此包發送完畢,客戶端和服務器進入ESTABLISHED狀態,完成三次握手。
完成三次握手,客戶端與服務器開始傳送數據,也就是ESTABLISHED狀態。
三次握手保證了不會建立無效的連接,從而浪費資源。
四次揮手(斷開連接)
第一次: TCP客戶端發送一個FIN,用來關閉客戶到服務器的數據傳送。
第二次:服務器收到這個FIN,它發回一個ACK,確認序號為收到的序號加1。和SYN一樣,一個FIN將占用一個序號。
第三次:服務器關閉客戶端的連接,發送一個FIN給客戶端。
第四次:客戶端發回ACK報文確認,並將確認序號設置為收到序號加1。
TCP流量控制
如果發送端發送數據太快,接收端來不及接收,可能會丟失數據。所以流量控制是讓發送端不要發送太快,要讓接收端來得及接收
流量控制是通過大小可變的滑動窗口實現的。
發送端窗口大小不能超過接收端窗口大小的值。TCP窗口單位是字節
HTTP請求報文
一個HTTP請求報文由請求行(request line)、請求頭部(header)、空行和請求數據4個部分組成,
請求行分為三個部分:請求方法、請求地址和協議版本
請求頭部為請求報文添加了一些附加信息,由“名/值”對組成,每行一對,名和值之間使用冒號分隔。
請求頭部的最后會有一個空行,表示請求頭部結束,接下來為請求數據,這一行非常重要,必不可少。
請求數據
下面是一個POST方法的請求報文:
POST /index.php HTTP/1.1 請求行
Host: localhost
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:10.0.2) Gecko/20100101 Firefox/10.0.2請求頭
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
Accept-Language: zh-cn,zh;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Referer: http://localhost/Content-Length:25
Content-Type:application/x-www-form-urlencoded 空行username=aa&password=1234 請求數據
HTTP響應報文
由三部分組成:狀態行、消息報頭、響應正文。
狀態行
由3部分組成,分別為:協議版本,狀態碼,狀態碼描述。
其中協議版本與請求報文一致,狀態碼描述是對狀態碼的簡單描述,所以這里就只介紹狀態碼。
狀態碼
狀態代碼為3位數字。
1xx:指示信息–表示請求已接收,繼續處理。
2xx:成功–表示請求已被成功接收、理解、接受。
3xx:重定向–要完成請求必須進行更進一步的操作。
4xx:客戶端錯誤–請求有語法錯誤或請求無法實現。
5xx:服務器端錯誤–服務器未能實現合法的請求。
響應頭部
與請求頭部類似,為響應報文添加了一些附加信息
響應數據
用於存放需要返回給客戶端的數據信息。
TTP/1.1 200 OK 狀態行
Date: Sun, 17 Mar 2013 08:12:54 GMT 響應頭部
Server: Apache/2.2.8 (Win32) PHP/5.2.5
X-Powered-By: PHP/5.2.5
Set-Cookie: PHPSESSID=c0huq7pdkmm5gg6osoe3mgjmm3; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Length: 4393
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=utf-8
//響應數據
timewait狀態
首先調用close()發起主動關閉的一方,在發送最后一個ACK之后會進入time_wait的狀態,也就說該發送方會保持2MSL時間之后才會回到初始狀態。MSL值得是數據包在網絡中的最大生存時間。產生這種結果使得這個TCP連接在2MSL連接等待期間,定義這個連接的四元組(客戶端IP地址和端口,服務端IP地址和端口號)不能被使用。
TCP和UDP的區別
TCP為傳輸控制層協議,為面向連接、可靠的、點到點的通信;
UDP為用戶數據報協議,非連接的不可靠的點到多點的通信;
TCP側重可靠傳輸,UDP側重快速傳輸。
https
HTTPS是在HTTP的基礎上和SSL/TLS證書結合起來的一種協議,保證了傳輸過程中的安全性,減少了被惡意劫持的可能.很好的解決了解決了http的三個缺點(被監聽、被篡改、被偽裝)
https的過程
TLS與SSL在傳輸層對網絡連接進行加密
在使用HTTPS是需要保證服務端配置正確了對應的安全證書
客戶端發送請求到服務端
服務端返回公鑰和證書到客戶端
客戶端接收后會驗證證書的安全性,如果通過則會隨機生成一個隨機數,用公鑰對其加密,發送到服務端
服務端接受到這個加密后的隨機數后會用私鑰對其解密得到真正的隨機數,隨后用這個隨機數當做私鑰對需要發送的數據進行對稱加密
客戶端在接收到加密后的數據使用私鑰(即生成的隨機值)對數據進行解密並且解析數據呈現結果給客戶
SSL加密建立