TCP/UDP寂恬、IP 、Socket莱没、HTTP筆記

1.1 TCP/IP協(xié)議組

TCP/IP協(xié)議(傳輸控制協(xié)議)由網(wǎng)絡(luò)層的IP協(xié)議和傳輸層的TCP協(xié)議組成

IP層負(fù)責(zé)網(wǎng)絡(luò)主機(jī)的定位,數(shù)據(jù)傳輸?shù)穆酚?由IP地址可以唯一的確定Internet上的一臺(tái)主機(jī)初肉。

TCP層負(fù)責(zé)面向應(yīng)用的可靠的或費(fèi)可靠的數(shù)據(jù)傳輸機(jī)制,這是網(wǎng)絡(luò)編程的主要對(duì)象饰躲。

TCP/IP是個(gè)協(xié)議組,可分為三個(gè)層次:網(wǎng)絡(luò)層,傳輸層和應(yīng)用層:

網(wǎng)絡(luò)層:IP協(xié)議牙咏、ICMP協(xié)議、ARP協(xié)議嘹裂、RARP協(xié)議和BOOTP協(xié)議

傳輸層:TCP協(xié)議與UDP協(xié)議眠寿;

應(yīng)用層:FTP、HTTP焦蘑、TELNET盯拱、SMTP、DNS等協(xié)議

HTTP是應(yīng)用層協(xié)議例嘱,其傳輸都是被包裝成TCP協(xié)議傳輸狡逢。可以用Socket實(shí)現(xiàn)HTTP拼卵。Socket是實(shí)現(xiàn)傳輸層協(xié)議的一種編程API,可以是TCP奢浑,也可以是UDP。

1.2 TCP

TCP(Transmission Control Protocol)腋腮,即傳輸控制協(xié)議雀彼,提供的是面向連接、可靠的字節(jié)流服務(wù)即寡。當(dāng)客戶(hù)和服務(wù)器彼此交換數(shù)據(jù)前徊哑,必須先在雙方之間建立一個(gè)TCP連接,之后才能傳輸數(shù)據(jù)聪富。TCP提供超時(shí)重發(fā)莺丑,丟棄重復(fù)數(shù)據(jù),檢驗(yàn)數(shù)據(jù),流量控制等功能梢莽,保證數(shù)據(jù)能從一端傳到另一端萧豆。理想狀態(tài)下,TCP連接一旦建立昏名,在通信雙方中的任何一方主動(dòng)關(guān)閉連接前涮雷,TCP連接都將被一直保持下去。斷開(kāi)連接時(shí)服務(wù)器和客戶(hù)端均可以主動(dòng)發(fā)起斷開(kāi)TCP連接的請(qǐng)求轻局。

TCP是一種面向連接的保證可靠傳輸?shù)膮f(xié)議份殿。通過(guò)TCP協(xié)議,得到的是一個(gè)順序的無(wú)差錯(cuò)的數(shù)據(jù)流嗽交。發(fā)送方和接收方的成對(duì)的兩個(gè)Socket之間必須建立連接,以便在TCP協(xié)議的基礎(chǔ)上進(jìn)行通信颂斜,當(dāng)一個(gè)Socket(通常都是Server Socket)等待建立連接時(shí)夫壁,另一個(gè)Socket可以要求進(jìn)行連接,一旦這兩個(gè)Socket連接起來(lái)沃疮,它們就可以進(jìn)行雙向數(shù)據(jù)傳輸盒让,雙方都可以進(jìn)行發(fā)送和接收操作。

TCP特點(diǎn)

1.TCP是面向連接的協(xié)議,通過(guò)三次握手建立連接,通訊完成時(shí)要拆除連接贱田,由于TCP是面向連接協(xié)議建芙,所以只能用于點(diǎn)對(duì)點(diǎn)的通訊。而且建立連接也需要消耗時(shí)間和開(kāi)銷(xiāo)趋观。2.TCP傳輸數(shù)據(jù)無(wú)大小限制,進(jìn)行大數(shù)據(jù)傳輸。3.TCP是一個(gè)可靠的協(xié)議同木,它能保證接收方能夠完整正確地接收到發(fā)送方發(fā)送的全部數(shù)據(jù)。

