1.TCP窗口是啥,原理。
2.和socket緩衝區有什麼關係
3.和拆包解包有啥關係,拆包解包又是啥
4.擁塞控制???????
發送窗口大小主要由接收端的窗口通告決定,接收端窗口通告由當前接收端剩餘多少空閒的剩餘緩存決定。
藉助於滑動窗口能夠提高TCP 數據的傳輸性能。因爲TCP 無須對每一數據段進行確認, 只需要對發送一個窗口寬度的段確認一次
一個socket的兩端,都會有send和recv兩個方法,如client發送數據到server,那麼就是客戶端進程調用send發送數據,而send的作用是將數據拷貝進入socket的內核發送緩衝區之中,然後send便會在上層返回。
也就是說send()方法返回之時,數據不一定會
發送到對端即服務器上去(和write寫文件有點類似),send()僅僅是把應用層buffer的數據拷貝進socket的內核發送buffer中,發送是TCP的事情,和send其實沒有太大關係。
接收緩衝區把數據緩存入內核,等待recv()讀取,recv()所做的工作,就是把內核緩衝區中的數據拷貝到應用層用戶的buffer裏面,並返回。若應用進程一直沒有調用recv()進行讀取的話,此數據會一直緩存在相應socket的接收緩衝區內。對於TCP,如果應用進程一直沒有讀取,接收緩衝區滿了之後,發生的動作是:收端通知發端,接收窗口關閉(win=0)。這個便是滑動窗口的實現。保證TCP套接口接收緩衝區不會溢出,從而保證了TCP是可靠傳輸。因爲對方不允許發出超過所通告窗口大小的數據。 這就是TCP的流量控制,如果對方無視窗口大小而發出了超過窗口大小的數據,則接收方TCP將丟棄它。
https://www.cnblogs.com/zlingh/p/6161088.html tcp協議頭窗口,滑動窗口,流控制,擁塞控制關係
可以知道發送窗口原滑動窗口和現滑動窗口的關係
https://blog.csdn.net/yuliantao/article/details/81559580 TCP協議詳解-滑動窗口
具體例子說明發送窗口的滑動原理,並解釋發送窗口大小由接收方控制的原理,講的很好很詳細。
https://www.cnblogs.com/woaiyy/p/3554182.html tcp窗口滑動以及擁塞控制
http://www.togogo.net/article/1351.html 淺談TCP滑動窗口機制
涉及到包,和丟包重傳機制
https://www.cnblogs.com/saryli/p/9821058.html tcp的發送緩衝區和接收緩衝區
https://blog.csdn.net/jjavaboy/article/details/80037057 TCP協議-滑動窗口、拆包和粘包
https://www.cnblogs.com/wade-luffy/p/6165671.html TCP粘包/拆包問題
https://blog.csdn.net/feng020a/article/details/60587726 tcp粘包和拆包的處理方案
https://blog.csdn.net/fgx_123456/article/details/80031821 TCP粘包拆包的產生原因分析及解決思路