網(wǎng)絡(luò)七層協(xié)議
網(wǎng)絡(luò)(OSI)七層協(xié)議由下往上分別為物理層、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層、傳輸層、會(huì)話層、表示層和應(yīng)用層。其中物理層、數(shù)據(jù)鏈路層和網(wǎng)絡(luò)層通常被稱作媒體層,是網(wǎng)絡(luò)工程師所研究的對象;傳輸層、會(huì)話層、表示層和應(yīng)用層則被稱作主機(jī)層,是用戶所面向和關(guān)心的內(nèi)容。
從上到下分別是:
應(yīng)用層
示例:TELNET,HTTP,F(xiàn)TP,NFS,SMTP等。
表示層
示例:加密,ASCII等。
會(huì)話層
示例:RPC,SQL等。
傳輸層
示例:TCP,UDP,SPX。
網(wǎng)絡(luò)層
示例:IP,IPX等。
數(shù)據(jù)鏈路層
示例:ATM,F(xiàn)DDI等。
物理層
示例:Rj45,802.3等。

HTTP協(xié)議對應(yīng)于應(yīng)用層,TCP協(xié)議對應(yīng)于傳輸層,IP協(xié)議對應(yīng)于網(wǎng)絡(luò)層,HTTP協(xié)議是基于TCP連接的,三者本質(zhì)上沒有可比性。 TCP/IP是傳輸層協(xié)議,主要解決數(shù)據(jù)如何在網(wǎng)絡(luò)中傳輸;而HTTP是應(yīng)用層協(xié)議,主要解決如何包裝數(shù)據(jù)。Socket是應(yīng)用層與TCP/IP協(xié)議族通信的中間軟件抽象層,是它的一組接口。
Socket(套接字)
socket是通信的基石,是支持TCP/IP協(xié)議的網(wǎng)絡(luò)通信的基本操作單元,包含進(jìn)行網(wǎng)絡(luò)通信必須的五種信息:
- 連接使用的協(xié)議
- 本地主機(jī)的IP地址
- 本地進(jìn)程的協(xié)議端口
- 遠(yuǎn)地主機(jī)的IP地址
- 遠(yuǎn)地進(jìn)程的協(xié)議端口
多個(gè)TCP連接或多個(gè)應(yīng)用程序進(jìn)程可能需要通過同一個(gè)TCP協(xié)議端口傳輸數(shù)據(jù)。為了區(qū)別不同的應(yīng)用程序進(jìn)程和連接,計(jì)算機(jī)操作系統(tǒng)為應(yīng)用程序與TCP/IP協(xié)議交互提供了 套接字(Socket) 接口。應(yīng)用層可以和傳輸層通過Socket接口,區(qū)分來自不同應(yīng)用程序進(jìn)程或網(wǎng)絡(luò)連接的通信,實(shí)現(xiàn)數(shù)據(jù)傳輸?shù)牟l(fā)服務(wù)。
建立Socket連接至少需要一對套接字,其中一個(gè)運(yùn)行于客戶端,稱為ClientSocket,另一個(gè)運(yùn)行于服務(wù)器端,稱為ServerSocket。
套接字之間的連接過程分為三個(gè)步驟:服務(wù)器監(jiān)聽,客戶端請求,連接確認(rèn)。
Socket可以支持不同的傳輸層協(xié)議(TCP/UDP),當(dāng)使用TCP協(xié)議進(jìn)行連接時(shí),該Socket連接就是一個(gè)TCP連接,UDP連接同理。

