傳輸層
負責資料能夠從傳送端傳輸接收端
埠號埠號標識了乙個主機上進行通訊的不同的應用程式
在tcp/ip協議中,用「源ip」,「源埠號」,「目標ip」,「目標埠號」,「協議號」這樣乙個五元組來表示乙個通訊
(可以通過netstat -n檢視)
cat /etc/services
檢視知名埠號,我們在寫乙個程式使用埠號時,要避開這些知名埠號
乙個程序可以繫結多個埠號,但是乙個埠號不能被多個程序繫結
netstat
netstat是乙個用來檢視網路狀態的重要工具
* -n拒絕顯示別名,能顯示數字的全部轉化成數字
* -l僅列出有listen(監聽)的服務狀態
* -p顯示簡歷相關連線的程式名
* -t僅顯示tcp相關選項
* -u僅顯示udp相關選項
* -a顯示所有選項,預設不顯示listen相關
pidof
pidof+程序名
通過程序名,檢視程序id
udp協議
協議端格式
*十六位udp長度,表示整個資料報(udp首部+udp資料)的最大長度
*如果檢驗和出錯,就會直接丟棄
udp的特點
udp傳輸的過程類似於寄信
*無連線:知道對短的ip和埠號就可以直接傳輸,不需要建立連線;
*不可靠:沒有確認機制,沒有重傳機制;如果因為網路故障該段無法傳送給對方,udp協議層也不會給應用層返回任何錯誤資訊;
*面向資料報:不能夠靈活的控制讀寫資料的次數和數量
面向資料報
應用層交給udp多長的報文,udp原樣傳送,既不會拆分也不會合併;
udp的緩衝區
*udp沒有真正意義上的傳送緩衝區,呼叫sendto會直接交給核心,由核心將資料傳給網路層協議進行後續的傳輸動作;
*udp具有接收緩衝區,但是這個接收緩衝區不能保證收到的udp報文的順序和傳送udp報文的順序是一致的,如果緩衝區滿了,再次到達的udp資料就會被丟棄
udp的socket既能讀,也能寫,這個概念叫做全雙工
udp使用注意事項
我們知道udp協議首部中有乙個十六位最大長度,也就是說乙個udp能傳輸的資料最大長度是64k(包含udp首部),但是64k在當今的網際網路環境下,是乙個非常小的數字。
所以就出現了問題。如果我們需要傳輸的資料超過64k,就要在應用層手動的分包,多次傳送,並在接收端手動拼裝
基於udp的應用層協議
*nfs:網路檔案系統
*tftp:簡單檔案傳輸協議
*dhcp:動態主機配置協議
*bootp:啟動協議(用於無盤裝置啟動)
*dns:網域名稱解析協議
tcp協議
tcp全稱為傳輸控制協議
*源/目的埠號:表示資料從哪個程序來,到那個程序去;
*三十二位序號/三十二位確認序號:序列號是程序傳送的號碼,確認序號是期望返回的號碼。舉個例子,比如傳送序列號為10000,傳送五個資料,那麼如果確認序號是10006,就說明資料傳送成功,如果不是,就說明了中間有資料沒有傳送成功,保證了tcp的可靠性。
*四位tcp包頭長度:表示tcp頭部有多少個32位bit(有多少個四位元組);所以tcp頭部最大長度是15*4 = 60
*六位標誌位:urg:緊急指標是否有效
ack:確認號是否有效
psh:提示接收端應用程式立刻從tcp緩衝區把資料讀走
rst:對方要求重新建立連線;我們把寫到rst表示的稱為復位報文段
syn:請求建立連線;我們把攜帶syn標識的稱為同步報文段;
fin:通知對方,本段要關閉了,我們稱攜帶fin標識的為結束報文段
*十六位視窗大小:標誌著tcp緩衝區還剩餘多少,起到乙個流量控制的作用
*十六位校驗和:傳送端填充,crc校驗,接收端校驗不通過,則認為資料有問題,此處的檢驗和不光包含tcp首部,也包含tcp資料部分
*十六位緊急指標:標識哪部分資料是緊急資料;
傳輸層協議
流量控制 擁塞控制 1.鏈路層 處理與電纜 或其他傳輸介質 的物理介面實現 2.網路層 處理分組在網路中的活動,處理分組路由 3.運輸層 為兩台主機上的應用程式提供端到端的通訊 4.應用層 處理特定的應用程式的細節 絕大多數的網路應用程式都是客戶 伺服器模式 雙方都有乙個或多個協議進行執行 應用程式...
傳輸層協議
目錄tcp ip和osi模型的比較 相同點兩者都是以協議棧的概念為基礎 協議棧中的協議彼此互相獨立 下層對上層提供服務 不同點osi是先有模型 tcp ip先有協議,後又模型 osi是國際標準,適用於各種協議棧 tcp ip實際標準,只適用於tcp ip網路 層次數量不同 tcp ip通訊過程 tc...
167 傳輸協議 傳輸層
tcp基於tcp協議可以建立穩定連線的點對點的通訊。這種通訊方式實時 快速 安全性高,但是很占用系統的資源。tcp transfer control protocol 是面向連線的,所謂面向連線,就是當計算機雙方通訊時必需經過先建立連線,然後傳送資料,最後拆除連線三個過程。tcp在建立連線時又分三步...