計(jì)算機(jī)網(wǎng)絡(luò)一些知識(shí)點(diǎn)

OSI模型

OSI TCP/IP 協(xié)議 功能
應(yīng)用層 應(yīng)用層 HTTP,SMTP,RTP,DNS 為應(yīng)用程序提供服務(wù)
表示
會(huì)話
傳輸 傳輸層 TCP UDP 建立,管理和維護(hù)會(huì)話
網(wǎng)絡(luò) 網(wǎng)絡(luò)層 IP ICMP IP選址及路由選擇
數(shù)據(jù)鏈路 數(shù)據(jù)鏈路層 DSL SONET 802.11 提供介質(zhì)訪問和鏈路管理
物理 物理層 物理層

IPv4

  • 版本:記錄數(shù)據(jù)報(bào)屬于哪個(gè)協(xié)議版本
  • IHL:指明頭有多長,最小為5,頭部沒有可選項(xiàng),最大為15,選項(xiàng)字段最多為40字節(jié)
  • 區(qū)分服務(wù):服務(wù)類型
  • 總長度:最大長度為65535
  • 標(biāo)識(shí):讓目標(biāo)主機(jī)確定一個(gè)新到達(dá)的分段屬于哪一個(gè)數(shù)據(jù)報(bào)
  • 未使用的位:
  • DF:不分段
  • MF:更多的段,除最后一個(gè)段之外其他都需要設(shè)置
  • 分段偏移量:指明了該段在當(dāng)前數(shù)據(jù)報(bào)中的偏移位置
  • 生存期:限制數(shù)據(jù)包生存期計(jì)數(shù)器
  • 協(xié)議:
  • 頭校驗(yàn):所有的16位半字加起來取補(bǔ)碼和為0
  • 源地址:
  • 目的地址:
  • 選項(xiàng):

分層設(shè)計(jì):

  • 保持較少的路由前綴
  • 不適合移動(dòng)網(wǎng)絡(luò)
  • 浪費(fèi)地址

  • A類地址:1.0.0.0-127.255.255.255
  • B類地址:128.0.0.0-191.255.255.255
  • C類地址:192.0.0.0-223.255.255.255
  • D類地址:224.0.0.0-239.255.255.255
  • E類地址:240.0.0.0-255.255.255.255

UDP(用戶數(shù)據(jù)報(bào)協(xié)議)

TCP(傳輸控制協(xié)議)

  • 字節(jié)流
  • 全雙工,端到端
  • 緊急數(shù)據(jù)(ugent data)處理:一個(gè)交互式用戶鍵入Ctrl+C來中斷一個(gè)已經(jīng)開始運(yùn)行的遠(yuǎn)程計(jì)算時(shí),發(fā)送端程序把一些控制信息放在數(shù)據(jù)流中,并且將它連同URGENT標(biāo)志一起交給TCP,這一事件將導(dǎo)致TCP停止積累數(shù)據(jù),并將該連接上已有的所有數(shù)據(jù)立即傳輸出去,當(dāng)接收方收到緊急數(shù)據(jù)后,接收端程序被中斷,它停止當(dāng)前正在完成的工作,并且讀入數(shù)據(jù)流以便找到緊急數(shù)據(jù),緊急數(shù)據(jù)的尾部應(yīng)該被標(biāo)記以便知道緊急數(shù)據(jù)的結(jié)束位置
  • 20字節(jié)的頭部
  • 最多可達(dá)數(shù)據(jù)65535-20(IP)-20(TCP)=65495

TCP報(bào)文格式

  • 源端口:
  • 目標(biāo)端口:
  • 序號(hào)(SEQ)和確認(rèn)號(hào)(ack):
  • TCP頭長度:指明TCP頭包含多少個(gè)32位的字
  • 沒有被使用的4位:
  • 8個(gè)1比特的標(biāo)志位:CWR,ECE(擁塞控制,設(shè)置ECE告訴放慢速率,設(shè)置CWR說明已經(jīng)放慢速率了),URG(緊急指針),ACK,PSH(推送數(shù)據(jù),不會(huì)進(jìn)入緩沖區(qū)),RST(拒接連接),SYN(建立連接過程),FIN(釋放連接)
  • 窗口大?。河糜诹髁靠刂?,為0時(shí)說明發(fā)送數(shù)據(jù)太多,接收不了了
  • 校驗(yàn)和:
  • 緊急指針:
  • 選項(xiàng):最大段長選項(xiàng),時(shí)間戳選項(xiàng)(32位序號(hào)很快被消耗完,可以用時(shí)間戳來避免序號(hào)回繞問題),選擇確認(rèn):