TCP/IP五層模型
? TCP/IP五層模型的協(xié)議分為:應(yīng)用層、傳輸層、網(wǎng)絡(luò)層、數(shù)據(jù)鏈路層和物理層。中繼器、集線器、還有我們通常說的雙絞線也工作在物理層;網(wǎng)橋(現(xiàn)已很少使用)、以太網(wǎng)交換機(jī)(二層交換機(jī))、網(wǎng)卡(其實(shí)網(wǎng)卡是一半工作在物理層、一半工作在數(shù)據(jù)鏈路層)在數(shù)據(jù)鏈路層;路由器、三層交換機(jī)在網(wǎng)絡(luò)層;傳輸層主要是四層交換機(jī)、也有工作在四層的路由器。
? TCP/IP協(xié)議中的應(yīng)用層處理七層模型中的第五層、第六層和第七層的功能。TCP/IP協(xié)議中的傳輸層并不能總是保證在傳輸層可靠地傳輸數(shù)據(jù)包,而七層模型可以做到。TCP/IP協(xié)議還提供一項(xiàng)名為UDP(用戶數(shù)據(jù)報(bào)協(xié)議)的選擇。UDP不能保證可靠的數(shù)據(jù)包傳輸。

TCP協(xié)議和UDP協(xié)議的區(qū)別有哪些?
TCP(傳輸控制協(xié)議,Transmission Control Protocol):
1)提供IP環(huán)境下的數(shù)據(jù)可靠傳輸(一臺(tái)計(jì)算機(jī)發(fā)出的字節(jié)流會(huì)無差錯(cuò)的發(fā)往網(wǎng)絡(luò)上的其他計(jì)算機(jī),而且計(jì)算機(jī)A接收數(shù)據(jù)包的時(shí)候,也會(huì)向計(jì)算機(jī)B回發(fā)數(shù)據(jù)包,這也會(huì)產(chǎn)生部分通信量),有效流控,全雙工操作(數(shù)據(jù)在兩個(gè)方向上能同時(shí)傳遞),多路復(fù)用服務(wù),是面向連接,端到端的傳輸;
2)面向連接:正式通信前必須要與對方建立連接。事先為所發(fā)送的數(shù)據(jù)開辟出連接好的通道,然后再進(jìn)行數(shù)據(jù)發(fā)送,像打電話。
3)TCP支持的應(yīng)用協(xié)議:Telnet(遠(yuǎn)程登錄)、FTP(文件傳輸協(xié)議)、SMTP(簡單郵件傳輸協(xié)議)。TCP用于傳輸數(shù)據(jù)量大,可靠性要求高的應(yīng)用。
UDP(用戶數(shù)據(jù)報(bào)協(xié)議,User Datagram Protocol)
1)面向非連接的(正式通信前不必與對方建立連接,不管對方狀態(tài)就直接發(fā)送,像短信,QQ),不能提供可靠性、流控、差錯(cuò)恢復(fù)功能。UDP用于一次只傳送少量數(shù)據(jù),可靠性要求低、傳輸經(jīng)濟(jì)等應(yīng)用。
- UDP支持的應(yīng)用協(xié)議:NFS(網(wǎng)絡(luò)文件系統(tǒng))、SNMP(簡單網(wǎng)絡(luò)管理系統(tǒng))、DNS(主域名稱系統(tǒng))、TFTP(通用文件傳輸協(xié)議)等。
總結(jié):
TCP:面向連接、傳輸可靠(保證數(shù)據(jù)正確性,保證數(shù)據(jù)順序)、用于傳輸大量數(shù)據(jù)(流模式)、速度慢,建立連接需要開銷較多(時(shí)間,系統(tǒng)資源)。
UDP:面向非連接、傳輸不可靠、用于傳輸少量數(shù)據(jù)(數(shù)據(jù)包模式)、速度快。
TCP和UDP協(xié)議的一些應(yīng)用例子:
TCP一般用于文件傳輸(FTP HTTP 對數(shù)據(jù)準(zhǔn)確性要求高,速度可以相對慢),發(fā)送或接收郵件(POP IMAP SMTP 對數(shù)據(jù)準(zhǔn)確性要求高,非緊急應(yīng)用),遠(yuǎn)程登錄(TELNET SSH 對數(shù)據(jù)準(zhǔn)確性有一定要求,有連接的概念)等等;UDP一般用于即時(shí)通信(QQ聊天 對數(shù)據(jù)準(zhǔn)確性和丟包要求比較低,但速度必須快),在線視頻(RTSP 速度一定要快,保證視頻連續(xù),但是偶爾花了一個(gè)圖像幀,人們還是能接受的),網(wǎng)絡(luò)語音電話(VoIP 語音數(shù)據(jù)包一般比較小,需要高速發(fā)送,偶爾斷音或串音也沒有問題)等等。
作為知識(shí)的擴(kuò)展,可以再說一些其他應(yīng)用。比如,TCP可以用于網(wǎng)絡(luò)數(shù)據(jù)庫,分布式高精度計(jì)算系統(tǒng)的數(shù)據(jù)傳輸;UDP可以用于服務(wù)系統(tǒng)內(nèi)部之間的數(shù)據(jù)傳輸,因?yàn)閿?shù)據(jù)可能比較多,內(nèi)部系統(tǒng)局域網(wǎng)內(nèi)的丟包錯(cuò)包率又很低,即便丟包,頂多是操作無效,這種情況下,UDP經(jīng)常被使用。
HTTP協(xié)議傳輸和TCP協(xié)議傳輸?shù)膮^(qū)別?
問:經(jīng)常聽別人說使用HTTP協(xié)議傳輸或者使用TCP協(xié)議傳輸,一直對這個(gè)概念有點(diǎn)疑惑,我的理解是HTTP是應(yīng)用層協(xié)議,他只是一種數(shù)據(jù)格式,最后傳輸還是靠TCP/IP來傳輸?shù)?,請問他們說的對還是我理解的對?
答: TCP/IP主要的作用就是保證連接的可靠性,我不管發(fā)出任何東西給你,都要有這一套協(xié)議來保證不丟包比如說TCP協(xié)議就是這樣,無論上層讓他傳啥數(shù)據(jù),他都通過與IP協(xié)議的操作,把這些東西分段,然后輸送,同時(shí)保證在這個(gè)過程中,數(shù)據(jù)不會(huì)丟,如果丟了一塊,他還得想辦法重新傳一次,這就是TCP/IP的意義。
另外,HTTP協(xié)議,可以認(rèn)為主要是用來訪問網(wǎng)頁的,是比TCP更上層的協(xié)議,HTTP里面規(guī)定了我們訪問網(wǎng)頁的時(shí)候如何進(jìn)行緩存,以及請求什么格式,等等。主要是為了讓人們訪問網(wǎng)頁的時(shí)候更快,更安全,而規(guī)定了很多參數(shù)。你可以認(rèn)為TCP/IP協(xié)議就是搬運(yùn)工,保證搬動(dòng)的東西不被損壞http協(xié)議是做業(yè)務(wù)的,用來決定要不要搬運(yùn),以及如何搬運(yùn),從哪去搬運(yùn)。
UDP與TCP的區(qū)別
- TCP:面向連接、傳輸可靠(保證數(shù)據(jù)正確性,保證數(shù)據(jù)順序)、用于傳輸大量數(shù)據(jù)(流模式)、速度慢,建立連接需要開銷較多(時(shí)間,系統(tǒng)資源)。
- UDP:面向非連接、傳輸不可靠、用于傳輸少量數(shù)據(jù)(數(shù)據(jù)包模式)、速度快。
TCP是一種流模式的協(xié)議,UDP是一種數(shù)據(jù)報(bào)模式的協(xié)議
| TCP | UDP | |
|---|---|---|
| 是否連接 | 面向連接 | 面向非連接 |
| 傳輸可靠性 | 可靠 | 不可靠 |
| 應(yīng)用場合 | 傳輸大量數(shù)據(jù) | 傳輸少量數(shù)據(jù) |
| 速度 | 慢 | 快 |
在傳輸數(shù)據(jù)時(shí),可以只使用傳輸層(TCP/IP),但是那樣的話,由于沒有應(yīng)用層,便無法識(shí)別數(shù)據(jù)內(nèi)容,如果想要使傳輸?shù)臄?shù)據(jù)有意義,則必須使用應(yīng)用層協(xié)議(HTTP、FTP、TELNET等),也可以自己定義應(yīng)用層協(xié)議。
WEB使用HTTP作傳輸層協(xié)議,以封裝HTTP文本信息,然后使用TCP/IP做傳輸層協(xié)議將它發(fā)送到網(wǎng)絡(luò)上。Socket是對TCP/IP協(xié)議的封裝,Socket本身并不是協(xié)議,而是一個(gè)調(diào)用接口(API),通過Socket,我們才能使用TCP/IP協(xié)議。

