再讀計算機網路
一 下面三層(物理層,資料鏈路層,網路層)由網路運營商提供細節
System.out.println("...................尚未整理暫時省略");
二 應用程式負責傳輸層,應用層
2.1 UDP
UDP 使用者資料包協議。以下為使用udp為傳輸層協議的傳輸層應用以及其應用層協議。DNS,TFTP(簡單檔案傳送協議),RIP(路由資訊協議),DHCP(動態主機配置協議),SNMP(簡單網路管理協議),NFS(網路檔案系統),IGMP(多播);
UDP無連線,盡最大努力交付,面向報文,沒有擁塞控制,支援一對一,一對多,多對一,多對多通訊方式,首部開銷很小(8位元組)。
UDP首部格式。由源埠,目的埠,長度,檢驗和四部分組成。每個欄位的長度都是兩位元組。
2.2 TCP
TCP 傳輸控制協議。 TCP是傳輸層協議,以下為使用tcp為傳輸層協議的傳輸層應用以及其應用層協議。電子郵件-SMTP , 遠端終端接入 - TELENT , 全球資訊網 - HTTP , 檔案傳送-FTP ;
TCP是面向連線的傳輸層協議,點對點傳輸,提供可靠交付(無差錯,不丟失,不重複,並且按序到達),提供全雙工通訊,面向位元組流。
在java中 ,伺服器通過serverSocket.accept() 來開啟伺服器套接字連線。(設定一個埠號) ; 而客戶端通過一個套接字來新建一個socket物件來訪問伺服器的套接字。然後建立一個tcp連線。 每一條tcp連線唯一地被通訊兩端的兩個端點(即兩個套接字)所確定。
當然兩個套接字可以有多條tcp連線,但是一調tcp連線只由兩個套接字所確定。
TCP的三次握手 , 和四次揮手圖解。
2.3 TCP和UDP區別
1. tcp是面向連線,有狀態的 ; udp是無連線,無狀態的。
2. tcp是可靠傳輸,具有三次握手協議保證連線,資料傳輸結束四次分手釋放連線 ; 丟失重傳機制保證資料完整性 ; 還有擁塞控制流量控制等 ;
3. udp只是僅提供盡力交付 ; 沒有其他功能。
4. tcp頭部20位元組,udp只有8位元組。
5. 由於udp是不需要建立連線並且沒有上下文,所以udp的響應速度比tcp快。
2.4 可靠傳輸的工作原理
tcp傳送的報文是向下交給ip層來傳送的,但是IP層只是提供最大努力服務。也就是說,tcp下面的網路所提供的是不可靠傳輸,因此tcp必須採用適當的措施才能保證兩個傳輸層之間的通訊變得可靠。
2.4.1 停止等待協議
停止等待,就是每傳送完換一個分組就停止傳送,等待對方的確定,知道收到確定後在傳送下一個分組。
其中包含一個超時重傳進位制,帶有一個超時計時器。如果在計時內沒有收到確定,則在傳送一個同樣的分組,知道確定。
幾種情況分析。無差錯情況,出現差錯,確定丟失和確定遲到。
這種方式通道利用率很低。
這種可靠傳輸協議也叫做 自動重傳請求 ARQ。
2.4.2 連續ARQ協議
使用滑動視窗協議。
滑動視窗就是 對於一連串的資料報。先設定視窗大小為N , 首先把0 -(N-1)的資料報傳送,如果0的確認被收到,則視窗向前移動一個單位,則傳送N資料報,若傳送N個數據後等待一個時延後認定為超時重傳,則重傳0。
相比於停止等待協議,這種協議提高了通道利用率。主要體現在,傳送方在傳送資料報的時候也可以處理確認收到請求。
會發現 自動重傳只能夠保證資料包能夠按序的傳送到接收方,但是對於資料包本身並沒有保證,所以還需要了解tcp首部,tcp報文段首部包含對於資料包內容的描述, 接收方可以根據其完成對資料包內容完整性和真實性的檢查。進而完成可靠傳輸的實現。
2.5 TCP報文段首部
源埠 2 ;目的埠 2 ;序號 4 ;確認號(期望收到對方下一個報文段的第一個資料位元組的序號) 4 ;
資料偏移 4 ;保留 6 ;然後是六個控制位 緊急URG , 確定ACK , 推送PSH , 復位RST , 同步SYN , 終止FIN;
視窗 2 ;檢驗和 2 ;緊急指標 2 ;選項 長度可變。
所以在沒有選項這一個部分時,tcp首部長度為20位元組。
2.6 tcp的擁塞控制
僅僅是個人對於擁塞控制的簡單理解。初步學習筆記。
TCP的傳送視窗是一個很好的想法。它輔助實現可靠傳輸,通過視窗值得更改實現了流量控制;並在擁塞控制上也有一定助益。
首先介紹一下進行擁塞控制的四種演算法。 慢開始,擁塞避免,快重傳,快恢復。
2.6.1 慢開始和擁塞避免
傳送方為此一個叫做擁塞視窗cwnd的狀態變數,擁塞視窗的大小取決於網路的擁塞程度,並且動態的在變化。
傳送方讓自己的傳送視窗等於擁塞視窗。(如果接收方的接受能力減弱,傳送視窗還可能小於擁塞視窗)。
傳送方控制擁塞視窗的原則是:只要網路沒有出現擁塞,擁塞視窗就再增大一些,以便把更多的分組傳送出去。但是隻要網路出現擁塞,擁塞視窗就減小一些,以減少注入到網路中的分組數。
慢開始就是在主機開始傳送資料的時候,先探測一下,即有小到大逐漸增大發送視窗,也就是說,有小到大逐漸增大擁塞視窗數值。(沒經過一個亂刺,擁塞視窗cwnd就加倍,一個輪次時間通常就是一個RTT,往返時間)。
擁塞避免演算法就是對慢開始的一種補充。實質指,擁塞視窗cwnd按線性規律緩慢增長,一般來說cwnd大小每次+1。
在實際網路中。第一,當tcp連線時進行初始化,把擁塞視窗cwnd設定為1,(慢開始門限的初始值設定為16個報文段,即ssthresh = 16)。第二,在開始執行慢開始演算法,擁塞視窗設定為1,然後被刺收到一個ack,就把擁塞視窗加倍,直到達到門限值16。然後執行擁塞避免演算法,每次收到一個ACK時,擁塞視窗+1。
如果此時網路出現擁塞現象,則將擁塞視窗初始化為1,ssthresh修改降低,然後重新執行慢啟動演算法,再到擁塞避免演算法。
2.6.2 快重傳和快恢復
快重傳 要求 接收方沒收到一個失序的報文段後就立即發出重複請求,而不要等待自己傳送資料時才進行捎帶確認。(也就是即使傳送對未到達資料的重傳請求)
快恢復 也是針對於快重傳提出的,當傳送方連續收到 三個重複確認時,就執行乘法減小演算法。把慢開始門限ssthresh減半,並且把cwnd的值設定為ssthresh,然後執行擁塞避免演算法。
注:傳送方的cwn到一定不能超過對方給出的接受視窗值rwnd。
3 應用層
3.1 http
HTTP頭部,狀態碼,cookie,HTTP無狀態的,HTTP傳輸資料流程。