1.網(wǎng)絡(luò)七層協(xié)議
應(yīng)用層:
1 用戶接口,應(yīng)用程序.
2 Application典型設(shè)備:網(wǎng)關(guān).
3 典型協(xié)議,標(biāo)準(zhǔn)和應(yīng)用:TELNET,FTP,HTTP表示層:
1 數(shù)據(jù)表示,壓縮和加密presentation
2 典型設(shè)備:網(wǎng)關(guān)
3 典型協(xié)議,標(biāo)準(zhǔn)和應(yīng)用:ASCLL,PICT,TIFF,JPEG/MPEG
4 表示層相當(dāng)于一個(gè)東西的表示,表示的一些協(xié)議,比如圖片,聲音和視頻MPEG.會(huì)話層:
1 會(huì)話的建立和結(jié)束
2 典型設(shè)備:網(wǎng)關(guān)
3 典型協(xié)議,標(biāo)準(zhǔn)和應(yīng)用: RPC,SQL,NFS, X WINDOWS,ASP傳輸層:
1 主要功能:端到端控制Tansport.
2 典型設(shè)備:網(wǎng)關(guān)
3 典型協(xié)議,標(biāo)注和應(yīng)用:TCP,UDP,SPX.網(wǎng)絡(luò)層:
1 主要功能:路由,尋址NetWork
2 典型設(shè)備:路由器
3 典型協(xié)議,標(biāo)準(zhǔn)和應(yīng)用:IP,IPX,APPLETALK,ICMP數(shù)據(jù)鏈路層:
1 主要功能:保證無差錯(cuò)的疏忽鏈路data link
2 典型設(shè)備:交換機(jī),網(wǎng)橋,網(wǎng)卡
3 典型協(xié)議,標(biāo)準(zhǔn)和應(yīng)用:802.2,802.3ATM,HDLC,FRAME RELAY.物理層:
1 主要功能:傳輸比特流Physical.
2 典型設(shè)備:集線器,中繼器
3 典型協(xié)議,標(biāo)準(zhǔn)和應(yīng)用:V.35,EIA/TIA-232
2.HTTP 和HTTPS的區(qū)別? HTTPS 為什么更加安全?
- 區(qū)別
1 HTTPS需要想機(jī)構(gòu)申請(qǐng)CA證書,極少免費(fèi)
2 HTTP屬于明文傳輸,HTTPS基于SSL進(jìn)行加密傳輸
3 HTTP端口號(hào)默認(rèn)80,HTTPS端口號(hào)為443
4 HTTPS是加密傳輸,有身份驗(yàn)證環(huán)節(jié),更加安全 - 安全
SSL(安全套接層)TLS(傳輸層安全)
以上兩者在傳輸層之上,對(duì)網(wǎng)絡(luò)連接進(jìn)行加密處理,保障數(shù)據(jù)的完整性,更加安全
3.HTTPS的連接建立流程
HTTPS為了兼顧安全與效率,同事使用了對(duì)稱加密和非對(duì)稱加密.在傳輸過程中會(huì)涉及三個(gè)秘鑰:
- 服務(wù)器端的公鑰和私鑰,用來進(jìn)行非對(duì)稱加密
-
客戶端生成的隨機(jī)秘鑰,用來進(jìn)行對(duì)稱加密
image
如上圖,HTTPS連接過程大致分為八步:
- 1 客戶端訪問HTTPS連接:
客戶端會(huì)把安全協(xié)議版本號(hào),客戶端支持的加密算法列表,隨機(jī)數(shù)C發(fā)送給服務(wù)端 - 2服務(wù)端發(fā)送證書給客戶端:
服務(wù)端接受秘鑰算法配件后,會(huì)和自己支持的加密算法列表進(jìn)行比對(duì),如果不符合,則斷開連接,否則,服務(wù)端會(huì)在該算法列表中,選擇一個(gè)對(duì)稱算法(如AES),一種公鑰算法(如具有特定秘鑰長(zhǎng)度的RSA)和一種MAC算法發(fā)送給客戶端.服務(wù)端有一個(gè)秘鑰對(duì),及公鑰和私鑰,是用來進(jìn)行非對(duì)稱加密使用的,服務(wù)器保存私鑰,不能將其泄漏,公鑰可以發(fā)送給任何人.在發(fā)送加密算法的同事還會(huì)把數(shù)字證書和隨機(jī)數(shù)S發(fā)送給客戶端 - 3客戶端驗(yàn)證server證書:
會(huì)對(duì)server公鑰進(jìn)行檢查,驗(yàn)證其合法性,如果發(fā)現(xiàn)公鑰有問題,那么HTTPS傳輸就無法繼續(xù)進(jìn)行. - 4客戶端組裝會(huì)話密鑰:
如果公鑰合格,那么客戶端會(huì)用服務(wù)器公鑰生成一個(gè)前主秘鑰(Pre-Master Secret,PMS),并通過該前主秘鑰和隨機(jī)數(shù)C,S來組裝會(huì)話密鑰 - 5客戶端講前主秘鑰加密發(fā)送給服務(wù)端:
是通過服務(wù)端的公鑰來對(duì)前主秘鑰進(jìn)行非對(duì)稱加密,發(fā)送給服務(wù)端 - 6服務(wù)端通過私鑰解密得到前主秘鑰:
服務(wù)端接收加密信息后,用私鑰解密得到前主秘鑰 - 7服務(wù)端組裝會(huì)話秘鑰:
服務(wù)端通過前主秘鑰和隨機(jī)數(shù)C,S來組裝會(huì)話秘鑰,至此,服務(wù)端和客戶端就已經(jīng)知道了用于此次會(huì)話的主秘鑰. - 8數(shù)據(jù)傳輸:
客戶端收到服務(wù)端發(fā)送來的密文,用客戶端秘鑰對(duì)其進(jìn)行解密,得到服務(wù)端發(fā)送的數(shù)據(jù) ,同理服務(wù)端接收到客戶端發(fā)送的密文,用服務(wù)端秘鑰對(duì)其進(jìn)行對(duì)稱解密,得到客戶端發(fā)送的數(shù)據(jù)
4.三次握手和四次揮手
-
三次握手: 剛開始的時(shí)候客戶端和服務(wù)端都處于CLOSED狀態(tài).主動(dòng)打開鏈接的是客戶端,被動(dòng)打開的是服務(wù)端.
1.TCP服務(wù)器進(jìn)程先創(chuàng)建傳輸控制塊TCB,時(shí)刻準(zhǔn)備接受客戶進(jìn)程的連接請(qǐng)求,此時(shí)服務(wù)器就進(jìn)入了LISTEN(監(jiān)聽)狀態(tài).
2.TCP客戶進(jìn)程也是先創(chuàng)建傳輸控制塊TCB,然后向服務(wù)器發(fā)出連SYN接 同步報(bào)文,這是報(bào)文首部中的同部位SYN=1,同時(shí)選擇一個(gè)初始序列號(hào) seq=x ,此時(shí),TCP客戶端進(jìn)程進(jìn)入了 SYN-SENT(同步已發(fā)送狀態(tài))狀態(tài),TCP規(guī)定,SYN報(bào)文段(SYN=1的報(bào)文段)不能攜帶數(shù)據(jù),但需要消耗掉一個(gè)序號(hào).
3.TCP服務(wù)器收到SYN 同步報(bào)文之后,如果同意連接,會(huì)返回給客戶端 SYN 同步報(bào)文和 ACK 確認(rèn)報(bào)文. 確認(rèn)報(bào)文中應(yīng)該 ACK=1,SYN=1,確認(rèn)號(hào)是ack=x+1,同時(shí)也要為自己初始化一個(gè)序列號(hào) seq=y,此時(shí),TCP服務(wù)器進(jìn)程進(jìn)入了SYN-RCVD(同步收到)狀態(tài). 這個(gè)報(bào)文也不能攜帶數(shù)據(jù),但是同樣要消耗一個(gè)序號(hào).
4.TCP客戶進(jìn)程收到確認(rèn)后,還要向服務(wù)器給出確認(rèn)。確認(rèn)報(bào)文的ACK=1,ack=y+1,自己的序列號(hào)seq=x+1,此時(shí),TCP連接建立,客戶端進(jìn)入ESTABLISHED(已建立連接)狀態(tài),TCP規(guī)定,此時(shí)ACK報(bào)文段可以攜帶數(shù)據(jù),但是如果不攜帶數(shù)據(jù)則不消耗序號(hào).
5.當(dāng)服務(wù)器收到客戶端的ACK報(bào)文后也進(jìn)入ESTABLISHED狀態(tài),此時(shí)客戶端和服務(wù)端的連接正式建立。
tcp.png
-
四次揮手:數(shù)據(jù)傳輸完畢之后剛開始客戶端和服務(wù)端都處于ESTABLISHED狀態(tài),然后客戶端首先關(guān)閉連接狀態(tài),服務(wù)端被動(dòng)關(guān)閉連接狀態(tài)
1.客戶端進(jìn)程發(fā)出FIN結(jié)束報(bào)文,并且停止發(fā)送數(shù)據(jù)。釋放數(shù)據(jù)報(bào)文首部,F(xiàn)IN=1,其序列號(hào)為seq=u(等于前面已經(jīng)傳送過來的數(shù)據(jù)的最后一個(gè)字節(jié)的序號(hào)加1),此時(shí),客戶端進(jìn)入FIN-WAIT-1(終止等待1)狀態(tài)。 TCP規(guī)定,F(xiàn)IN報(bào)文段即使不攜帶數(shù)據(jù),也要消耗一個(gè)序號(hào)。
2.服務(wù)器收到FIN報(bào)文后,發(fā)出ACK確認(rèn)報(bào)文,ACK=1,ack=u+1,并且?guī)献约旱男蛄刑?hào)seq=v,此時(shí),由客戶端發(fā)起的斷開連接已經(jīng)完成,服務(wù)端就進(jìn)入了CLOSE-WAIT(關(guān)閉等待)狀態(tài).TCP服務(wù)器通知高層的應(yīng)用進(jìn)程,客戶端向服務(wù)器的方向就釋放了,這時(shí)候處于半關(guān)閉狀態(tài),即客戶端已經(jīng)沒有數(shù)據(jù)要發(fā)送了,但是服務(wù)器若發(fā)送數(shù)據(jù),客戶端依然要接受。這個(gè)狀態(tài)還要持續(xù)一段時(shí)間,也就是整個(gè)CLOSE-WAIT狀態(tài)持續(xù)的時(shí)間。
3.客戶端收到服務(wù)器的確認(rèn)請(qǐng)求后,此時(shí),客戶端就進(jìn)入FIN-WAIT-2(終止等待2)狀態(tài),等待服務(wù)器發(fā)送連接釋放報(bào)文(在這之前還需要接受服務(wù)器發(fā)送的最后的數(shù)據(jù))。
4.服務(wù)器將最后的數(shù)據(jù)發(fā)送完畢后,就向客戶端發(fā)送FIN報(bào)文,F(xiàn)IN=1,ack=u+1,由于在半關(guān)閉狀態(tài),服務(wù)器很可能又發(fā)送了一些數(shù)據(jù),假定此時(shí)的序列號(hào)為seq=w,此時(shí),服務(wù)器就進(jìn)入了LAST-ACK(最后確認(rèn))狀態(tài),等待客戶端的確認(rèn).
5.客戶端收到服務(wù)器的FIN報(bào)文后,必須發(fā)出確認(rèn),ACK=1,ack=w+1,而自己的序列號(hào)是seq=u+1,此時(shí),客戶端就進(jìn)入了TIME-WAIT(時(shí)間等待)狀態(tài)。注意此時(shí)TCP連接還沒有釋放,必須經(jīng)過2?MSL(最長(zhǎng)報(bào)文段壽命)的時(shí)間后,當(dāng)客戶端撤銷相應(yīng)的TCB后,才進(jìn)入CLOSED狀態(tài).
6.服務(wù)器只要收到了客戶端發(fā)出的確認(rèn),立即進(jìn)入CLOSED狀態(tài).同樣,撤銷TCB后,就結(jié)束了這次的TCP連接.可以看到,服務(wù)器結(jié)束TCP連接的時(shí)間要比客戶端早一些.
close.png
5.TCP 和 UDP的區(qū)別
TCP:面向連接、傳輸可靠(保證數(shù)據(jù)正確性,保證數(shù)據(jù)順序)、用于傳輸大量數(shù)據(jù)(流模式)、速度慢,建立連接需要開銷較多(時(shí)間,系統(tǒng)資源)。
UDP:面向非連接、傳輸不可靠、用于傳輸少量數(shù)據(jù)(數(shù)據(jù)包模式)、速度快。
6.Cookie和Session
cookie
-
1.用戶與服務(wù)器的交互
cookie主要是用來記錄用戶狀態(tài),區(qū)分用戶,狀態(tài)保存在客戶端。cookie功能需要瀏覽器的支持。如果瀏覽器不支持cookie(如大部分手機(jī)中的瀏覽器)或者把cookie禁用了,cookie功能就會(huì)失效。
a).首次訪問amazon時(shí),客戶端發(fā)送一個(gè)HTTP請(qǐng)求到服務(wù)器端 。服務(wù)器端發(fā)送一個(gè)HTTP響應(yīng)到客戶端,其中包含Set-Cookie頭部
b).客戶端發(fā)送一個(gè)HTTP請(qǐng)求到服務(wù)器端,其中包含Cookie頭部。服務(wù)器端發(fā)送一個(gè)HTTP響應(yīng)到客戶端
c).隔段時(shí)間再去訪問時(shí),客戶端會(huì)直接發(fā)包含Cookie頭部的HTTP請(qǐng)求。服務(wù)器端發(fā)送一個(gè)HTTP響應(yīng)到客戶端
-
2.cookie的修改和刪除
在修改cookie的時(shí)候,只需要新cookie覆蓋舊cookie即可,在覆蓋的時(shí)候,由于Cookie具有不可跨域名性,注意name、path、domain需與原cookie一致
刪除cookie也一樣,設(shè)置cookie的過期時(shí)間expires為過去的一個(gè)時(shí)間點(diǎn),或者maxAge = 0(Cookie的有效期,單位為秒)即可
-
3.cookie的安全
事實(shí)上,cookie的使用存在爭(zhēng)議,因?yàn)樗徽J(rèn)為是對(duì)用戶隱私的一種侵害,而且cookie并不安全
HTTP協(xié)議不僅是無狀態(tài)的,而且是不安全的。使用HTTP協(xié)議的數(shù)據(jù)不經(jīng)過任何加密就直接在網(wǎng)絡(luò)上傳播,有被截獲的可能。使用HTTP協(xié)議傳輸很機(jī)密的內(nèi)容是一種隱患。
a).如果不希望Cookie在HTTP等非安全協(xié)議中傳輸,可以設(shè)置Cookie的secure屬性為true。瀏覽器只會(huì)在HTTPS和SSL等安全協(xié)議中傳輸此類Cookie。
b).此外,secure屬性并不能對(duì)Cookie內(nèi)容加密,因而不能保證絕對(duì)的安全性。如果需要高安全性,需要在程序中對(duì)Cookie內(nèi)容加密、解密,以防泄密。
c).也可以設(shè)置cookie為HttpOnly,如果在cookie中設(shè)置了HttpOnly屬性,那么通過js腳本將無法讀取到cookie信息,這樣能有效的防止XSS(跨站腳本攻擊)攻擊
Session
Session是服務(wù)器端使用的一種記錄客戶端狀態(tài)的機(jī)制,使用上比Cookie簡(jiǎn)單一些,相應(yīng)的也增加了服務(wù)器的存儲(chǔ)壓力。
-
Session是另一種記錄客戶狀態(tài)的機(jī)制,不同的是Cookie保存在客戶端瀏覽器中,而Session保存在服務(wù)器上。 客戶端瀏覽器訪問服務(wù)器的時(shí)候,服務(wù)器把客戶端信息以某種形式記錄在服務(wù)器上。這就是Session??蛻舳藶g覽器再次訪問時(shí)只需要從該Session中查找該客戶的狀態(tài)就可以了。
當(dāng)程序需要為某個(gè)客戶端的請(qǐng)求創(chuàng)建一個(gè)session時(shí),服務(wù)器首先檢查這個(gè)客戶端的請(qǐng)求里是否已包含了一個(gè)session標(biāo)識(shí)(稱為SessionId)
如果已包含則說明以前已經(jīng)為此客戶端創(chuàng)建過session,服務(wù)器就按照SessionId把這個(gè)session檢索出來,使用(檢索不到,會(huì)新建一個(gè))
如果客戶端請(qǐng)求不包含SessionId,則為此客戶端創(chuàng)建一個(gè)session并且生成一個(gè)與此session相關(guān)聯(lián)的SessionId,SessionId的值應(yīng)該是一個(gè)既不會(huì)重復(fù),又不容易被找到規(guī)律以仿造的字符串,這個(gè)SessionId將被在本次響應(yīng)中返回給客戶端保存。
保存這個(gè)SessionId的方式可以采用cookie,這樣在交互過程中瀏覽器可以自動(dòng)的按照規(guī)則把這個(gè)標(biāo)識(shí)發(fā)送給服務(wù)器。但cookie可以被人為的禁止,則必須有其他機(jī)制以便在cookie被禁止時(shí)仍然能夠把SessionId傳遞回服務(wù)器。
Cookie 和Session 的區(qū)別:
1.cookie數(shù)據(jù)存放在客戶的瀏覽器上,session數(shù)據(jù)放在服務(wù)器上。
2.cookie相比session不是很安全,別人可以分析存放在本地的cookie并進(jìn)行cookie欺騙,考慮到安全應(yīng)當(dāng)使用session。
3.session會(huì)在一定時(shí)間內(nèi)保存在服務(wù)器上。當(dāng)訪問增多,會(huì)比較占用你服務(wù)器的性能,考慮到減輕服務(wù)器性能方面,應(yīng)當(dāng)使用cookie。
4.單個(gè)cookie保存的數(shù)據(jù)不能超過4K,很多瀏覽器都限制一個(gè)站點(diǎn)最多保存20個(gè)cookie。而session存儲(chǔ)在服務(wù)端,可以無限量存儲(chǔ)
5.所以:將登錄信息等重要信息存放為session;其他信息如果需要保留,可以放在cookie中


