OSI的「實現」:TCP/IP數據庫
OSI七層模型瀏覽器 |
TCP/IP概念層模型緩存 |
功能安全 |
TCP/IP協議族服務器 |
應用層cookie |
應用層網絡 |
文件傳輸、電子郵件、文件服務、虛擬終端session |
FTP,HTTP,SMTP,SNMP,Telnet性能 |
表示層加密 |
數據格式化、代碼轉換、數據加密 |
無 |
|
會話層 |
解除或創建與別的接點的鏈接 |
無 |
|
傳輸層 |
傳輸層 |
提供端對端的接口 |
TCP,UDP |
網絡層 |
網絡層 |
爲數據包選擇路由 |
IP,ICMP,RIP,OSPF,IGMP |
數據鏈路層 |
鏈路層 |
傳輸喲偶地址的幀以及錯誤檢測功能 |
SLIP,CSLIP,PPP,ARP,RARP |
物理層 |
以二進制數據形式在物理媒體上傳輸數據 |
ISO2110,IEEE802,IEEE802.2 |
經常使用的TCP端口號有:HTTP 80,FTP 20/21,Telnet 23,SMTP 25,DNS 53等;經常使用的保留UDP端口號有:DNS 53,BootP 67(server)/ 68(client),TFTP 69,SNMP 161等。
TCP Flags
URG:緊急指針標誌
ACK:確認序號標誌
PSH:push標誌
RST:重置鏈接標誌
SYN:同步序號,用於創建鏈接過程
FIN:finish標誌,用於釋放鏈接(1:發送方已無數據發送)
「握手」是爲了創建鏈接,TCP三次握手的流程圖以下:
在TCP/IP協議中,TCP協議提供可靠的鏈接服務,採用3次握手創建一個鏈接。(sequence number 即上圖中x ,y值)
一、第一次握手:創建鏈接時,客戶端發送SYN包(syn=j)到服務器,並進入SYN_SEND狀態,等待服務器確認。
二、第二次握手:服務器收到SYN包,必須確認客戶的SYN(ack=j+1),同時本身也發送一個SYN包(syn=k),即SYN+ACK包,此時服務器進入SYN_RECV狀態。
三、第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=k+1),此包發送完畢,客戶端和服務器進入ESTAB_LISHED狀態,完成三次握手。
揮手是爲了終止鏈接,TCP四次揮手的流程圖以下:
TCP採用四次揮手來釋放鏈接
一、第一次揮手:client 發送一個FIN,用來關閉client到server的數據傳送,client進入FIN_WAIT_1狀態。
二、第二次揮手:server收到FIN後,發送一個ACK給client,確認序號爲收到的序號加1(與SYN相同,一個FIN佔用一個序號),server進入CLOSE_WAIT狀態。
三、第三次揮手:server發送一個FIN,用來關閉server到client的數據傳送,server進入LAST_ACK狀態。
四、第四次揮手:client收到FIN後,client進入TIME_WAIT狀態,接着發送一個ACK給server,確認序號爲收到的序號+1,server進入CLOSED狀態,完成四次揮手。(client在2MSL時間以後也會關閉)
TCP鏈接必須通過2MSL後才真正的釋放?
確認有足夠的時間讓對方收到ACK包
避免新舊鏈接混淆
UDP特色
一、面向非鏈接
二、不維護鏈接狀態,支持同時向多個客戶端傳輸相同的消息
三、數據包報頭只有8個字節,額外開銷較小
四、吞吐量只受限於數據生成速率、傳輸速率以及機器性能
五、盡最大努力交付,不保證可靠交付,不須要維持複雜的連接狀態表
六、面向報文,不對應用程序提交的報文信息進行拆分或者合併
結論
TCP UDP
一、面向鏈接 vs 無鏈接
二、可靠性 vs 無
三、有序性 vs 無
四、速速慢 vs 快(適用於在線媒體 廣播等)
五、量級(20個字節) vs 8個字節
RTT和RTO
RTT:發送一個數據包到收到對應的ACK,所花費的時間
RTO:重傳時間間隔(客戶端發送一個ack時默認啓動一個定時器,服務器在必定的時間沒有返回相應的包時啓動定時器重新發送一個)(通過RTT計算出RTO)
超文本傳輸協議HTTP主要的特色
一、支持客戶/服務器模式
二、簡單快速
三、靈活(傳輸任意類型數據)
四、無鏈接(每次鏈接限制一個請求,服務器處理完客戶請求並收到客戶應答以後即斷開,節省傳輸時間。http1.1默認使用長鏈接服務器默認等待必定時間後才斷開鏈接,以保證鏈接特性)
五、無狀態(協議對事物的處理沒有狀態)
請求/響應的步驟
一、客戶端鏈接到Web服務器
二、發送HTTP請求
三、服務器接收到請求並返回HTTP響應
四、釋放鏈接TCP鏈接
五、客戶端瀏覽器解析HTML內容
在瀏覽器輸入URL按下回車經歷的流程
一、DNS解析
二、TCP鏈接(找到IP地址和端口後和服務器創建TCP鏈接)
三、發送HTTP請求
四、服務器處理請求並返回HTTP報文
五、瀏覽器解析渲染頁面
六、鏈接結束
五種可能的取值
一、1××:只是信息—表示請求已接收,繼續處理
二、2××:成功—表示請求已被成功接收、理解、接受
三、3××:重定向—要完成請求必須進行更進一步的操做
四、4××:客戶端錯誤—請求語法錯誤或請求沒法實現
五、5××:服務器端錯誤—服務器未能實現合法的請求
常見的狀態碼
一、200:正常返回信息 – 成功
二、400(bad request):客戶端請求語法錯誤,不能被服務器所理解
三、401(unauthorized):請求未經受權,這個狀態代碼必須和www-authorized報頭域一塊兒使用
四、403(forbidden):服務器收到請求可是拒絕提供服務
五、404(not found):請求資源不存在
六、500(internal server error):服務器發生不可預期的錯誤
七、503(server unavailable):服務器當前不能處理客戶端的請求,一段時間後可能恢復正常。
三個層面來解答
一、HTTP報文層面:GET將請求信息放在URL,POST放在報文體中
二、數據庫層面:GET符合冪等性(對數據庫的一次操做和屢次操做是一致的)和安全性,POST不符合
三、其餘層面:GET能夠被緩存、被存儲,POST不行
Cookie的簡介
一、是由服務器發送給客戶端的特殊信息,以文本的形式存放在客戶端
二、客戶端再次請求的時候,會把cookie回發
三、服務器收到後,會解析cookie生成與客戶端相對應的內容
Cookie的設置以及發送過程
Session的簡介
一、服務器的機制,在服務器上保存的信息
二、解析客戶請求並操做session id ,按需保存狀態信息
Session的實現方式
使用cookie來實現
Cookie和Session的區別
一、cookie數據存放在客戶的瀏覽器上,session數據存放在服務器上
二、session相對於cookie更安全
三、考慮到減輕服務器的負擔,應當使用cookie
一、HTTPS須要到CA申請證書,HTTP不須要
二、HTTPS密文傳輸,HTTP明文傳輸
三、鏈接方式不一樣,HTTPS使用443端口,HTTP使用80端口
四、HTTPS = HTTP + 加密 + 認證 + 完整性保護,較HTTP安全
經常使用的TCP端口號有:HTTP 80,FTP 20/21,Telnet 23,SMTP 25,DNS 53等;經常使用的保留UDP端口號有:DNS 53,BootP 67(server)/ 68(client),TFTP 69,SNMP 161等。