TCP的三次握手

第一次握手:客戶(hù)端發(fā)送syn包(syn=j)到服務(wù)器跛十,并進(jìn)入SYN_SEND狀態(tài)彤路,等待服務(wù)器確認(rèn);第二次握手:服務(wù)器收到syn包芥映,必須確認(rèn)客戶(hù)的SYN(ack=j+1)洲尊,同時(shí)自己也發(fā)送一個(gè)SYN包(syn=k),即SYN+ACK包奈偏,此時(shí)服務(wù)器進(jìn)入SYN_RECV狀態(tài)坞嘀;第三次握手:客戶(hù)端收到服務(wù)器的SYN+ACK包,向服務(wù)器發(fā)送確認(rèn)包ACK(ack=k+1)惊来,此包發(fā)送完畢姆吭,客戶(hù)端和服務(wù)器進(jìn)入ESTABLISHED狀態(tài),完成三次握手唁盏;

【適用情況】

TCP發(fā)送的包有序號(hào)内狸,對(duì)方收到包后要給一個(gè)反饋检眯,如果超過(guò)一定時(shí)間還沒(méi)收到反饋就自動(dòng)執(zhí)行超時(shí)重發(fā),因此TCP最大的優(yōu)點(diǎn)是可靠昆淡。一般網(wǎng)頁(yè)(http)锰瘸、郵件(SMTP)、遠(yuǎn)程連接(Telnet)昂灵、文件(FTP)傳送就用TCP

TCP在網(wǎng)絡(luò)通信上有極強(qiáng)的生命力避凝,例如遠(yuǎn)程連接(Telnet)和文件傳輸(FTP)都需要不定長(zhǎng)度的數(shù)據(jù)被可靠地傳輸。但是可靠的傳輸是要付出代價(jià)的眨补,對(duì)數(shù)據(jù)內(nèi)容正確性的檢驗(yàn)必然占用計(jì)算機(jī)的處理時(shí)間和網(wǎng)絡(luò)的帶寬管削,因此TCP傳輸?shù)男什蝗鏤DP高。

1.3 UDP

UDP(User Datagram Protocol),即用戶(hù)數(shù)據(jù)報(bào)協(xié)議撑螺,是一個(gè)無(wú)連接的簡(jiǎn)單的面向數(shù)據(jù)報(bào)的運(yùn)輸層協(xié)議含思。UDP不提供可靠性,它只是把應(yīng)用程序傳給IP層的數(shù)據(jù)報(bào)發(fā)送出去甘晤,但是并不能保證它們能到達(dá)目的地含潘。由于UDP在傳輸數(shù)據(jù)報(bào)前不用在客戶(hù)端和服務(wù)器之間建立一個(gè)連接,且沒(méi)有超時(shí)重發(fā)等機(jī)制线婚,固而傳輸速度很快遏弱。

UDP是一種面向無(wú)連接的協(xié)議,每個(gè)數(shù)據(jù)報(bào)都是一個(gè)獨(dú)立的信息塞弊,包括完整的源地址或目的地址漱逸,它在網(wǎng)路上以任何可能的路徑傳往目的地,因此能否到達(dá)目的地游沿,到達(dá)目的地的時(shí)間已經(jīng)內(nèi)容的正確性都是不能被保證的虹脯。

UDP特點(diǎn):

UDP是面向無(wú)連接的通訊協(xié)議,UDP數(shù)據(jù)包括目的端口號(hào)和源端口號(hào)信息奏候,由于通訊不需要連接循集,所以可以實(shí)現(xiàn)廣播發(fā)送。

