網絡編程
- 什麼是端口號?
端口號(port)是傳輸層協議的內容.
①、端口號是一個32位的整數;
②、端口號用來標識一個進程, 告訴操作系統, 當前的這個數據要交給哪一個進程來處理;
③、IP地址 + 端口號能夠標識網絡上的某一臺主機的某一個進程;一個端口號只能被一個進程佔用.
一個進程可以綁定多個端口號; 但是一個端口號不能被多個進程綁定;
socket編程
【socket 常見API】
一、DatagramSocket類
二、ServerSocket類【TCP】
三、Socket類
網絡協議
認識UDP協議
UDP(User Datagram Protocol 用戶數據報協議):不保證安全,性能較好(UDP傳輸的過程類似於寄信)
①、傳輸層協議:有接收緩衝區,沒有發送緩衝區
②、無連接:知道對端的IP和端口號就直接進行傳輸, 不需要建立連接;
③、不可靠傳輸:沒有確認應答機制、超時重傳機制、連接管理機制
④、面向數據報:最大不超過64k,不能夠靈活的控制讀寫數據的次數和數量
UDP的socket既能讀, 也能寫, 這個概念叫做全雙工
⋙基於UDP的應用層協議
NFS: 網絡文件系統
TFTP: 簡單文件傳輸協議
DHCP: 動態主機配置協議
BOOTP: 啓動協議(用於無盤設備啓動)
DNS: 域名解析協議
認識TCP協議
TCP(Transmission Control Protocol 傳輸控制協議):對數據的傳輸進行詳細的控制。
①、傳輸層協議
②、有連接
③、可靠傳輸
④、面向字節流
URG: 緊急指針是否有效
ACK: 確認號是否有效
PSH: 提示接收端應用程序立刻從TCP緩衝區把數據讀走
RST: 對方要求重新建立連接; 我們把攜帶RST標識的稱爲復位報文段
SYN: 請求建立連接; 我們把攜帶SYN標識的稱爲同步報文段FIN: 通知對方, 本端要關閉了, 我們稱攜帶FIN標識的爲結束報文段
基於TCP應用層協議:
HTTP、HTTPS、SSH、Telnet、 FTP、 SMTP
TCP爲什麼安全?
一、確認應答(ACK)機制
序號+確認號實現 : 每一個ACK都帶有對應的確認序列號, 意思是告訴發送者, 我已經收到了哪些數據; 下一次你從哪裏開始發.
如上圖所示,可以簡單理解爲
二、超時重傳機制
1、系統基於TCP協議實現,動態計算報文的最大生存時間(MSL),超時時間設置爲2MSL;
2、作用:超過超時時間,表示丟包(發送數據報、接收確認數據報),需要重新發送數據報(系統中發送緩衝區保存有數據,可以重發)
三、連接管理機制
在正常情況下, TCP要經過三次握手建立連接, 四次揮手斷開連接
1、建立連接:都是單方面建立連接
(以前一個學長總結的三次握手如圖所示,這樣很好理解)
2、關閉連接
CLOSE _WAIT狀態:服務端程序沒有調用close方法,導致出現大量的連接處於CLOSE_ WAIT狀態,代表半關閉,是一種bug
1、在第三次數據傳輸,服務端發送FIN請求到客戶端,客戶端處於TIME_ _WAIT,爲什麼不能設置爲CLOSED?
答:第四次ACK響應報文可能丟包,導致服務端無法關閉連接,需要服務端重新發送FIN請求,所以客戶端必須等待最大超時時間(2MSL)
2、TIME_ WAIT爲什麼是2MSL?
答:返回的ACK傳輸時間+服務端重新發送FIN的傳輸時間
3、發送端、接收端:單次數據發送時,存在發送端發送數據到接收端。在多次數據發送時,雙方可以是發送端,又可以是接收端
1、滑動窗口
處於發送端,提高性能:
窗口大小:指的是無需等待確認應答而可以繼續發送數據的最大值.上圖的窗口大小就是4000個字節(四個段).
①、依賴ack響應報文中的窗口大小字段
②、依賴擁塞控制窗口大小
ack響應報文中,攜帶下一個序號是多少。—> 表示在此序號之前的所有數據都已經接收到
窗口的滑動:
依賴ack響應報文中的下一個序號來進行滑動,而下一一個序號是多少,又依賴接收到的連續報文的最大序號
【原理】
操作系統內核爲了維護這個滑動窗口,需要開闢發送緩衝區來記錄當前還有哪些數據沒有應答;只有確認應答過的數據,才能從緩衝區刪掉:
接收緩衝區保存有響應ack數據的信息,可以根據ack丟包進行重發 這種機制被稱爲“高速重發控制"也叫"快重傳”.
2、流量控制
TCP支持根據接收端的處理能力, 來決定發送端的發送速度:
①、接收端:通過TCP協議頭中的“窗口大小”字段,告訴發送端,發送數據的大小。
②、目的:接收端接收能力有限,爲了防止接收緩衝區被打滿,再接收數據就直接丟棄。使用窗口大小可以告訴發送端發送數據的大小。
3、擁塞控制
- 因爲網絡上有很多的計算機可能當前的網絡狀態就已經比較擁堵.在不清楚當前網絡狀態下,貿然發送大量的數據,是很有可能引起雪.上加霜的.
- TCP引入慢啓動機制,先發少量的數據,探探路,摸清當前的網絡擁堵狀態再決定按照多大的速度傳輸數據;
【原理】
擁塞窗口初始值設爲1,以慢啓動指數級增長的方式,達到一定閾值轉變爲線性增長的方式
擁塞窗口增長速度, 是指數級別的. “慢啓動” 只是指初使時慢, 但是增長速度非常快.TCP擁塞控制這樣的過程, 就好像熱戀的感覺
當TCP開始啓動的時候, 慢啓動閾值等於窗口最大值;在每次超時重發的時候, 慢啓動閾值會變成原來的一半, 同時擁塞窗口置回1;
4、延遲應答機制
1、原理:
接收到多個數據報時,不針對每條數據報響應ack,而是延遲一定時間, 這樣接收緩衝區數據很快被處理,可用空間就更大,返回的窗口大小字段就可以設置的更大,使網絡吞吐量更大,傳輸效率更高。
2、延遲的依據:
(1)、 數量
(2)、時間都是由系統決定
5、粘包問題
【解決辦法】
明確兩個包之間的邊界(應用層用戶程序中使用協議來進行數據的解析/格式化)
UDP不存在粘包問題
6、心臟檢測體制(瞭解)
分佈式項目、集羣:類似在應用層程序中實現類似TCP超時重傳機制的功能,目的是判斷連接是否還存活
7、MTU
如果一個數據包從以太網路由到撥號鏈路上數據包長度大於撥號鏈路的MTU了,則需要對數據包進行分片;
數據封裝,到數據鏈路層,會根據MTU協議進行分片/拆包發送;
原理:使用IP協議頭中的字段
爲什麼TCP這麼複雜? 因爲要保證可靠性, 同時又儘可能的提高性能.
①、可靠性:
- 校驗和
- 序列號(按序到達)
- 確認應答
- 超時重發
- 連接管理
- 流量控制
- 擁塞控制
②、提高性能:
- 滑動窗口
- 快速重傳
- 延遲應答
- 捎帶應答
③、其他:
- 定時器(超時重傳定時器, 保活定時器, TIME_WAIT定時器等)
TCP/UDP對比
- TCP用於可靠傳輸的情況, 應用於文件傳輸, 重要狀態更新等場景;
- UDP用於對高速傳輸和實時性要求較高的通信領域, 例如,
早期的QQ, 視頻傳輸等. 另外UDP可以用於廣播;