TCP/IP
TCP/IP
不是一個協(xié)議陆蟆,而是一個協(xié)議族的統(tǒng)稱耿焊。里面包括了 IP 協(xié)議,IMCP 協(xié)議遍搞,TCP 協(xié)議,以及我們更加熟悉的http器腋、ftp溪猿、pop3協(xié)議等等。電腦有了這些纫塌,就好像學會了外語一樣诊县,就可以和其他的計算機終端做自由的交流了。
TCP / IP 協(xié)議分層
- 應用層
向用戶提供一組常用的應用程序措左,如電子郵件(簡單郵件傳輸協(xié)議依痊,SMTP),文件傳輸訪問(文件傳輸協(xié)議,F(xiàn)TP)胸嘁,遠程登錄(TELNET)等瓶摆。
傳輸層: 負責提供應用程序間的通信
格式化信息流;
提供可靠傳輸性宏。為實現(xiàn)后者群井,傳輸層協(xié)議規(guī)定接收端必須發(fā)回確認,并且假如分組丟失毫胜,必須重新發(fā)送-
網(wǎng)絡層:負責相鄰計算機之間的通信
- 處理來自傳輸層的分組發(fā)送請求:收到請求之后书斜,將分組裝入 IP 數(shù)據(jù)報,填充報頭酵使,選擇去往信宿機的路徑荐吉,然后將數(shù)據(jù)報發(fā)往適當?shù)木W(wǎng)絡接口;
- 處理輸入數(shù)據(jù)報:首先檢查其合法性口渔,然后進行尋址:如果該數(shù)據(jù)包已經(jīng)到達信宿機样屠,則去掉報頭,將剩下一部分交給適當?shù)膫鬏攨f(xié)議搓劫;如果該數(shù)據(jù)包尚未到達信宿機瞧哟,則轉(zhuǎn)發(fā)該數(shù)據(jù)報;
- 處理路徑枪向、流控勤揩、擁塞等問題;
網(wǎng)絡接口層: 這是 TCP / IP 的最底層秘蛔,負責接收 IP 數(shù)據(jù)報并通過網(wǎng)絡發(fā)送數(shù)據(jù)報陨亡,或者從網(wǎng)絡上接收物理幀,抽出 IP 數(shù)據(jù)報深员,交給 IP 層负蠕;
TCP的三次握手
- 第一次握手(SYN=1, seq=x):
客戶端發(fā)送一個 TCP 的 SYN標志位置1的包,指明客戶端打算連接的服務器的端口倦畅,以及初始序號 X,保存在包頭的序列號(Sequence Number)字段里遮糖。
發(fā)送完畢后,客戶端進入 SYN_SEND 狀態(tài)叠赐。
- 第二次握手(SYN=1, ACK=1, seq=y, ACKnum=x+1):
服務器發(fā)回確認包(ACK)應答欲账。即 SYN 標志位和 ACK 標志位均為1。服務器端選擇自己 ISN 序列號芭概,放到 Seq 域里赛不,同時將確認序號(Acknowledgement Number)設置為客戶的 ISN 加1,即X+1罢洲。
發(fā)送完畢后踢故,服務器端進入 SYN_RCVD 狀態(tài)。
- 第三次握手(ACK=1,ACKnum=y+1)
客戶端再次發(fā)送確認包(ACK)殿较,SYN 標志位為0耸峭,ACK 標志位為1,并且把服務器發(fā)來 ACK 的序號字段+1斜脂,放在確定字段中發(fā)送給對方抓艳,并且在數(shù)據(jù)段放寫ISN的+1
發(fā)送完畢后,客戶端進入 ESTABLISHED 狀態(tài)帚戳,當服務器端接收到這個包時玷或,也進入 ESTABLISHED 狀態(tài),連接建立成功片任,TCP 握手結(jié)束偏友。
白話解釋大概是這樣的:
1. 隔壁老王:李四么,我隔壁老王哈对供,聽得到么位他?
2. 李四:老王哈,聽得到产场,你聽得到我么鹅髓?
3. 隔壁老王:聽得到,你說
接下來就可以進行愉快的對話了京景。窿冯。。
可不可以1次握手确徙?
1. 隔壁老王:老李么醒串,我隔壁老王哈,聽得到么鄙皇?
如果只有一次握手芜赌,隔壁老王
根本不知道李四
是否聽到了?
溝通失敯橐荨缠沈!
可不可以2次握手?
1. 隔壁老王:老李么错蝴,我隔壁老王哈博烂,聽得到么?
2. 李四:老王哈漱竖,聽得到,你聽得到我么畜伐?
李四
聽到了老王
的對話馍惹,但是呢?李四
不知道老王
是否聽到了?
溝通失斖蚍悼吱!
只有老王
回復了,雙方才知道: 哦良狈!我們說的話對方都是可以聽到的后添。
TCP的4次分手
- 第一次分手:主機1(可以使客戶端,也可以是服務器端)薪丁,設置Sequence Number和Acknowledgment Number遇西,向主機2發(fā)送一個FIN報文段;此時严嗜,主機1進入FIN_WAIT_1狀態(tài)粱檀;這表示主機1沒有數(shù)據(jù)要發(fā)送給主機2了;
- 第二次分手:主機2收到了主機1發(fā)送的FIN報文段漫玄,向主機1回一個ACK報文段茄蚯,Acknowledgment Number為Sequence Number加1;主機1進入FIN_WAIT_2狀態(tài)睦优;主機2告訴主機1渗常,我“同意”你的關閉請求;
- 第三次分手:主機2向主機1發(fā)送FIN報文段汗盘,請求關閉連接皱碘,同時主機2進入LAST_ACK狀態(tài);
- 第四次分手:主機1收到主機2發(fā)送的FIN報文段衡未,向主機2發(fā)送ACK報文段尸执,然后主機1進入TIME_WAIT狀態(tài);主機2收到主機1的ACK報文段以后缓醋,就關閉連接如失;此時,主機1等待2MSL后依然沒有收到回復送粱,則證明Server端已正常關閉褪贵,那好,主機1也可以關閉連接了抗俄。
HTTP
HTTP(HyperText Transfer Protocol)脆丁,超文本傳輸協(xié)議,是一個基于TCP實現(xiàn)的應用層協(xié)議动雹。
HTTPS
HTTPS 是最流行的 HTTP 安全形式槽卫。它是由網(wǎng)景公司首創(chuàng)的,所有主要的瀏覽器和 服務器都支持此協(xié)議胰蝠。
使用 HTTPS 時歼培,所有的 HTTP 請求和響應數(shù)據(jù)在發(fā)送到網(wǎng)絡之前震蒋,都要進行加密。 HTTPS 在 HTTP 下面提供了一個傳輸級的密碼安全層——可以使用 SSL躲庄,也可以使用其后繼者—— 傳輸層安全(Transport Layer Security查剖,TLS)。由于 SSL 和 TLS 非常類似噪窘,所以我們不太嚴格地用術語 SSL 來表示 SSL 和 TLS笋庄。
SSL/TLS
不使用SSL/TLS的HTTP通信,就是不加密的通信倔监。所有信息明文傳播直砂,帶來了三大風險。
- 竊聽風險(eavesdropping):第三方可以獲知通信內(nèi)容丐枉。
- 篡改風險(tampering):第三方可以修改通信內(nèi)容哆键。
- 冒充風險(pretending):第三方可以冒充他人身份參與通信。
SSL/TLS協(xié)議是為了解決這三大風險而設計的瘦锹,希望達到:
- 所有信息都是加密傳播籍嘹,第三方無法竊聽。
- 具有校驗機制弯院,一旦被篡改辱士,通信雙方會立刻發(fā)現(xiàn)。
- 配備身份證書听绳,防止身份被冒充颂碘。
SSL握手
開始加密通信之前,客戶端和服務器首先必須建立連接和交換參數(shù)椅挣,這個過程叫做握手(handshake),握手階段分成五步:
-
客戶端
給出協(xié)議版本號头岔、一個客戶端
生成的 隨機數(shù)(Client random),以及客戶端
支持的加密方法鼠证。 -
服務器
確認雙方使用的加密方法峡竣,并給出數(shù)字證書、以及一個服務器
生成的隨機數(shù)(Server random)量九。 -
客戶端
確認數(shù)字證書有效适掰,然后生成一個新的 隨機數(shù)(Premaster secret),并使用數(shù)字證書中的公鑰荠列,加密這個隨機數(shù)类浪,發(fā)給服務器
。 -
服務器
使用自己的私鑰肌似,獲取客戶端
發(fā)來的隨機數(shù)(即Premaster secret)费就。 -
客戶端
和服務器
根據(jù)約定的加密方法,使用前面的三個隨機數(shù)川队,生成 對話密鑰(session key)力细,用來加密接下來的整個對話過程垦搬。
常見面試題:
HTTP和HTTPS的區(qū)別?
- HTTP 的URL 以http:// 開頭艳汽,而HTTPS 的URL 以https:// 開頭
- HTTP 是不安全的,而 HTTPS 是安全的
- HTTP 標準端口是80 对雪,而 HTTPS 的標準端口是443
- 在OSI 網(wǎng)絡模型中河狐,HTTP工作于應用層,而HTTPS 的安全傳輸機制工作在傳輸層
- HTTP 無法加密瑟捣,而HTTPS 對傳輸?shù)臄?shù)據(jù)進行加密
- HTTP無需證書馋艺,而HTTPS 需要CA機構wosign的頒發(fā)的SSL證書
如何理解HTTP是無狀態(tài)的協(xié)議?
無狀態(tài)協(xié)議對于事務處理沒有記憶能力迈套。缺少狀態(tài)意味著如果后續(xù)處理需要前面的信息
也就是說捐祠,當客戶端一次HTTP請求完成以后,客戶端再發(fā)送一次HTTP請求桑李,HTTP并不知道當前客戶端是一個”老用戶“
如何解決HTTP的無狀態(tài)協(xié)議踱蛀?
使用Cookie來解決無狀態(tài)的問題,Cookie就相當于一個通行證贵白,第一次訪問的時候給客戶端發(fā)送一個Cookie率拒,當客戶端再次來的時候,拿著Cookie(通行證)禁荒,那么服務器就知道這個是”老用戶“猬膨。
常用的HTTP方法有哪些?
- GET: 用于請求訪問已經(jīng)被URI(統(tǒng)一資源標識符)識別的資源呛伴,可以通過URL傳參給服務器
- POST:用于傳輸信息給服務器勃痴,主要功能與GET方法類似,但一般推薦使用POST方式热康。
- PUT: 傳輸文件沛申,報文主體中包含文件內(nèi)容,保存到對應URI位置褐隆。
- HEAD: 獲得報文首部污它,與GET方法類似,只是不返回報文主體庶弃,一般用于驗證URI是否有效衫贬。
- DELETE:刪除文件,與PUT方法相反歇攻,刪除對應URI位置的文件固惯。
- OPTIONS:查詢相應URI支持的HTTP方法。
為什么要三次握手缴守?
防止服務器端的一直等待而浪費資源葬毫。防止接收方收不到信息而已镇辉,發(fā)送方也不知道接收方收到還是沒收到