UDP傳輸數(shù)據(jù)時(shí)有大小限制蔗草,每個(gè)被傳輸?shù)臄?shù)據(jù)報(bào)必須限定在64KB之內(nèi)咒彤。

UDP是一個(gè)不可靠的協(xié)議,發(fā)送方所發(fā)送的數(shù)據(jù)報(bào)并不一定以相同的次序到達(dá)接收方咒精。

【適用情況】

UDP是面向消息的協(xié)議镶柱,通訊時(shí)不需要建立連接,數(shù)據(jù)的傳輸自然是不可靠的模叙,UDP一般多用于多點(diǎn)通訊和實(shí)時(shí)的數(shù)據(jù)業(yè)務(wù)歇拆,比如語(yǔ)音廣播、視頻、QQ故觅、TFTP(簡(jiǎn)單文件傳送)厂庇、SNMP(簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議)、RTP(實(shí)時(shí)傳送協(xié)議)RIP(路由信息協(xié)議输吏,如報(bào)告股票市場(chǎng)权旷,航空信息)、DNS(域名解釋?zhuān)┕峤ΑW⒅厮俣攘鲿场?/p>

UDP操作簡(jiǎn)單拄氯,而且僅需要較少的監(jiān)護(hù),因此通常用于局域網(wǎng)高可靠性的分散系統(tǒng)中client/server應(yīng)用程序它浅。例如視頻會(huì)議系統(tǒng)译柏,并不要求音頻視頻數(shù)據(jù)絕對(duì)的正確,只要保證連貫性就可以了姐霍,這種情況下顯然使用UDP會(huì)更合理一些鄙麦。

1.4 TCP和UDP區(qū)別

TCP是面向流字符的,數(shù)據(jù)流間無(wú)邊界邮弹;UDP是面向分組的,分組間有明確的邊界蚓聘。

對(duì)于TCP腌乡,發(fā)送一串?dāng)?shù)字(1,2夜牡,3与纽,4,5)塘装,接收時(shí)有可能變成兩次(1急迂,2)和(2,4蹦肴,5)僚碎,或者變成任意接收方式,協(xié)議棧只保證接收順序正確阴幌;UDP發(fā)送一個(gè)分組勺阐,接收方或者接收完全失敗,如果成功整個(gè)分組都會(huì)接收到矛双。

TCP是面向連接的渊抽,UDP是無(wú)連接的。類(lèi)比于打電話和發(fā)電報(bào)的關(guān)系议忽。

TCP建立一個(gè)連接需要3次握手IP數(shù)據(jù)包懒闷,斷開(kāi)連接需要4次握手。另外斷開(kāi)連接時(shí)發(fā)起方可能進(jìn)入TIME_WAIT狀態(tài)長(zhǎng)達(dá)數(shù)分鐘(視系統(tǒng)設(shè)置,windows一般為120秒)愤估,在此狀態(tài)下連接(端口)無(wú)法被釋放

TCP是可靠的帮辟,通過(guò)數(shù)據(jù)校驗(yàn)保證發(fā)送和接收到的數(shù)據(jù)是一致的;UDP是不可靠的灵疮,發(fā)送一串?dāng)?shù)字分組(1织阅,2,3)可能接收到時(shí)就變成(1震捣,0荔棉,0)了,做UDP連接時(shí)需要自己做數(shù)據(jù)校驗(yàn)蒿赢。

TCP數(shù)據(jù)是有序的润樱,以什么順序發(fā)送的數(shù)據(jù),接收時(shí)同樣會(huì)按照此順序羡棵;UDP是無(wú)序的壹若,發(fā)出(1,2皂冰,3)店展,有可能按照(1,3秃流,2)的順序收到赂蕴。應(yīng)用程序必須自己做分組排序。

TCP因?yàn)榻⑦B接舶胀、釋放連接概说、IP分組校驗(yàn)排序等需要額外工作,速度較UDP慢許多嚣伐。TCP適合傳輸數(shù)據(jù)糖赔,UDP適合流媒體。

