協(xié)議

ISO

上大學(xué)的時候?qū)W計算機記得有個ISO的網(wǎng)絡(luò)模型,七層劃分比較詳細,盜圖如下:

image.png

看到上邊的圖是不是比較頭疼,其實從我們常用的協(xié)議來講,應(yīng)該是這個樣子。TCP/IP協(xié)議參考模型把所有的TCP/IP系列協(xié)議歸類到四個抽象層中:
  應(yīng)用層:TFTP,HTTP,SNMP,F(xiàn)TP,SMTP,DNS,Telnet 等
  傳輸層:TCP,UDP
  網(wǎng)絡(luò)層:IP,ICMP,OSPF,EIGRP,IGMP
  數(shù)據(jù)鏈路層:SLIP,CSLIP,PPP,MTU

那么,什么是TCP/IP、UDP呢?
TCP/IP(Transmission Control Protocol/Internet Protocol)即傳輸控制協(xié)議/網(wǎng)間協(xié)議,是一個工業(yè)標準的協(xié)議集,它是為廣域網(wǎng)(WANs)設(shè)計的。
UDP(User Data Protocol,用戶數(shù)據(jù)報協(xié)議)是與TCP相對應(yīng)的協(xié)議。它是屬于TCP/IP協(xié)議族中的一種。

那么網(wǎng)絡(luò)之間是如何通信的呢?這些都得靠socket,那么問題來了,什么是socket?
Socket是應(yīng)用層與TCP/IP協(xié)議族通信的中間軟件抽象層,它是一組接口。在設(shè)計模式中,Socket其實就是一個門面模式,它把復(fù)雜的TCP/IP協(xié)議族隱藏在Socket接口后面,對用戶來說,一組簡單的接口就是全部,讓Socket去組織數(shù)據(jù),以符合指定的協(xié)議。

http

HTTP請求/響應(yīng)報文
HTTP請求報文組成:請求行+請求頭+請求體
HTTP響應(yīng)報文組成:響應(yīng)行+響應(yīng)頭+響應(yīng)體
請求行: 請求方法(HEAD/GET/POST) + 請求URL + HTTP協(xié)議版本
響應(yīng)行: HTTP協(xié)議版本 + 狀態(tài)碼 + 狀態(tài)碼描述
請求頭: 比如客戶端的Cookie和User-Agent就放在這里.
響應(yīng)頭: 比如服務(wù)器的Set-Cookie和Server信息就放在這里.
請求體: 比如客戶端POST的數(shù)據(jù)就放在這里(對比:GET的數(shù)據(jù)放在請求行的URL里).
響應(yīng)體: 比如服務(wù)器返回的HTML和JSON數(shù)據(jù)就放在這里.

HTTPS

? 安全超文本傳輸協(xié)議(Secure Hypertext Transfer Protocol),HTTPS實際上應(yīng)用了Netscape的完全套接字層(SSL) 作為HTTP應(yīng)用層的子層(HTTPS使用端口443,而不是象HTTP那樣使用端口80來和TCP/IP進行通信),SSL使用40位關(guān)鍵字作為RC4流加密算法,這對于商業(yè)信息的加密是合適的。HTTPS和SSL支持使用X.509數(shù)字認證,如果需要的話用戶可以確認發(fā)送者是誰。

Http和Https區(qū)別

一、https協(xié)議需要到ca申請證書,一般免費證書很少,需要交費。
  二、http是超文本傳輸協(xié)議,信息是明文傳輸,https 則是具有安全性的ssl加密傳輸協(xié)議。
  三、http和https使用的是完全不同的連接方式,用的端口也不一樣,前者是80,后者是443。
  四、http的連接很簡單,是無狀態(tài)的;HTTPS協(xié)議是由SSL+HTTP協(xié)議構(gòu)建的可進行加密傳輸、身份認證、完整性保護,即HTTP+ 加密 + 認證 +完整性保護 = HTTPS,比http協(xié)議安全。

? 五、HTTP的缺點:通信使用明文,內(nèi)容可能被竊聽;不驗證通信方身份,有可能遭遇偽裝(跨站點請求偽造);無法證明報文的完整性,有可能已被篡改(運營商劫持)

TCP

HTTP本身是應(yīng)用層協(xié)議,協(xié)議本身并不約束傳輸層用的。而HTTP是一個基于TCP的協(xié)議,TCP是一種可靠的傳輸層協(xié)議,有三次握手,四次揮手。我們主要看一下TCP和UDP吧!

首先看下TCP的三次握手和四次揮手:

先看下名詞:

