最近在學(xué)習(xí)python編程,自己稍微整理了一下這兩天的學(xué)習(xí)心得
一、什么是網(wǎng)絡(luò)編程協(xié)議
? ? ? ?首先網(wǎng)絡(luò)編程協(xié)議的目的是為了方便使用與管理骤星,避免出現(xiàn)網(wǎng)絡(luò)擁堵。倘若沒(méi)有固定協(xié)議爆哑,就有可能會(huì)出現(xiàn)洞难,如下圖的情況,完全無(wú)法進(jìn)行溝通揭朝,放在網(wǎng)絡(luò)上就會(huì)出現(xiàn)網(wǎng)絡(luò)堵塞队贱,所以我們必須制定一些方案和協(xié)議來(lái)統(tǒng)一。
二萝勤、分層模型
? ?1) 網(wǎng)絡(luò)分層架構(gòu)
? ? ? ? ? ??? ?為了減少協(xié)議設(shè)計(jì)的復(fù)雜性露筒,大多數(shù)網(wǎng)絡(luò)模型均采用分層的方式來(lái)組織。每一層都有自己的功能敌卓,就像建筑物一樣慎式,每一層都靠下一層支持。每一層利用下一層提供的服務(wù)來(lái)為上一層提供服務(wù)趟径,本層服務(wù)的實(shí)現(xiàn)細(xì)節(jié)對(duì)上層屏蔽瘪吏。
越下面的層,越靠近硬件蜗巧,越上面的層掌眠,越接近用戶。主要四層模式為:應(yīng)用層幕屹,運(yùn)輸層蓝丙,網(wǎng)絡(luò)層,鏈路層望拖。
2)鏈路層
? ? 鏈路層指定的就是mac地址渺尘,每臺(tái)電腦出廠時(shí)配置的網(wǎng)卡對(duì)應(yīng)地址都會(huì)不同,這個(gè)是一開(kāi)始就決定好的说敏,無(wú)法改變鸥跟。
3)網(wǎng)絡(luò)層
? ? 網(wǎng)絡(luò)層主要指的就是ip地址,通過(guò)用戶指的ip地址進(jìn)行相對(duì)應(yīng)的訪問(wèn)操作(ip由來(lái)等細(xì)節(jié)不做細(xì)講,自行百度)
4)運(yùn)輸層
? ? 通過(guò)每個(gè)應(yīng)用不同的端口號(hào)進(jìn)行傳輸医咨,端口號(hào)范圍是從0到65535枫匾,每個(gè)端口都對(duì)應(yīng)電腦上不同的進(jìn)程,windows用戶可以在命令提示符中輸入netstat -ano看到拟淮,在本地地址冒號(hào)后面干茉,即可看見(jiàn),Linux中輸入ps -auo即可惩歉,一個(gè)端口號(hào)只能服務(wù)一個(gè)進(jìn)程等脂。其中80端口分配給HTTP服務(wù),21端口分配給FTP服務(wù)撑蚌。就類似固定電話上遥,10010,10086等。
5) 應(yīng)用層
? ? 經(jīng)過(guò)鏈路層争涌,網(wǎng)絡(luò)層粉楚,傳輸層,最后就是通過(guò)前面是三個(gè)來(lái)確認(rèn)到最后需要傳輸?shù)降膽?yīng)用中去
三亮垫、UDP
1)udp簡(jiǎn)介
? ??????UDP是 User Datagram Protocol 的簡(jiǎn)稱模软, 中文名是用戶數(shù)據(jù)報(bào)協(xié)議,是一個(gè)簡(jiǎn)單的面向數(shù)據(jù)報(bào)的運(yùn)輸層協(xié)議饮潦,在網(wǎng)絡(luò)中用于處理數(shù)據(jù)包燃异,是一種無(wú)連接的協(xié)議。UDP不提供可靠性的傳輸继蜡,它只是把應(yīng)用程序傳給 IP 層的數(shù)據(jù)報(bào)發(fā)送出去回俐,但是并不能保證它們能到達(dá)目的地。由于 UDP 在傳輸數(shù)據(jù)報(bào)前不用在客戶和服務(wù)器之間建立一個(gè)連接稀并,且沒(méi)有超時(shí)重發(fā)等機(jī)制仅颇,故而傳輸速度很快。
2)udp通信模型
? ? 主要客戶端通過(guò)sendto(msg, (ip,port))訪問(wèn)碘举,并發(fā)送消息忘瓦,但不會(huì)確認(rèn)是否到達(dá),recvfrom()用來(lái)接收消息引颈,并且會(huì)堵塞耕皮,如果一直沒(méi)有消息送來(lái),則會(huì)一直堵塞下去蝙场。服務(wù)器通過(guò)bind((ip,port))綁定ip地址和端口明场,注意是元組,.close用來(lái)關(guān)閉連接。(注意李丰,網(wǎng)路傳輸中都是通過(guò)字節(jié)的方式進(jìn)行傳輸,所以再接收和發(fā)送時(shí)都要主要轉(zhuǎn)碼和解碼)
四逼泣、TCP
1)tcp簡(jiǎn)介
????TCP(Transmission Control Protocol 傳輸控制協(xié)議)是一種面向連接的趴泌、可靠的舟舒、基于字節(jié)流的傳輸層通信協(xié)議。TCP通信需要經(jīng)過(guò)創(chuàng)建連接嗜憔、數(shù)據(jù)傳送秃励、終止連接三個(gè)步驟。TCP通信模型中吉捶,在通信開(kāi)始之前夺鲜,一定要先建立相關(guān)的鏈接,才能發(fā)送數(shù)據(jù)呐舔,類似于生活中打電話币励。
2)tcp通信模型
? ? tcp客服端:通過(guò)connect((ip, port))來(lái)請(qǐng)求連接,send()進(jìn)行發(fā)送消息珊拼,recv()進(jìn)行接受消息
????tcp服務(wù)器: 通過(guò)bind((ip, port))綁定ip和端口食呻,ip不寫(xiě)則代表默認(rèn)本機(jī)所有地址,listen()控制客服端的連接數(shù)量澎现,accept()等待阻塞仅胞,一直到客戶端的到來(lái),recv()接受消息剑辫,send()發(fā)送消息干旧。在做多用戶聊天時(shí)一定要注意accept()的位置,因?yàn)閱尉€程每次有客戶端連接都會(huì)把上次的連接斷開(kāi)妹蔽,這里涉及到了多線程椎眯,目前正在學(xué)習(xí)中。讹开。盅视。
五、TCP和UDP的優(yōu)缺點(diǎn)
1)tcp的優(yōu)點(diǎn)
? ? ? ? 1.1?TCP采用發(fā)送應(yīng)答機(jī)制
????????????????????TCP發(fā)送的每個(gè)報(bào)文段都必須得到接收方的應(yīng)答才認(rèn)為這個(gè)TCP報(bào)文段傳輸成功旦万。
? ? ? ? 1.2?超時(shí)重傳
????????????????????????發(fā)送端發(fā)出一個(gè)報(bào)文段之后就啟動(dòng)定時(shí)器闹击,如果在定時(shí)時(shí)間內(nèi)沒(méi)有收到應(yīng)答就重新發(fā)送這個(gè)報(bào)文段。TCP為了保證不發(fā)生丟包成艘,就給每個(gè)包一個(gè)序號(hào)赏半,同時(shí)序號(hào)也保證了傳送到接收端實(shí)體的包的按序接收。然后接收端實(shí)體對(duì)已成功收到的包發(fā)回一個(gè)相應(yīng)的確認(rèn)(ACK)淆两;如果發(fā)送端實(shí)體在合理的往返時(shí)延(RTT)內(nèi)未收到確認(rèn)断箫,那么對(duì)應(yīng)的數(shù)據(jù)包就被假設(shè)為已丟失將會(huì)被進(jìn)行重傳。
? ? ? ? ? ?1.3??錯(cuò)誤校驗(yàn)
????????????????????????????TCP用一個(gè)校驗(yàn)和函數(shù)來(lái)檢驗(yàn)數(shù)據(jù)是否有錯(cuò)誤秋冰;在發(fā)送和接收時(shí)都要計(jì)算校驗(yàn)和仲义。
? ? ? ? ? ? 1.4??流量控制和阻塞管理
????????????????????????????????流量控制用來(lái)避免主機(jī)發(fā)送得過(guò)快而使接收方來(lái)不及完全收下。
2)udp的優(yōu)點(diǎn)
????????傳輸速度快,傳輸穩(wěn)定埃撵,避免丟包赵颅,相對(duì)而言,udp會(huì)更加的安全一些
3)tcp不同與udp
????面向連接(確認(rèn)有創(chuàng)建三方交握暂刘,連接已創(chuàng)建才作傳輸饺谬。)
????有序數(shù)據(jù)傳輸
????重發(fā)丟失的數(shù)據(jù)包
????舍棄重復(fù)的數(shù)據(jù)包
????無(wú)差錯(cuò)的數(shù)據(jù)傳輸
????阻塞/流量控制
4) 優(yōu)劣
? ? udp在傳輸方面比tcp更勝一籌,但是不能保證穩(wěn)定到達(dá)用戶谣拣,tcp傳輸慢募寨,但是能保證消息傳輸?shù)接脩簦侨菀讈G包森缠,導(dǎo)致數(shù)據(jù)被抓包
以上就是個(gè)人這兩天學(xué)習(xí)udp和tcp的一些看法拔鹰,還有很多不足的的地方,希望諒解辅鲸,如有不足格郁,歡迎留言。我也是學(xué)習(xí)python沒(méi)多久独悴,來(lái)和大家一起分享一下例书,希望和大家一起進(jìn)步。還有tcp的三次握手刻炒,四次揮手决采,就沒(méi)在此處提了,有需求的朋友可以去百度一下或者谷歌一下坟奥。