UDP比TCP更容易穿越路由器防火墻轩端。

1.5 Socket

Socket通常也稱(chēng)作“套接字”放典,用于描述IP地址和端口,是一個(gè)通信鏈的句柄基茵。網(wǎng)絡(luò)上的兩個(gè)程序通過(guò)一個(gè)雙向的通訊連接實(shí)現(xiàn)數(shù)據(jù)的交換刻撒,這個(gè)雙向鏈路的一端稱(chēng)為一個(gè)Socket,一個(gè)Socket由一個(gè)IP地址和一個(gè)端口號(hào)唯一確定。應(yīng)用程序通常通過(guò)“套接字”向網(wǎng)絡(luò)發(fā)送請(qǐng)求或者應(yīng)答網(wǎng)絡(luò)請(qǐng)求耿导。Socket是TCP/IP協(xié)議的一個(gè)十分流行的編程界面声怔,但是,Socket所支持的協(xié)議種類(lèi)也不光TCP/IP一種舱呻,因此兩者之間是沒(méi)有必然聯(lián)系的醋火。

Socket通訊過(guò)程:服務(wù)器監(jiān)聽(tīng)某個(gè)端口是否有連接請(qǐng)求悠汽,客戶(hù)端向服務(wù)端發(fā)送連接請(qǐng)求,服務(wù)端收到連接請(qǐng)求向客戶(hù)端發(fā)出接收信息芥驳,這樣一個(gè)連接就建立起來(lái)了柿冲。客戶(hù)端和服務(wù)端都可以相互發(fā)送消息與對(duì)方進(jìn)行通訊兆旬。

Socket是應(yīng)用層與TCP/IP協(xié)議族通信的中間軟件抽象層假抄,它是一組接口。在設(shè)計(jì)模式中丽猬,Socket其實(shí)就是一個(gè)門(mén)面模式宿饱,它把復(fù)雜的TCP/IP協(xié)議族隱藏在Socket接口后面,對(duì)用戶(hù)來(lái)說(shuō)脚祟,一組簡(jiǎn)單的接口就是全部谬以,讓Scoket去組織數(shù)據(jù),以符合指定的協(xié)議由桌。

由于通常情況下Socket連接就是TCP連接为黎,因此Socket連接一旦建立,通信雙方即可開(kāi)始相互發(fā)送數(shù)據(jù)內(nèi)容行您,直到雙方連接斷開(kāi)铭乾。但在實(shí)際網(wǎng)絡(luò)應(yīng)用中,客戶(hù)端到服務(wù)器之間的通信往往需要穿越多個(gè)中間節(jié)點(diǎn)娃循,例如路由器炕檩、網(wǎng)關(guān)、防火墻等淮野,大部分防火墻默認(rèn)會(huì)關(guān)閉長(zhǎng)時(shí)間處于非活躍狀態(tài)的連接而導(dǎo)致Socket連接斷連捧书,因此需要通過(guò)輪詢(xún)告訴網(wǎng)絡(luò)吹泡,該連接處于活躍狀態(tài)骤星。

優(yōu)點(diǎn):

1.傳輸數(shù)據(jù)為字節(jié)級(jí),傳輸數(shù)據(jù)可自定義爆哑,數(shù)據(jù)量小洞难。相應(yīng)的移動(dòng)端開(kāi)發(fā),手機(jī)費(fèi)用低2.傳輸數(shù)據(jù)時(shí)間短揭朝,性能高3.適合C/S之間信息實(shí)時(shí)交互4.可以加密队贱,數(shù)據(jù)安全性高

缺點(diǎn):