TCP連接
建立起一個(gè)TCP連接需要經(jīng)過“三次握手”:
第一次握手:客戶端發(fā)送syn包(syn=j)到服務(wù)器,并進(jìn)入SYN_SEND狀態(tài),等待服務(wù)器確認(rèn);
第二次握手:服務(wù)器收到syn包,必須確認(rèn)客戶的SYN(ack=j+1),同時(shí)自己也發(fā)送一個(gè)SYN包(syn=k),即SYN+ACK包,此時(shí)服務(wù)器進(jìn)入SYN_RECV狀態(tài);
第三次握手:客戶端收到服務(wù)器的SYN+ACK包,向服務(wù)器發(fā)送確認(rèn)包ACK(ack=k+1),此包發(fā)送完畢,客戶端和服務(wù)器進(jìn)入ESTABLISHED狀態(tài),完成三次握手。
三次握手(Three-way Handshake)即建立一個(gè)TCP連接時(shí),需要客戶端和服務(wù)器總共發(fā)送3個(gè)包。三次握手的目的是連接服務(wù)器指定端口,建立TCP連接,并同步連接雙方的序列號(hào)和確認(rèn)號(hào)并交換TCP 窗口大小信息。在socket編程中,客戶端執(zhí)行connect()時(shí),將觸發(fā)三次握手。