三次握手

  1. 客戶端發(fā)送SYN=1,seq=x,ACK=0的TCP段請求連接-SYN_SEND
  2. 服務(wù)端檢查是否有進(jìn)程監(jiān)聽端口,如果沒有則發(fā)送一個(gè)RST=1的拒絕報(bào)文,如果有,接受請求時(shí)返回確認(rèn)段syn=1,seq=y,ack=x+1,ACK=1-SYN_RECV
  3. 客戶端接收到確認(rèn)段,返回seq=x+1,ack=y+1,ACK=1給服務(wù)端,建立連接-ESTABLISHED

四次揮手

  1. 客戶端發(fā)送FIN=1,seq=u,進(jìn)入FIN_WAIT_1狀態(tài)
  2. 服務(wù)端接收到發(fā)送ACK=1,seq=v,ack=u+1進(jìn)入CLOSE_WAIT狀態(tài)
  3. 客戶端接收到之后進(jìn)入FIN_WAIT_2狀態(tài),服務(wù)端發(fā)送完成以后發(fā)送FIN=1,seq=w,ack=u+1進(jìn)入LAST_ACK狀態(tài)
  4. 客戶端接收回復(fù)ACK=1,seq=u+1,ack=w+1進(jìn)入TIME_WAIT狀態(tài),服務(wù)端收到以后進(jìn)入CLOSED
  5. 經(jīng)過2MSL客戶端關(guān)閉連接進(jìn)入CLOSED狀態(tài)
  • 建立連接時(shí)可以將ACK和SYN一起發(fā)送,關(guān)閉連接時(shí),服務(wù)器端可能不會(huì)立即關(guān)閉socket,這個(gè)時(shí)候需要先告訴客戶端已經(jīng)收到消息了,因此多了一次發(fā)送
  • TIME_WAIT時(shí)間為2MSL(最大報(bào)文段生存時(shí)間):如果最后一個(gè)ACK丟失,服務(wù)端沒有收到就會(huì)不斷重發(fā)FIN報(bào)文,所以需要時(shí)間確認(rèn)客戶端是否重發(fā)報(bào)文
  • 三次握手完成兩個(gè)功能:確認(rèn)雙方彼此知道對方做好了發(fā)送數(shù)據(jù)的準(zhǔn)備工作,而且允許雙方進(jìn)行初始序列號(hào)協(xié)商,為了防止已經(jīng)失效的連接請求報(bào)文段突然又傳送到服務(wù)端,會(huì)讓服務(wù)端一直進(jìn)行等待。

TCP粘包問題:發(fā)送方發(fā)送的若干數(shù)據(jù)包到接收方粘成一包,TCP一次發(fā)送多個(gè)分組,TCP應(yīng)用層處理速度小于接收速度

解決方法:使用TCP_NODELAY ,文件不需要處理,讀取發(fā)送長度,格式化數(shù)據(jù)

HTTP:(應(yīng)用層協(xié)議)

HTTP1.0 請求-連接-釋放

HTTP1.1 持續(xù)連接,連接重用,流水線請求,設(shè)置保持時(shí)間

方法 描述
get 獲取資源,請求附在url后,傳輸容量有限制
post 傳輸實(shí)體文本,請求放置在HTTP報(bào)文實(shí)體里
head 沒有實(shí)體,獲取報(bào)文首部
put 傳輸文件
delete 刪除文件
trace 追蹤路徑
connect 要求使用隧道協(xié)議連接代理
options 詢問支持的方法

響應(yīng)碼

代碼 含義 例子
1XX 信息 100=服務(wù)器同意處理客戶請求
2XX 成功 200=請求成功,204=沒有內(nèi)容
3XX 重定向 301=移動(dòng)頁面,304=頁面依然有效
4XX 客戶錯(cuò)誤 403=禁止頁面,404=頁面沒找到
5XX 服務(wù)器錯(cuò)誤 500=服務(wù)器內(nèi)部錯(cuò)誤,503=稍后再試

