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。
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ā)送和接收操作。
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ù)。
第一次握手:客戶(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高。
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是面向無(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ì)更合理一些鄙麦。
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更容易穿越路由器防火墻轩端。
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ò)游戲柱嫌,銀行交互,支付屯换。
套接字(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ù)鸥跟。
建立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)求赞警。
創(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ù)端耕皮;
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編程接口吴汪。”