握手過程中傳送的包里不包含數(shù)據(jù),三次握手完畢后,客戶端與服務(wù)器才正式開始傳送數(shù)據(jù)。理想狀態(tài)下,TCP連接一旦建立,在通信雙方中的任何一方主動(dòng)關(guān)閉連 接之前,TCP 連接都將被一直保持下去。斷開連接時(shí)服務(wù)器和客戶端均可以主動(dòng)發(fā)起斷開TCP連接的請求,斷開過程需要經(jīng)過“四次揮手”
TCP連接的拆除需要發(fā)送四個(gè)包,因此稱為四次揮手(four-way handshake)。在socket編程中,任何一方執(zhí)行close()操作即可產(chǎn)生“揮手”操作。

HTTP連接
HTTP協(xié)議即超文本傳送協(xié)議(HypertextTransfer Protocol ),是Web聯(lián)網(wǎng)的基礎(chǔ),也是手機(jī)聯(lián)網(wǎng)常用的協(xié)議之一,HTTP協(xié)議是建立在TCP協(xié)議之上的一種應(yīng)用。
HTTP連接最顯著的特點(diǎn)是:客戶端發(fā)送的每次請求都需要服務(wù)器回送響應(yīng),在請求結(jié)束后,會(huì)主動(dòng)釋放連接。從建立連接到關(guān)閉連接的過程稱為“一次連接”。因此HTTP連接是一種“短連接”,要保持客戶端程序的在線狀態(tài),需要不斷地向服務(wù)器發(fā)起連接請求。若服務(wù)器長時(shí)間無法收到客戶端的請求,則認(rèn)為客戶端“下線”,若客戶端長時(shí)間無法收到服務(wù)器的回復(fù),則認(rèn)為網(wǎng)絡(luò)已經(jīng)斷開。
在HTTP 1.0中,客戶端的每次請求都要求建立一次單獨(dú)的連接,在處理完本次請求后,就自動(dòng)釋放連接。在HTTP 1.1中則可以在一次連接中處理多個(gè)請求,并且多個(gè)請求可以重疊進(jìn)行,不需要等待一個(gè)請求結(jié)束后再發(fā)送下一個(gè)請求。
HTTPS(Hyper Text Transfer Protocol over Secure Socket Layer),是以安全為目標(biāo)的HTTP通道,是HTTP的安全版。 在HTTP下加入SSL層,HTTPS的安全基礎(chǔ)是SSL,因此加密的詳細(xì)內(nèi)容就需要SSL。 HTTPS存在不同于HTTP的默認(rèn)端口及一個(gè)加密/身份驗(yàn)證層(在HTTP與TCP之間)。HTTP協(xié)議以明文方式發(fā)送內(nèi)容,不提供任何方式的數(shù)據(jù)加密,如果攻擊者截取了Web瀏覽器和網(wǎng)站服務(wù)器之間的傳輸報(bào)文,就可以直接讀懂其中的信息,因此HTTP協(xié)議不適合傳輸一些敏感信息。
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)建的可進(jìn)行加密傳輸、身份認(rèn)證的網(wǎng)絡(luò)協(xié)議。