1.需要對(duì)傳輸?shù)臄?shù)據(jù)進(jìn)行解析,轉(zhuǎn)化為應(yīng)用級(jí)的數(shù)據(jù)2.對(duì)開(kāi)發(fā)人員的開(kāi)發(fā)水平要求高3.相對(duì)于Http協(xié)議傳輸潭袱,增加了開(kāi)發(fā)量

適用場(chǎng)景:

網(wǎng)絡(luò)游戲柱嫌,銀行交互,支付屯换。

1.套接字(socket)概念

套接字(socket)是通信的基石编丘,是支持TCP/IP協(xié)議的網(wǎng)絡(luò)通信的基本操作單元与学。它是網(wǎng)絡(luò)通信過(guò)程中端點(diǎn)的抽象表示,包括進(jìn)行網(wǎng)絡(luò)通信必需的五種信息:連接使用的協(xié)議嘉抓、本地主機(jī)的IP地址索守、本地進(jìn)程的協(xié)議端口、遠(yuǎn)地主機(jī)的IP地址抑片,遠(yuǎn)地進(jìn)程的協(xié)議端口卵佛。

應(yīng)用層通過(guò)傳輸層進(jìn)行數(shù)據(jù)通信時(shí),TCP會(huì)遇到同時(shí)為多個(gè)應(yīng)用程序進(jìn)程提供并發(fā)服務(wù)的問(wèn)題敞斋。多個(gè)TCP連接或多個(gè)應(yīng)用程序進(jìn)程可能需要通過(guò)同一個(gè)TCP協(xié)議端口傳輸數(shù)據(jù)截汪。為了區(qū)別不同的應(yīng)用程序進(jìn)程和連接,許多計(jì)算機(jī)操作系統(tǒng)為應(yīng)用程序與TCP/IP協(xié)議交互提供了套接字(Socket)接口渺尘。應(yīng)用層可以和傳輸層通過(guò)Socket接口挫鸽,區(qū)分來(lái)自不同應(yīng)用程序進(jìn)程或網(wǎng)絡(luò)連接的通信,實(shí)現(xiàn)數(shù)據(jù)傳輸?shù)牟l(fā)服務(wù)鸥跟。

2.建立socket連接

建立Socket連接至少需要一對(duì)套接字丢郊,其中一個(gè)運(yùn)行于客戶(hù)端,稱(chēng)為ClientSocket 医咨,另一個(gè)運(yùn)行于服務(wù)器端枫匾,稱(chēng)為ServerSocket。

套接字之間的連接過(guò)程分為三個(gè)步驟:服務(wù)器監(jiān)聽(tīng)拟淮,客戶(hù)端請(qǐng)求干茉,連接確認(rèn)。

服務(wù)器監(jiān)聽(tīng):服務(wù)器端套接字并不定位具體的客戶(hù)端套接字很泊,而是處于等待連接的狀態(tài)角虫,實(shí)時(shí)監(jiān)控網(wǎng)絡(luò)狀態(tài),等待客戶(hù)端的連接請(qǐng)求

客戶(hù)端請(qǐng)求:指客戶(hù)端的套接字提出連接請(qǐng)求委造,要連接的目標(biāo)是服務(wù)器端的套接字戳鹅。為此,客戶(hù)端的套接字必須首先描述它要連接的服務(wù)器的套接字昏兆,指出服務(wù)器端套接字的地址和端口號(hào)枫虏,然后就向服務(wù)器端套接字提出連接請(qǐng)求。

連接確認(rèn):當(dāng)服務(wù)器端套接字監(jiān)聽(tīng)到或者說(shuō)接收到客戶(hù)端套接字的連接請(qǐng)求時(shí)爬虱,就響應(yīng)客戶(hù)端套接字的請(qǐng)求隶债,建立一個(gè)新的線程,把服務(wù)器端套接字的描述發(fā)給客戶(hù)端跑筝,一旦客戶(hù)端確認(rèn)了此描述死讹,雙方就正式建立連接。而服務(wù)器端套接字繼續(xù)處于監(jiān)聽(tīng)狀態(tài)曲梗,繼續(xù)接收其他客戶(hù)端套接字的連接請(qǐng)求赞警。

