生活随笔
收集整理的這篇文章主要介紹了
网络基础2-2(传输层,端口,详谈UDP)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
傳輸層
負(fù)責(zé)數(shù)據(jù)能夠從發(fā)送端傳輸接收端.
端口號(hào)
端口號(hào)(Port)標(biāo)識(shí)了一個(gè)主機(jī)上進(jìn)行通信的不同的應(yīng)用程序;在TCP/IP協(xié)議中, 用 “源IP”, “源端口號(hào)”, “目的IP”, “目的端口號(hào)”, “協(xié)議號(hào)” 這樣一個(gè)五元組來標(biāo)識(shí)一個(gè)通信(可以通過 netstat -n查看);一個(gè)端口只能被一個(gè)進(jìn)程占用,一個(gè)進(jìn)程可以使用多個(gè)端口
端口號(hào)范圍劃分
0 - 1023: 知名端口號(hào), HTTP, FTP, SSH等這些廣為使用的應(yīng)用層協(xié)議, 他們的端口號(hào)都是固定的.1024 - 65535: 操作系統(tǒng)動(dòng)態(tài)分配的端口號(hào). 客戶端程序的端口號(hào), 就是由操作系統(tǒng)從這個(gè)范圍分配的
查看知名端口
cat /etc/services
兩個(gè)問題
一個(gè)進(jìn)程是否可以bind多個(gè)端口號(hào)?
可以
因?yàn)橐粋€(gè)進(jìn)程可以打開多個(gè)文件描述符,而每個(gè)文件描述符都對應(yīng)一個(gè)端口號(hào),所以一個(gè)進(jìn)程可以綁定多個(gè)端口號(hào)一個(gè)端口號(hào)是否可以被多個(gè)進(jìn)程bind?
不可以
UDP協(xié)議
UDP協(xié)議格式
udp協(xié)議字段:
16位源端口,16位目的端口:負(fù)責(zé)端與端之間傳輸
16位校驗(yàn)和:驗(yàn)證數(shù)據(jù)的完整一致性(二進(jìn)制反碼求和)
16位udp數(shù)據(jù)報(bào)總長度:udp數(shù)據(jù)報(bào)總長度的存儲(chǔ)只有16位,意味著一個(gè)包含有頭部信息的udp數(shù)據(jù)報(bào)最大長度=65535字節(jié),意味著如果發(fā)送的數(shù)據(jù)長度大于65535-8大小,則這個(gè)數(shù)據(jù)需要用戶在應(yīng)用層進(jìn)行數(shù)據(jù)分段;因?yàn)閡dp不會(huì)在傳輸層自動(dòng)進(jìn)行數(shù)據(jù)分段
注意
16位UDP長度, 表示整個(gè)數(shù)據(jù)報(bào)(UDP首部+UDP數(shù)據(jù))的大長度;如果校驗(yàn)和(二進(jìn)制反碼求和)出錯(cuò), 就會(huì)直接丟棄;
UDP的特點(diǎn)
UDP傳輸?shù)倪^程類似于寄信.
無連接: 知道對端的IP和端口號(hào)就直接進(jìn)行傳輸, 不需要建立連接;不可靠: 沒有確認(rèn)機(jī)制, 沒有重傳機(jī)制; 如果因?yàn)榫W(wǎng)絡(luò)故障該段無法發(fā)到對方, UDP協(xié)議層也不會(huì)給應(yīng)用層 返回任何錯(cuò)誤信息,沒有粘包問題;面向數(shù)據(jù)報(bào): 不能夠靈活的控制讀寫數(shù)據(jù)的次數(shù)和數(shù)量,數(shù)據(jù)只能整條整條的交付給應(yīng)用層udp不保證數(shù)據(jù)報(bào)的有序到達(dá),需要用戶在應(yīng)用層進(jìn)行包序管理
面向數(shù)據(jù)報(bào)
應(yīng)用層交給UDP多長的報(bào)文, UDP原樣發(fā)送, 既不會(huì)拆分, 也不會(huì)合并
例如:
如果發(fā)送端調(diào)用一次sendto, 發(fā)送100個(gè)字節(jié), 那么接收端也必須調(diào)用對應(yīng)的一次recvfrom, 接收100個(gè) 字節(jié); 而不能循環(huán)調(diào)用10次recvfrom, 每次接收10個(gè)字節(jié);
UDP的緩沖區(qū)
UDP沒有真正意義上的 發(fā)送緩沖區(qū). 調(diào)用sendto會(huì)直接交給內(nèi)核, 由內(nèi)核將數(shù)據(jù)傳給網(wǎng)絡(luò)層協(xié)議進(jìn)行后 續(xù)的傳輸動(dòng)作UDP具有接收緩沖區(qū). 但是這個(gè)接收緩沖區(qū)不能保證收到的UDP報(bào)的順序和發(fā)送UDP報(bào)的順序一致; 如果 緩沖區(qū)滿了, 再到達(dá)的UDP數(shù)據(jù)就會(huì)被丟棄
UDP的socket既能讀, 也能寫, 這個(gè)概念叫做 全雙工
UDP使用注意事項(xiàng)
, UDP協(xié)議首部中有一個(gè)16位的大長度. 也就是說一個(gè)UDP能傳輸?shù)臄?shù)據(jù)大長度是64K(包含UDP首 部).64K在當(dāng)今的互聯(lián)網(wǎng)環(huán)境下, 是一個(gè)非常小的數(shù)字. 如果我們需要傳輸?shù)臄?shù)據(jù)超過64K, 就需要在應(yīng)用層手動(dòng)的分包, 多次發(fā)送, 并在接收端手動(dòng)拼裝;
基于UDP的應(yīng)用層協(xié)議
NFS: 網(wǎng)絡(luò)文件系統(tǒng)TFTP: 簡單文件傳輸協(xié)議DHCP: 動(dòng)態(tài)主機(jī)配置協(xié)議BOOTP: 啟動(dòng)協(xié)議(用于無盤設(shè)備啟動(dòng))DNS: 域名解析協(xié)議。。。。。。
總結(jié)
以上是生活随笔為你收集整理的网络基础2-2(传输层,端口,详谈UDP)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。