Socket連接與HTTP連接的不同
通常情況下Socket連接就是TCP連接,因此Socket連接一旦建立,通信雙方即可開始相互發(fā)送數(shù)據(jù)內(nèi)容,直到雙方連接斷開。但在實(shí)際應(yīng)用中,客戶端到服務(wù)器之間的通信防火墻默認(rèn)會(huì)關(guān)閉長時(shí)間處于非活躍狀態(tài)的連接而導(dǎo)致 Socket 連接斷連,因此需要通過輪詢告訴網(wǎng)絡(luò),該連接處于活躍狀態(tài)。
而HTTP連接使用的是“請求—響應(yīng)”的方式,不僅在請求時(shí)需要先建立連接,而且需要客戶端向服務(wù)器發(fā)出請求后,服務(wù)器端才能回復(fù)數(shù)據(jù)。
寫在最后
- 我一直以為HTTP和TCP是兩種不同的、但是地位對等的協(xié)議,雖然知道TCP是傳輸層,而HTTP是應(yīng)用層,但是不知道HTTP是要基于TCP連接基礎(chǔ)上的,簡單的說,TCP就是單純建立連接,不涉及任何我們需要請求的實(shí)際數(shù)據(jù),簡單的傳輸。HTTP是用來收發(fā)數(shù)據(jù),即實(shí)際應(yīng)用上來的。
- TCP是底層通訊協(xié)議,定義的是數(shù)據(jù)傳輸和連接方式的規(guī)范HTTP是應(yīng)用層協(xié)議,定義的是傳輸數(shù)據(jù)的內(nèi)容的規(guī)范HTTP協(xié)議中的數(shù)據(jù)是利用TCP協(xié)議傳輸?shù)?,所以支持HTTP也就一定支持TCP。
- HTTP支持的是www服務(wù),而TCP/IP是協(xié)議它是Internet國際互聯(lián)網(wǎng)絡(luò)的基礎(chǔ)。TCP/IP是網(wǎng)絡(luò)中使用的基本的通信協(xié)議。TCP/IP實(shí)際上是一組協(xié)議,它包括上百個(gè)各種功能的協(xié)議,如:遠(yuǎn)程登錄、文件傳輸和電子郵件等,而TCP協(xié)議和IP協(xié)議是保證數(shù)據(jù)完整傳輸?shù)膬蓚€(gè)基本的重要協(xié)議。通常說TCP/IP是Internet協(xié)議族,而不單單是TCP和IP。