緩存 Catch-Control

  • 頁面驗(yàn)證:通過緩存頁面最初獲取時(shí)返回的Expires頭以及當(dāng)前的日期和時(shí)間決定頁面是否有效,啟發(fā)式策略:如果頁面一年內(nèi)沒有更新,則該頁面在下一個(gè)小時(shí)內(nèi)也不會(huì)更新
  • 詢問服務(wù)器緩存副本是否有效,條件get
  • IF-modified-since Last-modified
  • 請求驗(yàn)證緩存的副本

連接步驟

  1. 默認(rèn)情況下客戶端在端口80打開與服務(wù)器的一個(gè)TCP連接,URL可以指定其他端口
  2. 客戶端發(fā)送消息給服務(wù)端,請求指定路徑上的資源,包括一個(gè)首部,可選地,還可以有一個(gè)空行,后面是請求的數(shù)據(jù)
  3. 服務(wù)端向客戶端發(fā)送響應(yīng),響應(yīng)以響應(yīng)碼開頭,后面是包含元數(shù)據(jù)的首部,一個(gè)空行以及鎖請求的文檔或錯(cuò)誤信息
  4. 服務(wù)器關(guān)閉連接

Cookie

  • 只能是空白符的ASCII文本,不能包含逗號(hào)或分號(hào)
  • 要在瀏覽器中設(shè)置cookie,服務(wù)器會(huì)在HTTP首部中包含Set-Cookie的首部行,瀏覽器再向服務(wù)器發(fā)送請求時(shí)會(huì)帶上這個(gè)Cookie
  • 作用域受到路徑限制 Set-Cookie:user=elharo;Path=/restricted
  • 設(shè)置子域 Set-Cookie:user=elharo;Domain=example.com
  • 瀏覽器發(fā)送Cookie時(shí)需要注意Path再Domain前
  • 設(shè)置Expires可以設(shè)置固定的過期點(diǎn),Max-Age設(shè)置固定秒之后過期,也可以通過httponly設(shè)置只能通過http返回cookie

Session

  • 服務(wù)端通過在用戶登錄時(shí)會(huì)新建一個(gè)session,同時(shí)為session分配一個(gè)ID:JSESSIONID,并將這個(gè)ID寫入到cookie中,之后將這個(gè)cookie返回給瀏覽器,瀏覽器下次請求就會(huì)帶有這個(gè)ID,之后通過ID就可以獲取到用戶的session了,當(dāng)瀏覽器禁用cookie時(shí)需要用url重寫,將JSESSIONID放入請求參數(shù)中
  response.encodeRedirectURL(java.lang.String url) 用于對sendRedirect方法后的url地址進(jìn)行重寫。
  response.encodeURL(java.lang.String url)用于對表單action和超鏈接的url地址進(jìn)行重寫

