網(wǎng)絡(luò)由下往上分為:
表示層和應(yīng)用層-- HTTP協(xié)議
會話層--
傳輸層-- TCP協(xié)議
網(wǎng)絡(luò)層-- IP協(xié)議
數(shù)據(jù)鏈路層--
物理層--
TCP/IP是傳輸層協(xié)議,主要解決數(shù)據(jù)在網(wǎng)絡(luò)中的傳輸.
Http是應(yīng)用層的協(xié)議,用于如何封裝數(shù)據(jù).傳輸數(shù)據(jù)的時候,只使用TCP/IP協(xié)議(傳輸層).如果沒有應(yīng)用層來識別數(shù)據(jù)內(nèi)容,傳輸后的協(xié)議都是無用的. 應(yīng)用層協(xié)議很多,FTP,HTTP,TELNET等,可以自己定義應(yīng)用層協(xié)議.WEB使用HTTP作傳輸層協(xié)議.以封裝HTTP文本信息,然后使用TCP/IP做傳輸層協(xié)議,將數(shù)據(jù)發(fā)送到網(wǎng)絡(luò)上.
Socket是對TCP/IP協(xié)議的封裝,Socket只是個接口,不是協(xié)議,通過Socket,我們才能使用TCP/IP協(xié)議.
當(dāng)然,除了TCP,也可以使用UDP協(xié)議來傳遞數(shù)據(jù).
三 .HTTP和Socket連接區(qū)別
1 .TCP連接
要想明白Socket,必須要理解TCP連接.
建立TCP連接的"三次握手":
第一次:客戶端向服務(wù)器發(fā)送SYN包(syn=j),同時自己處于SYN_SEND狀態(tài).
第二次:服務(wù)器端收到SYN包后,必須確認(rèn)客戶的SYN(syn=j+1),同時也發(fā)送一個SYN包(syn=k),即SYN+ACK包,此時服務(wù)器進(jìn)入SYN_RECV狀態(tài).
第三次:客戶端收到服務(wù)器發(fā)來的SYN+ACK包,就向服務(wù)器發(fā)送SYN(syn=k+1),發(fā)送完畢后,服務(wù)器和客戶端都進(jìn)入ESTABLISHED狀態(tài).完成三次握手.
握手過程中,并不傳輸數(shù)據(jù).在握手后,服務(wù)器與客戶端才開始傳輸數(shù)據(jù),理想狀態(tài)下,TCP連接一旦建立,在通訊雙方中的任何一方主動斷開連接之前,TCP連接會一直保持下去.
2 HTTP連接
HTTP最顯著的特點(diǎn):客戶端發(fā)送請求都需要服務(wù)器端回送響應(yīng).請求結(jié)束后主動釋放鏈接.
http連接就是所謂的短連接,即客戶端向服務(wù)器端發(fā)送一次請求,服務(wù)器端響應(yīng)后連接即會斷掉;.
通常的做法是,不需要任何數(shù)據(jù),也要保持每隔一段時間向服務(wù)器發(fā)送"保持連接"的請求.這樣可以保證客戶端在服務(wù)器端是"上線"狀態(tài).
四、TCP和UDP的區(qū)別
1、TCP是面向鏈接的,雖然說網(wǎng)絡(luò)的不安全不穩(wěn)定特性決定了多少次握手都不能保證連接的可靠性,但TCP的三次握手在最低限度上(實際上也很大程度上保證了)保證了連接的可靠性
而UDP不是面向連接的,UDP傳送數(shù)據(jù)前并不與對方建立連接,對接收到的數(shù)據(jù)也不發(fā)送確認(rèn)信號,發(fā)送端不知道數(shù)據(jù)是否會正確接收,當(dāng)然也不用重發(fā),所以說UDP是無連接的、不可靠的一種數(shù)據(jù)傳輸協(xié)議。
2、也正由于1所說的特點(diǎn),使得UDP的開銷更小數(shù)據(jù)傳輸速率更高,因為不必進(jìn)行收發(fā)數(shù)據(jù)的確認(rèn),所以UDP的實時性更好。