3.Socket連接與TCP連接

創(chuàng)建Socket連接時(shí)逛腿,可以指定使用的傳輸層協(xié)議,Socket可以支持不同的傳輸層協(xié)議(TCP或UDP)仅颇,當(dāng)使用TCP協(xié)議進(jìn)行連接時(shí)单默,該Socket連接就是一個(gè)TCP連接

【適用情況】

很多情況下,需要服務(wù)器端主動(dòng)向客戶(hù)端推送數(shù)據(jù)忘瓦,保持客戶(hù)端與服務(wù)器數(shù)據(jù)的實(shí)時(shí)與同步搁廓。此時(shí)若雙方建立的是Socket連接,服務(wù)器就可以直接將數(shù)據(jù)傳送給客戶(hù)端耕皮;

1.6 HTTP

HTTP(Hypertext Transfer Protocol )協(xié)議是建立在TCP協(xié)議之上的一種應(yīng)用境蜕,HTTP連接使用的是“請(qǐng)求—響應(yīng)”的方式,不僅在請(qǐng)求時(shí)需要先建立TCP連接凌停,而且需要客戶(hù)端向服務(wù)器發(fā)出請(qǐng)求請(qǐng)求中包含請(qǐng)求方法粱年、URI、協(xié)議版本以及相關(guān)的MIME樣式的消息罚拟,服務(wù)器端才能回復(fù)數(shù)據(jù)台诗。服務(wù)器響應(yīng)包含消息的協(xié)議版本、一個(gè)成功和失敗碼以及相關(guān)的MIME式樣的消息赐俗。在請(qǐng)求結(jié)束后拉队,會(huì)主動(dòng)釋放連接。從建立連接到關(guān)閉連接的過(guò)程稱(chēng)為“一次連接”阻逮。由于HTTP在每次請(qǐng)求結(jié)束后都會(huì)主動(dòng)釋放連接粱快,因此HTTP連接是一種“短連接”,要保持客戶(hù)端程序的在線狀態(tài)叔扼,需要不斷地向服務(wù)器發(fā)起連接請(qǐng)求事哭。通常的做法是即使不需要獲得任何數(shù)據(jù),客戶(hù)端也保持每隔一段固定的時(shí)間向服務(wù)器發(fā)送一次“保持連接”的請(qǐng)求瓜富,服務(wù)器在收到該請(qǐng)求后對(duì)客戶(hù)端進(jìn)行回復(fù)鳍咱,表明知道客戶(hù)端“在線”。若服務(wù)器長(zhǎng)時(shí)間無(wú)法收到客戶(hù)端的請(qǐng)求食呻,則認(rèn)為客戶(hù)端“下線”流炕,若客戶(hù)端長(zhǎng)時(shí)間無(wú)法收到服務(wù)器的回復(fù)澎现,則認(rèn)為網(wǎng)絡(luò)已經(jīng)斷開(kāi)仅胞。

為了獲得適當(dāng)?shù)膫鬏斔俣龋瑒t需要TCP花費(fèi)額外的回路鏈接時(shí)間(RTT)剑辫。每一次鏈接的建立需要這種經(jīng)常性的開(kāi)銷(xiāo)干旧,而其并不帶有實(shí)際有用的數(shù)據(jù),只是保證鏈接的可靠性妹蔽。因此HTTP/1.1提出了可持續(xù)鏈接的實(shí)現(xiàn)方法:HTTP/1.1將只建立一次TCP的鏈接而重復(fù)地使用它傳輸一系列的請(qǐng)求/響應(yīng)消息椎眯,因此減少了鏈接建立的次數(shù)和經(jīng)常性的鏈接開(kāi)銷(xiāo)挠将。