HTTPS

  • 基于HTTP協(xié)議,通過SSL或TLS提供加密處理數(shù)據(jù),驗(yàn)證對方身份以及數(shù)據(jù)完整性保護(hù)
  • SSL為安全套階層協(xié)議
  • TLS為安全傳輸層協(xié)議
  • 采用對稱加密和非對稱加密,數(shù)據(jù)是對稱加密傳輸?shù)模荑€是非對稱加密的
  1. 客戶端向服務(wù)器發(fā)起HTTPS請求,連接到服務(wù)器的443端口
  2. 服務(wù)器端有一個(gè)密鑰對,即公鑰和私鑰,是用來進(jìn)行非對稱加密使用的,服務(wù)器端保存著私鑰,不能將其泄露,公鑰可以發(fā)送給任何人。
  3. 服務(wù)器將自己的公鑰發(fā)送給客戶端。
  4. 客戶端收到服務(wù)器端的公鑰之后,會(huì)對公鑰進(jìn)行檢查,驗(yàn)證其合法性,如果發(fā)現(xiàn)發(fā)現(xiàn)公鑰有問題,那么HTTPS傳輸就無法繼續(xù)。嚴(yán)格的說,這里應(yīng)該是驗(yàn)證服務(wù)器發(fā)送的數(shù)字證書的合法性,關(guān)于客戶端如何驗(yàn)證數(shù)字證書的合法性,下文會(huì)進(jìn)行說明。如果公鑰合格,那么客戶端會(huì)生成一個(gè)隨機(jī)值,這個(gè)隨機(jī)值就是用于進(jìn)行對稱加密的密鑰,我們將該密鑰稱之為client key,即客戶端密鑰,這樣在概念上和服務(wù)器端的密鑰容易進(jìn)行區(qū)分。然后用服務(wù)器的公鑰對客戶端密鑰進(jìn)行非對稱加密,這樣客戶端密鑰就變成密文了,至此,HTTPS中的第一次HTTP請求結(jié)束。
  5. 客戶端會(huì)發(fā)起HTTPS中的第二個(gè)HTTP請求,將加密之后的客戶端密鑰發(fā)送給服務(wù)器。
  6. 服務(wù)器接收到客戶端發(fā)來的密文之后,會(huì)用自己的私鑰對其進(jìn)行非對稱解密,解密之后的明文就是客戶端密鑰,然后用客戶端密鑰對數(shù)據(jù)進(jìn)行對稱加密,這樣數(shù)據(jù)就變成了密文。
  7. 然后服務(wù)器將加密后的密文發(fā)送給客戶端。
  8. 客戶端收到服務(wù)器發(fā)送來的密文,用客戶端密鑰對其進(jìn)行對稱解密,得到服務(wù)器發(fā)送的數(shù)據(jù)。這樣HTTPS中的第二個(gè)HTTP請求結(jié)束,整個(gè)HTTPS傳輸完成。

C<--Sp--S
C --Sp+Cp-->S
C --M+(Sp+Cp)-->S

對稱加密:對稱加密又叫做私鑰加密,即信息的發(fā)送方和接收方使用同一個(gè)密鑰去加密和解密數(shù)據(jù)。對稱加密的特點(diǎn)是算法公開、加密和解密速度快,適合于對大數(shù)據(jù)量進(jìn)行加密,常見的對稱加密算法有DES、3DES、TDEA、Blowfish、RC5和IDEA。
其加密過程如下:明文 + 加密算法 + 私鑰 => 密文
解密過程如下:密文 + 解密算法 + 私鑰 => 明文
對稱加密中用到的密鑰叫做私鑰,私鑰表示個(gè)人私有的密鑰,即該密鑰不能被泄露。
其加密過程中的私鑰與解密過程中用到的私鑰是同一個(gè)密鑰,這也是稱加密之所以稱之為“對稱”的原因。由于對稱加密的算法是公開的,所以一旦私鑰被泄露,那么密文就很容易被破解,所以對稱加密的缺點(diǎn)是密鑰安全管理困難。

非對稱加密:非對稱加密也叫做公鑰加密。非對稱加密與對稱加密相比,其安全性更好。對稱加密的通信雙方使用相同的密鑰,如果一方的密鑰遭泄露,那么整個(gè)通信就會(huì)被破解。而非對稱加密使用一對密鑰,即公鑰和私鑰,且二者成對出現(xiàn)。私鑰被自己保存,不能對外泄露。公鑰指的是公共的密鑰,任何人都可以獲得該密鑰。用公鑰或私鑰中的任何一個(gè)進(jìn)行加密,用另一個(gè)進(jìn)行解密。
被公鑰加密過的密文只能被私鑰解密,過程如下:
明文 + 加密算法 + 公鑰 => 密文, 密文 + 解密算法 + 私鑰 => 明文
被私鑰加密過的密文只能被公鑰解密,過程如下:
明文 + 加密算法 + 私鑰 => 密文, 密文 + 解密算法 + 公鑰 => 明文
由于加密和解密使用了兩個(gè)不同的密鑰,這就是非對稱加密“非對稱”的原因。
非對稱加密的缺點(diǎn)是加密和解密花費(fèi)時(shí)間長、速度慢,只適合對少量數(shù)據(jù)進(jìn)行加密。
在非對稱加密中使用的主要算法有:RSA、Elgamal、Rabin、D-H、ECC(橢圓曲線加密算法)等。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容