1.HTTP協(xié)議詳解
HTTP是一個(gè)屬于應(yīng)用層的面向?qū)ο蟮膮f(xié)議竞漾,由于其簡(jiǎn)潔放钦,快速的方式,是用于分布式超媒體信息系統(tǒng)蜡峰。目前在www(萬(wàn)維網(wǎng))中使用的是HTTP/1.0的第六版了袁,HTTP/1.1的規(guī)范化工作正在進(jìn)行之中。
HTTP(超文本傳輸協(xié)議)是一個(gè)基于請(qǐng)求與響應(yīng)模式的湿颅、無(wú)狀態(tài)的载绿、應(yīng)用層的協(xié)議,秤秃剑基于TCP的連接方式崭庸,HTTP1.1版本中給出一種持續(xù)連接的機(jī)制,絕大多數(shù)的Web開發(fā)谊囚,都是構(gòu)建在HTTP協(xié)議之上的Web應(yīng)用怕享。
HTTP協(xié)議的主要特點(diǎn)可概括如下:
(1)支持客戶/服務(wù)器模式。
(2)簡(jiǎn)單快速:客戶向服務(wù)器請(qǐng)求服務(wù)時(shí)镰踏,只需傳送請(qǐng)求方法和路徑函筋。請(qǐng)求方法常用的有GET、HEAD奠伪、POST跌帐。每種方法規(guī)定了客戶與服務(wù)器聯(lián)系的類型不同。由于HTTP協(xié)議簡(jiǎn)單绊率,使得HTTP服務(wù)器的程序規(guī)模小谨敛,因而通信速度很快。
(3)靈活:HTTP允許傳輸任何類型的數(shù)據(jù)對(duì)象滤否。正在傳輸?shù)念愋陀蒀ontent-Type加以標(biāo)記脸狸。
(4)無(wú)連接:無(wú)連接的含義是限制每次連接只處理一個(gè)請(qǐng)求,服務(wù)器處理完客戶的請(qǐng)求藐俺,并收到客戶的應(yīng)答后炊甲,即斷開連接。采用這種方式可以節(jié)省傳輸時(shí)間欲芹。
(5)無(wú)狀態(tài):HTTP協(xié)議是無(wú)狀態(tài)協(xié)議蜜葱。無(wú)狀態(tài)是指協(xié)議對(duì)于事務(wù)處理沒有記憶能力,缺少狀態(tài)意味著如果后續(xù)處理需要前面的信息耀石,則它必須重傳牵囤,這樣可能導(dǎo)致每次連接傳送的數(shù)據(jù)量增大。另一方面滞伟,在服務(wù)器不需要先前信息時(shí)它的應(yīng)答就較快揭鳞。
2.TCP和UDP的區(qū)別(PS:TCP和UDP都是傳輸層協(xié)議)
TCP(Transmission Control Protocol,傳輸控制協(xié)議)是基于連接的協(xié)議梆奈,也就是說野崇,在正式收發(fā)數(shù)據(jù)前,必須和對(duì)方建立可靠的連接亩钟。一個(gè)TCP連接必須要經(jīng)過三次“對(duì)話”(也稱三次“握手”)才能建立起來(lái)乓梨,這三次對(duì)話的簡(jiǎn)單過程為:①主機(jī)A向主機(jī)B發(fā)出連接請(qǐng)求數(shù)據(jù)包鳖轰;②主機(jī)B向主機(jī)A發(fā)送同意連接和要求同步(同步就是兩臺(tái)主機(jī)一個(gè)在發(fā)送,一個(gè)在接收扶镀,協(xié)調(diào)工作)的數(shù)據(jù)包蕴侣;③主機(jī)A再發(fā)出一個(gè)數(shù)據(jù)包確認(rèn)主機(jī)B的要求同步:“我現(xiàn)在發(fā)送,你來(lái)接收吧臭觉!”昆雀,這是三次對(duì)話。三次“對(duì)話”的目的是使數(shù)據(jù)包的發(fā)送和接收同步蝠筑,經(jīng)過三次“對(duì)話”之后狞膘,主機(jī)A才向主機(jī)B正式發(fā)送數(shù)據(jù)。
UDP(User Data Protocol什乙,用戶數(shù)據(jù)報(bào)協(xié)議)是與TCP相對(duì)應(yīng)的協(xié)議挽封。它是面向非連接的協(xié)議,它不與對(duì)方建立連接臣镣,而是直接就把數(shù)據(jù)包發(fā)送過去场仲。
區(qū)別:
(1)是否連接:TCP面向連接,UDP面向非連接退疫。
(2)傳輸可靠性:TCP可靠渠缕,UDP不可靠。
(3)應(yīng)用場(chǎng)合:TCP傳輸大量數(shù)據(jù)褒繁,UDP傳輸少量數(shù)據(jù)亦鳞。
(4)速度:TCP慢,UDP快棒坏。
3.服務(wù)器連接的三次握手
在TCP/IP協(xié)議中燕差,TCP協(xié)議提供可靠的連接服務(wù),采用三次握手建立一個(gè)連接坝冕。
(1)第一次握手:建立連接時(shí)徒探,客戶端發(fā)送連接請(qǐng)求到服務(wù)器,并進(jìn)入SYN_SEND狀態(tài)喂窟,等待服務(wù)器確認(rèn)测暗;
(2)第二次握手:服務(wù)器收到客戶端連接請(qǐng)求,向客戶端發(fā)送允許連接應(yīng)答磨澡,此時(shí)服務(wù)器進(jìn)入SYN_RECV狀態(tài)碗啄;
(3)第三次握手:客戶端收到服務(wù)器的允許連接應(yīng)答,向服務(wù)器發(fā)送確認(rèn)稳摄,客戶端和服務(wù)器進(jìn)入通信狀態(tài)稚字,完成三次握手
PS:所謂三次握手就是要有三次連接信息的發(fā)送/接收過程。TCP連接的建立需要進(jìn)行三次連接信息的發(fā)送/接收。
4.論Socket和HTTP協(xié)議的區(qū)別
(1)概念
HTTP:超文本傳輸協(xié)議胆描,首先它是一個(gè)協(xié)議瘫想,并且是基于TCP/IP協(xié)議基礎(chǔ)之上的應(yīng)用層協(xié)議。TCP/IP協(xié)議是傳輸層協(xié)議昌讲,主要解決數(shù)據(jù)如何在網(wǎng)絡(luò)中傳輸国夜。HTTP是基于請(qǐng)求-響應(yīng)形式并且是短連接(即客戶端向服務(wù)器端發(fā)送一次請(qǐng)求,服務(wù)器端響應(yīng)后連接即會(huì)斷掉),并且是無(wú)狀態(tài)的協(xié)議。
Socket:Socket不屬于協(xié)議范疇字逗,而是一個(gè)調(diào)用接口(API)狈网,Socket是對(duì)TCP/IP協(xié)議的封裝,通過調(diào)用Socket才能使用TCP/IP協(xié)議饶碘。Socket連接是長(zhǎng)連接目尖,理論上客戶端和服務(wù)器端一旦建立連接將不會(huì)主動(dòng)斷開此連接。Socket連接屬于請(qǐng)求-響應(yīng)形式扎运,服務(wù)端可主動(dòng)將消息推送給客戶端瑟曲。
(2)區(qū)別
簡(jiǎn)單說,瀏覽的網(wǎng)頁(yè)(網(wǎng)址以http://開頭)都是HTTP協(xié)議傳輸?shù)侥愕臑g覽器的豪治,而HTTP是基于Socket之上的洞拨。Socket是一套完成的TCP、UDP協(xié)議的接口负拟。
HTTP協(xié)議:簡(jiǎn)單對(duì)象訪問協(xié)議烦衣,對(duì)應(yīng)于應(yīng)用層,HTTP協(xié)議是基于TCP連接的掩浙。
TCP協(xié)議:對(duì)應(yīng)于傳輸層花吟。
IP協(xié)議:對(duì)應(yīng)于網(wǎng)絡(luò)層。
TCP/IP是傳輸層協(xié)議厨姚,主要解決數(shù)據(jù)如何在網(wǎng)絡(luò)中傳輸衅澈;而HTTP是應(yīng)用層協(xié)議,主要解決如何包裝數(shù)據(jù)谬墙。
Socket是對(duì)TCP/IP協(xié)議的封裝今布,Socket本身并不是協(xié)議,而是調(diào)用接口(API)拭抬,通過Socket险耀,我們才能使用TCP/IP協(xié)議。
5.利用Socket建立網(wǎng)絡(luò)連接的步驟
建立Socket連接過程分為三個(gè)步驟:服務(wù)器監(jiān)聽玖喘,客戶端請(qǐng)求甩牺,連接確認(rèn)。
(1)服務(wù)器監(jiān)聽:服務(wù)器端套接字并不定位具體的客戶端套接字累奈,而是處于等待連接的狀態(tài)贬派,實(shí)時(shí)監(jiān)控網(wǎng)絡(luò)狀態(tài)急但,等待客戶端的連接請(qǐng)求。
(2)客戶端請(qǐng)求:指客戶端的套接字提出連接請(qǐng)求搞乏,要連接到目標(biāo)是服務(wù)器端的套接字波桩。為此,客戶端的套接字必須首先描述它要連接的服務(wù)器的套接字请敦,支出服務(wù)器端套接字的地址和端口號(hào)镐躲,然后就向服務(wù)器端套接字提出連接請(qǐng)求。
(3)連接確認(rèn):當(dāng)服務(wù)器端套接字監(jiān)聽到或者說接收到客戶端套接字的連接請(qǐng)求時(shí)侍筛,就相應(yīng)客戶端套接字的請(qǐng)求萤皂,建立一個(gè)新的線程,把服務(wù)器端套接字的描述發(fā)給客戶端匣椰,一旦客戶端確認(rèn)了此描述裆熙,雙方就正式建立連接。而服務(wù)器端套接字繼續(xù)處于監(jiān)聽狀態(tài)禽笑,繼續(xù)接受其他客戶端套接字的連接請(qǐng)求入录。
PS:套接字
源IP地址和目的IP地址以及源端口號(hào)和目的端口號(hào)的組合稱為套接字。其用于標(biāo)識(shí)客戶端請(qǐng)求的服務(wù)器和服務(wù)佳镜。
它是網(wǎng)絡(luò)通信過程中端點(diǎn)的抽象表示僚稿,包含進(jìn)行網(wǎng)絡(luò)通信必須的五種信息:連接使用的協(xié)議,本地主機(jī)的IP地址蟀伸,本地進(jìn)程的協(xié)議端口蚀同,遠(yuǎn)地主機(jī)的IP地址,遠(yuǎn)地進(jìn)程的協(xié)議端口望蜡。