ISO
上大學的時候?qū)W計算機記得有個ISO的網(wǎng)絡模型臼朗,七層劃分比較詳細胸蛛,盜圖如下:
看到上邊的圖是不是比較頭疼,其實從我們常用的協(xié)議來講渠抹,應該是這個樣子蝙昙。TCP/IP協(xié)議參考模型把所有的TCP/IP系列協(xié)議歸類到四個抽象層中:
應用層:TFTP,HTTP逼肯,SNMP耸黑,F(xiàn)TP,SMTP篮幢,DNS大刊,Telnet 等
傳輸層:TCP,UDP
網(wǎng)絡層: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)設計的歌馍。
UDP(User Data Protocol握巢,用戶數(shù)據(jù)報協(xié)議)是與TCP相對應的協(xié)議。它是屬于TCP/IP協(xié)議族中的一種松却。
那么網(wǎng)絡之間是如何通信的呢暴浦?這些都得靠socket,那么問題來了晓锻,什么是socket歌焦?
Socket是應用層與TCP/IP協(xié)議族通信的中間軟件抽象層,它是一組接口砚哆。在設計模式中独撇,Socket其實就是一個門面模式,它把復雜的TCP/IP協(xié)議族隱藏在Socket接口后面,對用戶來說券勺,一組簡單的接口就是全部,讓Socket去組織數(shù)據(jù)灿里,以符合指定的協(xié)議关炼。
http
HTTP請求/響應報文
HTTP請求報文組成:請求行+請求頭+請求體
HTTP響應報文組成:響應行+響應頭+響應體
請求行: 請求方法(HEAD/GET/POST) + 請求URL + HTTP協(xié)議版本
響應行: HTTP協(xié)議版本 + 狀態(tài)碼 + 狀態(tài)碼描述
請求頭: 比如客戶端的Cookie和User-Agent就放在這里.
響應頭: 比如服務器的Set-Cookie和Server信息就放在這里.
請求體: 比如客戶端POST的數(shù)據(jù)就放在這里(對比:GET的數(shù)據(jù)放在請求行的URL里).
響應體: 比如服務器返回的HTML和JSON數(shù)據(jù)就放在這里.
HTTPS
? 安全超文本傳輸協(xié)議(Secure Hypertext Transfer Protocol),HTTPS實際上應用了Netscape的完全套接字層(SSL) 作為HTTP應用層的子層(HTTPS使用端口443匣吊,而不是象HTTP那樣使用端口80來和TCP/IP進行通信)儒拂,SSL使用40位關鍵字作為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é)議構建的可進行加密傳輸岳链、身份認證、完整性保護劲件,即HTTP+ 加密 + 認證 +完整性保護 = HTTPS掸哑,比http協(xié)議安全。
? 五零远、HTTP的缺點:通信使用明文苗分,內(nèi)容可能被竊聽;不驗證通信方身份牵辣,有可能遭遇偽裝(跨站點請求偽造)摔癣;無法證明報文的完整性,有可能已被篡改(運營商劫持)
TCP
HTTP本身是應用層協(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時表示:這是一個連接請求報文段余舶。若同意連接啊鸭,則在響應報文段中使得SYN=1,ACK=1匿值。因此赠制,SYN=1表示這是一個連接請求,或連接接受報文挟憔。SYN這個標志位只有在TCP建產(chǎn)連接時才會被置1钟些,握手完成后SYN標志位被置0。
終止FIN:用來釋放一個連接绊谭。FIN=1表示:此報文段的發(fā)送方的數(shù)據(jù)已經(jīng)發(fā)送完畢政恍,并要求釋放運輸連接
(建立會話)三次握手:
(結束會話)四次揮手:
簡單來講:
三次握手(three-way handshake),建立TCP連接時會發(fā)生:
UserAgent > Server [SYN] 在么
Server > UserAgent [SYN, ACK] 在
UserAgent > Server [ACK] 知道了
四次揮手(four-way handshake)达传,關閉TCP連接時會發(fā)生:
UserAgent > Server [FIN] 我要關閉連接了
Server > UserAgent [ACK] 知道了,等我發(fā)完包先
Server > UserAgent [FIN] 我也關閉連接了
UserAgent > Server [ACK] 好的,知道了
HTTP協(xié)議與TCP/IP協(xié)議的關系
HTTP的長連接和短連接本質(zhì)上是TCP長連接和短連接篙耗。HTTP屬于應用層協(xié)議迫筑,在傳輸層使用TCP協(xié)議,在網(wǎng)絡層使用IP協(xié)議宗弯。IP協(xié)議主要解決網(wǎng)絡路由和尋址問題脯燃,TCP協(xié)議主要解決如何在IP層之上可靠的傳遞數(shù)據(jù)包,使在網(wǎng)絡上的另一端收到發(fā)端發(fā)出的所有包蒙保,并且順序與發(fā)出順序一致曲伊。TCP有可靠,面向連接的特點追他。
如何理解HTTP協(xié)議是無狀態(tài)的
HTTP協(xié)議是無狀態(tài)的,指的是協(xié)議對于事務處理沒有記憶能力岛蚤,服務器不知道客戶端是什么狀態(tài)邑狸。也就是說,打開一個服務器上的網(wǎng)頁和你之前打開這個服務器上的網(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提供可靠的服務渐逃。也就是說,通過TCP連接傳送的數(shù)據(jù)民褂,無差錯茄菊,不丟失,不重復赊堪,且按序到達;UDP盡最大努力交付面殖,即不保證可靠交付
? 3、TCP面向字節(jié)流哭廉,實際上是TCP把數(shù)據(jù)看成一連串無結構的字節(jié)流;UDP是面向報文的脊僚,UDP沒有擁塞控制,因此網(wǎng)絡出現(xiàn)擁塞不會使源主機的發(fā)送速率降低(對實時應用很有用遵绰,如IP電話辽幌,實時視頻會議等)
? 4、每一條TCP連接只能是點到點的;UDP支持一對一街立,一對多舶衬,多對一和多對多的交互通信
? 5、TCP首部開銷20字節(jié);UDP的首部開銷小赎离,只有8個字節(jié)
? 6逛犹、TCP的邏輯通信信道是全雙工的可靠信道,UDP則是不可靠信道
本文只做學習參考,如有任何不準確的地方歡迎指正虽画。
我的郵箱:
lulongji2011@163.com