序列號seq:占4個字節(jié),用來標記數(shù)據(jù)段的順序,TCP把連接中發(fā)送的所有數(shù)據(jù)字節(jié)都編上一個序號,第一個字節(jié)的編號由本地隨機產(chǎn)生;給字節(jié)編上序號后,就給每一個報文段指派一個序號;序列號seq就是這個報文段中的第一個字節(jié)的數(shù)據(jù)編號。

確認號ack:占4個字節(jié),期待收到對方下一個報文段的第一個數(shù)據(jù)字節(jié)的序號;序列號表示報文段攜帶數(shù)據(jù)的第一個字節(jié)的編號;而確認號指的是期望接收到下一個字節(jié)的編號;因此當前報文段最后一個字節(jié)的編號+1即為確認號。

確認ACK:占1位,僅當ACK=1時,確認號字段才有效。ACK=0時,確認號無效

同步SYN:連接建立時用于同步序號。當SYN=1,ACK=0時表示:這是一個連接請求報文段。若同意連接,則在響應(yīng)報文段中使得SYN=1,ACK=1。因此,SYN=1表示這是一個連接請求,或連接接受報文。SYN這個標志位只有在TCP建產(chǎn)連接時才會被置1,握手完成后SYN標志位被置0。

終止FIN:用來釋放一個連接。FIN=1表示:此報文段的發(fā)送方的數(shù)據(jù)已經(jīng)發(fā)送完畢,并要求釋放運輸連接

image.png

(建立會話)三次握手:

三次握手.png

(結(jié)束會話)四次揮手:


四次揮手.png

簡單來講:

三次握手(three-way handshake),建立TCP連接時會發(fā)生:
UserAgent > Server [SYN] 在么
Server > UserAgent [SYN, ACK] 在
UserAgent > Server [ACK] 知道了

四次揮手(four-way handshake),關(guān)閉TCP連接時會發(fā)生:
UserAgent > Server [FIN] 我要關(guān)閉連接了
Server > UserAgent [ACK] 知道了,等我發(fā)完包先
Server > UserAgent [FIN] 我也關(guān)閉連接了
UserAgent > Server [ACK] 好的,知道了

HTTP協(xié)議與TCP/IP協(xié)議的關(guān)系

HTTP的長連接和短連接本質(zhì)上是TCP長連接和短連接。HTTP屬于應(yīng)用層協(xié)議,在傳輸層使用TCP協(xié)議,在網(wǎng)絡(luò)層使用IP協(xié)議。IP協(xié)議主要解決網(wǎng)絡(luò)路由和尋址問題,TCP協(xié)議主要解決如何在IP層之上可靠的傳遞數(shù)據(jù)包,使在網(wǎng)絡(luò)上的另一端收到發(fā)端發(fā)出的所有包,并且順序與發(fā)出順序一致。TCP有可靠,面向連接的特點。
如何理解HTTP協(xié)議是無狀態(tài)的
  HTTP協(xié)議是無狀態(tài)的,指的是協(xié)議對于事務(wù)處理沒有記憶能力,服務(wù)器不知道客戶端是什么狀態(tài)。也就是說,打開一個服務(wù)器上的網(wǎng)頁和你之前打開這個服務(wù)器上的網(wǎng)頁之間沒有任何聯(lián)系。HTTP是一個無狀態(tài)的面向連接的協(xié)議,無狀態(tài)不代表HTTP不能保持TCP連接,更不能代表HTTP使用的是UDP協(xié)議(無連接)。

TCP與UDP的區(qū)別

? 1、TCP面向連接(如打電話要先撥號建立連接);UDP是無連接的,即發(fā)送數(shù)據(jù)之前不需要建立連接

? 2、TCP提供可靠的服務(wù)。也就是說,通過TCP連接傳送的數(shù)據(jù),無差錯,不丟失,不重復(fù),且按序到達;UDP盡最大努力交付,即不保證可靠交付

? 3、TCP面向字節(jié)流,實際上是TCP把數(shù)據(jù)看成一連串無結(jié)構(gòu)的字節(jié)流;UDP是面向報文的,UDP沒有擁塞控制,因此網(wǎng)絡(luò)出現(xiàn)擁塞不會使源主機的發(fā)送速率降低(對實時應(yīng)用很有用,如IP電話,實時視頻會議等)

? 4、每一條TCP連接只能是點到點的;UDP支持一對一,一對多,多對一和多對多的交互通信

? 5、TCP首部開銷20字節(jié);UDP的首部開銷小,只有8個字節(jié)

? 6、TCP的邏輯通信信道是全雙工的可靠信道,UDP則是不可靠信道

本文只做學(xué)習(xí)參考,如有任何不準確的地方歡迎指正。

我的郵箱:

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

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