linux 網絡相關
開放互聯網參考模型
OSI
應用層
表示層
會話層
傳輸層 亂序重排,重新請求包
網絡層
數據鏈路層 數據幀
物理層 比特流
TCP/IP四層模型
應用層 FTP HTTP
傳輸層 TCP UDP
網絡層 IP ICMP IGMP
鏈路層 ARP RARP
封裝
用戶數據 應用層
APP頭部 + 用戶數據 應用層
TCP頭部 + APP頭部 + 用戶數據 傳輸層
IP頭部 + TCP頭部 + APP頭部 + 用戶數據 網絡層
以太網頭部 + IP頭部 + TCP頭部 + APP頭部 + 用戶數據 鏈路層
對等通信,協議棧
TCP<---------------->TCP
解封(分用)
從鏈路層解析頭部至對應層
用端口區分是哪個應用程序
MTU: 最大傳輸單元
IP層數據大於 MTU 要分片(自動進行)
鏈路層只識別 MAC 地址 即物理地址
IP ----> MAC 地址解析 ARP
MAC -------->IP 反向地址解析 RARP (無盤工作站)
ping ip
不是ip地址則轉成ip地址(gethostname)
發送 ICMP (ICHO包)
沒有MAC地址
廣播 ARP 請求
請求的主機保存地址並回應
根據回應發送 ICMP
三次握手,四次斷開,TCP/IP11種狀態
TCP
不可靠表現 解決方法
差錯 校驗和(網際校驗和)
丟包 超時重傳+確認機制
失序 通過序號保證
重復 通過序號保證
UDP
無連接,不可靠,相對高效
TCP 發送數據並啟動定時器,收到消息校驗正確並返回確認,在一定時間內沒有確認就進行超時重傳
滑動窗口協議:(可用於流量控制)
MSS:最大段大小 (IP層分片相關)
通告接收窗口(rwnd): 對方緩沖區
擁塞窗口(cwnd): 網絡承受能力
發送窗口去上面兩個的最小值
慢啟動閥值(ssthresh)
慢啟動階段:cwnd從1按指數增加到ssthresh
擁塞避免階段:cwnd按線性增長至擁塞,cwnd - 1, ssthress減半
大端字節序
數據高位保存於內存低地址
小端字節序
數據高位保存於內存高地址
規定大端字節序為網絡字節序
服務器維持兩個隊列,一個是完成三次握手的隊列,一個是正在進行三次握手的隊列
server init--->bind-->listen-->accept-->close
client init-->connect-->close
服務器要綁定任意地址,設置綁定地址重復利用
使用信號處理僵屍進程,用信號處理管道破裂問題
kill -l
ps -au user
netstat -an | grep post
TCP 基於字節流,無邊界,會產生粘包問題
UDP 基於消息傳輸服務,數據報
應用層向socket緩沖區寫入數據,MSS等限制,可能會分片
解決方法:
1、定長包
2、特定字符結尾邊界(FTP ‘\r\n‘)
3、加包頭記錄長度
4、其他的應用協議
ssize_t: 有符號數
size_t: 無符號數
獲取地址:IP+端口
gethostname
getpeername
linux 網絡相關