結(jié)論:HTTP是應(yīng)用層協(xié)議,其傳輸都是被包裝成TCP協(xié)議傳輸编整√蛳。可以用SOCKET實(shí)現(xiàn)HTTP。SOCKET是實(shí)現(xiàn)傳輸層協(xié)議的一種編程API掌测,可以是TCP内贮,也可以是UDP。

優(yōu)點(diǎn):

1.基于應(yīng)用級(jí)的接口使用方便2.要求的開(kāi)發(fā)水平不高汞斧,容錯(cuò)性強(qiáng)

缺點(diǎn):

1.傳輸速度慢夜郁,數(shù)據(jù)包大。2.如實(shí)現(xiàn)實(shí)時(shí)交互粘勒,服務(wù)器性能壓力大3.數(shù)據(jù)傳輸安全性差

適用場(chǎng)景:

公司OA服務(wù)竞端,互聯(lián)網(wǎng)服務(wù)

【適用情況】

若雙方建立的是HTTP連接,則服務(wù)器需要等到客戶(hù)端發(fā)送一次請(qǐng)求后才能將數(shù)據(jù)傳回給客戶(hù)端庙睡,因此事富,客戶(hù)端定時(shí)向服務(wù)器端發(fā)送連接請(qǐng)求,不僅可以保持在線乘陪,同時(shí)也是在“詢(xún)問(wèn)”服務(wù)器是否有新的數(shù)據(jù)赵颅,如果有就將數(shù)據(jù)傳給客戶(hù)端。

1.7 網(wǎng)絡(luò)協(xié)議總結(jié)

網(wǎng)絡(luò)由下往上分為

物理層暂刘、數(shù)據(jù)鏈路層饺谬、網(wǎng)絡(luò)層、傳輸層谣拣、會(huì)話層募寨、表示層和應(yīng)用層

通過(guò)初步的了解,知道IP協(xié)議對(duì)應(yīng)于網(wǎng)絡(luò)層森缠,TCP協(xié)議對(duì)應(yīng)于傳輸層拔鹰,而 HTTP協(xié)議對(duì)應(yīng)于應(yīng)用層,

三者從本質(zhì)上來(lái)說(shuō)沒(méi)有可比性

socket則是對(duì)TCP/UDP協(xié)議的封裝和應(yīng)用(程序員層面上)贵涵。

也可以說(shuō)列肢,TPC/UDP協(xié)議是傳輸層協(xié)議,主要解決數(shù)據(jù)如何在網(wǎng)絡(luò)中傳輸宾茂,而HTTP是應(yīng)用層協(xié)議瓷马,主要解決如何包裝數(shù)據(jù)。

關(guān)于TCP/IP和HTTP協(xié)議的關(guān)系跨晴,網(wǎng)絡(luò)有一段比較容易理解的介紹

我們?cè)趥鬏敂?shù)據(jù)時(shí)欧聘,可以只使用(傳輸層)TCP/IP協(xié)議,但是那樣的話端盆,如果沒(méi)有應(yīng)用層怀骤,便無(wú)法識(shí)別數(shù)據(jù)內(nèi)容

如果想要使傳輸?shù)臄?shù)據(jù)有意義费封,則必須使用到應(yīng)用層協(xié)議。

應(yīng)用層協(xié)議有很多蒋伦,比如HTTP弓摘、FTP、TELNET等痕届,也可以自己定義應(yīng)用層協(xié)議衣盾。

CSDN上有個(gè)比較形象的描述

HTTP是轎車(chē),提供了封裝或者顯示數(shù)據(jù)的具體形式;Socket是發(fā)動(dòng)機(jī)爷抓,提供了網(wǎng)絡(luò)通信的能力势决。

實(shí)際上,傳輸層的TCP是基于網(wǎng)絡(luò)層的IP協(xié)議的蓝撇,而應(yīng)用層的HTTP協(xié)議又是基于傳輸層的TCP協(xié)議的果复,而Socket本身不算是協(xié)議,就像上面所說(shuō)渤昌,它只是提供了一個(gè)針對(duì)TCP或者UDP編程的接口虽抄。

