很多同學(xué)發(fā)私信給我,說:餅干大佬宪巨,最近經(jīng)常被問到TCP,UDP和socket之間的聯(lián)系和區(qū)別磷杏。這個(gè)單獨(dú)說他們,我都知道捏卓,可是他們之間的聯(lián)系和區(qū)別极祸,我不知道怎么答。
其實(shí)前文中我有說過TCP和UDP,也比較過遥金,只是沒有明確說他們的聯(lián)系和區(qū)別浴捆。今天我們就介紹一下他們的聯(lián)系和區(qū)別。希望這個(gè)高頻面試題不再是阻礙你的攔路石稿械。
TCP(Transmission Control Protocol?傳輸控制協(xié)議)是一種面向連接的选泻、可靠的、基于字節(jié)流的傳輸層通信協(xié)議美莫,由IETF的RFC 793定義页眯。在簡(jiǎn)化的計(jì)算機(jī)網(wǎng)絡(luò)OSI模型中,它完成第四層傳輸層所指定的功能厢呵,用戶數(shù)據(jù)報(bào)協(xié)議(UDP)是同一層內(nèi)另一個(gè)重要的傳輸協(xié)議窝撵。
在因特網(wǎng)協(xié)議族(Internet protocol suite)中,TCP層是位于IP層之上述吸,應(yīng)用層之下的中間層。不同主機(jī)的應(yīng)用層之間經(jīng)常需要可靠的锣笨、像管道一樣的連接蝌矛,但是IP層不提供這樣的流機(jī)制,而是提供不可靠的包交換错英。
TCP的優(yōu)點(diǎn)
可靠入撒,穩(wěn)定
TCP的可靠體現(xiàn)在TCP在傳遞數(shù)據(jù)之前,會(huì)有三次握手來建立連接椭岩,而且在數(shù)據(jù)傳遞時(shí)茅逮,有確認(rèn)、窗口判哥、重傳献雅、擁塞控制機(jī)制,在數(shù)據(jù)傳完后塌计,還會(huì)斷開連接用來節(jié)約系統(tǒng)資源挺身。
TCP的缺點(diǎn)
慢,效率低锌仅,占用系統(tǒng)資源高章钾,易被攻擊
TCP在傳遞數(shù)據(jù)之前,要先建連接热芹,這會(huì)消耗時(shí)間贱傀,而且在數(shù)據(jù)傳遞時(shí),確認(rèn)機(jī)制伊脓、重傳機(jī)制府寒、擁塞控制機(jī)制等都會(huì)消耗大量的時(shí)間,而且要在每臺(tái)設(shè)備上維護(hù)所有的傳輸連接,事實(shí)上椰棘,每個(gè)連接都會(huì)占用系統(tǒng)的CPU纺棺、內(nèi)存等硬件資源。
由于TCP存在確認(rèn)機(jī)制和三次握手機(jī)制邪狞,這些是導(dǎo)致TCP容易被人利用祷蝌,實(shí)現(xiàn)DOS、DDOS帆卓、CC等攻擊巨朦。
TCP應(yīng)用場(chǎng)景
當(dāng)對(duì)網(wǎng)絡(luò)通訊質(zhì)量有要求的時(shí)候,比如:整個(gè)數(shù)據(jù)要準(zhǔn)確無(wú)誤的傳遞給對(duì)方剑令,這往往用于一些要求可靠的應(yīng)用糊啡,比如HTTP、HTTPS吁津、FTP等傳輸文件的協(xié)議棚蓄,POP、SMTP等郵件傳輸?shù)膮f(xié)議碍脏。
在日常生活中梭依,常見使用TCP協(xié)議的應(yīng)用比如:瀏覽器使用HTTP,Outlook使用POP典尾、SMTP役拴,QQ文件傳輸?shù)取?/p>
UDP 是User Datagram Protocol的簡(jiǎn)稱, 中文名是用戶數(shù)據(jù)報(bào)協(xié)議钾埂,是OSI(Open System Interconnection河闰,開放式系統(tǒng)互聯(lián)) 參考模型中一種無(wú)連接的傳輸層協(xié)議,提供面向事務(wù)的簡(jiǎn)單不可靠信息傳送服務(wù)褥紫,IETF RFC 768是UDP的正式規(guī)范姜性。UDP在IP報(bào)文的協(xié)議號(hào)是17。
UDP的優(yōu)點(diǎn)
快髓考,比TCP稍安全
UDP沒有TCP的握手污抬、確認(rèn)、窗口绳军、重傳印机、擁塞控制等機(jī)制,UDP是一個(gè)無(wú)狀態(tài)的傳輸協(xié)議门驾,所以它在傳遞數(shù)據(jù)時(shí)非成淙快。沒有TCP的這些機(jī)制奶是,UDP較TCP被攻擊者利用的漏洞就要少一些楣责。但UDP也是無(wú)法避免攻擊的竣灌,比如:UDP Flood攻擊……
UDP的缺點(diǎn)
不可靠,不穩(wěn)定
因?yàn)閁DP沒有TCP那些可靠的機(jī)制秆麸,在數(shù)據(jù)傳遞時(shí)初嘹,如果網(wǎng)絡(luò)質(zhì)量不好,就會(huì)很容易丟包沮趣。
UDP應(yīng)用場(chǎng)景
當(dāng)對(duì)網(wǎng)絡(luò)通訊質(zhì)量要求不高的時(shí)候屯烦,要求網(wǎng)絡(luò)通訊速度能盡量的快,這時(shí)就可以使用UDP房铭。在日常生活中驻龟,常見使用UDP協(xié)議的應(yīng)用比如:QQ語(yǔ)音、QQ視頻缸匪、TFTP等翁狐。
TCP和UDP使用IP協(xié)議從一個(gè)網(wǎng)絡(luò)傳送數(shù)據(jù)包到另一個(gè)網(wǎng)絡(luò)。把IP想像成一種高速公路凌蔬,它允許其它協(xié)議在上面行駛并找到到其它電腦的出口露懒。TCP和UDP是高速公路上的“卡車”,它們攜帶的貨物就是像HTTP砂心,文件傳輸協(xié)議FTP這樣的協(xié)議等懈词。
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本身就是一個(gè)協(xié)議,是從Web服務(wù)器傳輸超文本到本地瀏覽器的傳送協(xié)議谭网。
TCP和UDP是FTP汪厨,HTTP和SMTP之類使用的傳輸層協(xié)議。雖然TCP和UDP都是用來傳輸其他協(xié)議的愉择,它們卻有一個(gè)顯著的不同:TCP提供有保證的數(shù)據(jù)傳輸劫乱,而UDP不提供织中。這意味著TCP有一個(gè)特殊的機(jī)制來確保數(shù)據(jù)安全的不出錯(cuò)的從一個(gè)端點(diǎn)傳到另一個(gè)端點(diǎn),而UDP不提供任何這樣的保證衷戈。
HTTP協(xié)議
HTTP(超文本傳輸協(xié)議)是利用TCP在兩臺(tái)電腦(通常是Web服務(wù)器和客戶端)之間傳輸信息的協(xié)議狭吼。客戶端使用Web瀏覽器發(fā)起HTTP請(qǐng)求給Web服務(wù)器殖妇,Web服務(wù)器發(fā)送被請(qǐng)求的信息給客戶端刁笙。
HTTP是短連接:客戶端發(fā)送請(qǐng)求都需要服務(wù)器端回送響應(yīng).請(qǐng)求結(jié)束后,主動(dòng)釋放鏈接拉一,因此為短連接采盒。通常的做法是,不需要任何數(shù)據(jù)蔚润,也要保持每隔一段時(shí)間向服務(wù)器發(fā)送"保持連接"的請(qǐng)求磅氨。這樣可以保證客戶端在服務(wù)器端是"上線"狀態(tài)。
HTTP連接使用的是"請(qǐng)求-響應(yīng)"方式嫡纠,不僅在請(qǐng)求時(shí)建立連接烦租,而且客戶端向服務(wù)器端請(qǐng)求后晕城,服務(wù)器才返回?cái)?shù)據(jù)筒繁。
Socket協(xié)議
網(wǎng)絡(luò)上的兩個(gè)程序通過一個(gè)雙向的通信連接實(shí)現(xiàn)數(shù)據(jù)的交換,這個(gè)連接的一端稱為一個(gè)socket眼姐。
建立網(wǎng)絡(luò)通信連接至少要一對(duì)端口號(hào)(socket)者蠕。socket本質(zhì)是編程接口(API)窃祝,對(duì)TCP/IP的封裝,TCP/IP也要提供可供程序員做網(wǎng)絡(luò)開發(fā)所用的接口踱侣,這就是Socket編程接口粪小;HTTP是轎車,提供了封裝或者顯示數(shù)據(jù)的具體形式抡句;Socket是發(fā)動(dòng)機(jī)探膊,提供了網(wǎng)絡(luò)通信的能力。
好了待榔,快到年關(guān)了逞壁,各位先不要跳槽了。好好補(bǔ)習(xí)補(bǔ)習(xí)專業(yè)知識(shí)吧锐锣。明天爭(zhēng)取能跟公司提漲薪多漲一點(diǎn)腌闯。