WEB使用HTTP協(xié)議作應(yīng)用層協(xié)議,以封裝HTTP文本信息独柑,然后使用TCP/IP做傳輸層協(xié)議將它發(fā)到網(wǎng)絡(luò)上迈窟。

實(shí)際上,Socket跟TCP/IP協(xié)議沒(méi)有必然的聯(lián)系

Socket編程接口在設(shè)計(jì)的時(shí)候忌栅,就希望也能適應(yīng)其他的網(wǎng)絡(luò)協(xié)議车酣。所以說(shuō),Socket的出現(xiàn)只是使得程序員更方便地使用TCP/IP協(xié)議棧而已索绪,是對(duì)TCP/IP協(xié)議的抽象湖员,從而形成了我們知道的一些最基本的函數(shù)接口,比如create瑞驱、listen娘摔、connect、accept唤反、send凳寺、read和write等等。

網(wǎng)絡(luò)有一段關(guān)于socket和TCP/IP協(xié)議關(guān)系的說(shuō)法比較容易理解

“TCP/IP與UDP只是一個(gè)協(xié)議棧彤侍,就像操作系統(tǒng)的運(yùn)行機(jī)制一樣肠缨,必須要具體實(shí)現(xiàn),同時(shí)還要提供對(duì)外的操作接口拥刻。這個(gè)就像操作系統(tǒng)會(huì)提供標(biāo)準(zhǔn)的編程接口怜瞒,比如win32編程接口一樣父泳,TCP/IP也要提供可供程序員做網(wǎng)絡(luò)開(kāi)發(fā)所用的接口般哼,這就是Socket編程接口吴汪。”

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蒸眠,一起剝皮案震驚了整個(gè)濱河市漾橙,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌楞卡,老刑警劉巖霜运,帶你破解...
    沈念sama閱讀 218,682評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異蒋腮,居然都是意外死亡淘捡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)池摧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)焦除,“玉大人,你說(shuō)我怎么就攤上這事作彤”炱牵” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,083評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵竭讳,是天一觀的道長(zhǎng)创葡。 經(jīng)常有香客問(wèn)我,道長(zhǎng)绢慢,這世上最難降的妖魔是什么灿渴? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,763評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮胰舆,結(jié)果婚禮上逻杖,老公的妹妹穿的比我還像新娘。我一直安慰自己思瘟,他們只是感情好荸百,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著滨攻,像睡著了一般够话。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上光绕,一...
    開(kāi)封第一講書(shū)人閱讀 51,624評(píng)論 1 305
  • 那天女嘲,我揣著相機(jī)與錄音,去河邊找鬼诞帐。 笑死欣尼,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播钙态,決...
    沈念sama閱讀 40,358評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼册倒!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起驻子,我...
    開(kāi)封第一講書(shū)人閱讀 39,261評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎崇呵,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體演熟,經(jīng)...
    沈念sama閱讀 45,722評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年芒粹,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了大溜。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,030評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡钦奋,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出付材,到底是詐尸還是另有隱情,我是刑警寧澤厌衔,帶...
    沈念sama閱讀 35,737評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站富寿,受9級(jí)特大地震影響睬隶,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜页徐,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評(píng)論 3 330
  • 文/蒙蒙 一苏潜、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧变勇,春花似錦恤左、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,941評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)戳气。三九已至,卻和暖如春授嘀,著一層夾襖步出監(jiān)牢的瞬間物咳,已是汗流浹背锣险。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,057評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工蹄皱, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人芯肤。 一個(gè)月前我還...
    沈念sama閱讀 48,237評(píng)論 3 371
  • 正文 我出身青樓巷折,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親崖咨。 傳聞我的和親對(duì)象是個(gè)殘疾皇子锻拘,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容