這是乙個可選的選項,並不是所有的系統都對udp資料報加以檢驗和資料(相對tcp協議的必須來說),但是rfc中標準要求,傳送端應該計算檢驗和。
udp檢驗和 覆蓋udp協議頭和資料,這和ip的檢驗和是不同的,ip協議的檢驗和只是覆蓋ip資料頭,並不覆蓋所有的資料。
tcp校驗:首部和資料的校驗和;
udp校驗:ipv4中首部和資料的校驗和,但是是可選的;ipv6必選;
ip校驗:首部校驗和;
tcp是基於流的;什麼是流呢?
udp是基於資料報;
校驗方法:二進位制求反碼相加即得和;
tcp半關閉;
nagle演算法:
由於tcp中的微小分組(比如:41byte的分組:20byte的ip頭,20byte的tcp頭和1個byte的資料)在廣域網上回增加擁塞的可能,nagle演算法就是優化該問題的;
該演算法要求乙個tcp連線上最多只能有乙個未被確認的未完成的小分組,在該分組的確認到達之前不能傳送其他的小分組;相反,tcp收集這些少量的分組,並在確認到來時以乙個分組的方式發出去;
該演算法的優越之處在於它是自適應的:確認到達得越快,資料也就傳送的越快;
tcp的成塊資料流:
正常的資料流通常是採用「隔乙個報文確認」的策略;就是說:s端收到報文段1,先不進行ack;而是等到收到報文段2之後,再ack回應客戶端;
滑動視窗協議:(視窗的大小是不斷變化的; )
在c端儲存,並受s端和c端共同控制;
假設先將待傳送的位元組編號:1、2、3、4、5、6、7、8、9、0、10、11、12;由三次握手建立連線之後,得到s端的tcp的buf大小即滑動視窗的初始化大小(假設為6byte);
a:此時滑動視窗的左邊沿是:1號,右邊沿是:6號;此時傳送1、2、3、號之後,滑動視窗位置不變,
b:s端向c端確認ack=4;win=6;此時視窗左邊移動到7號處,右邊移動到:4+6即10處;
c:接著:第二段報文傳送4、5、6、7號,此時視窗不動,因為只有再收到s端的ack之後才改變位置、大小;
d:s端確認第二段報文,ack=8,win=3;說明s端的tcp快取只有乙個byte空間;滑動視窗左邊移動到8號處,右邊移動到3+8即11號處;
特殊情況:
1、如果c端收到乙個滑動視窗左邊沿向左邊移動的ack;則認為該ack是乙個重複的ack;直接丟棄;(這是因為,滑動視窗的左邊是由s端確認收到序號控制,因此不可能向左邊移動)
2、如果左邊沿到達右邊沿,則稱其為乙個零視窗,此時傳送方不能夠傳送任何資料;
push標誌:
在每乙個tcp例子中,我們都看到了push標誌,其用途是c方使用該標誌通知s方將所有接收到的資料全部提交給接收程序;這裡的資料 包括:與push一起傳送的資料以及接收方tcp以及為接收程序接收到的其他資料;
慢啟動:(slow start)
慢啟動為c方tcp增加了另乙個視窗:擁塞視窗(congestion window,簡寫:cwnd);
1、當與s端建立tcp連線時,cwnd被初始化為1個報文端;此後沒收到乙個s端的ack,cwnd就增加乙個報文段(cwnd以位元組為單位,但是慢啟動以報文段大小為單位進行增加);
2、c端取擁塞視窗與通告視窗中的最小值作為傳送上限;
擁塞視窗是c端式用的流量控制,通過視窗是s端的流量控制;
具體的內容「建立tcp超時和重傳機制」
網路通訊之BIO
bio 同步並阻塞 傳統阻塞型 伺服器實現模式為乙個連線乙個執行緒,即客戶端有連線請求時伺服器端就需要啟動乙個執行緒進行處理,如果這個連線不做任何事情會造成不必要的執行緒開銷.bio常用類 datagrampacket datagramsocket封包 datagramsocket ds new d...
網路通訊之TCP UDP
1 udp乙個socket接收緩衝區的預設值 cat proc sys net core rmem default 212992,單位byte,208kb 3 每個udp socket都有乙個接收緩衝區,沒有傳送緩衝區,從概念上來說就是只要有資料就發,不管對方是否可以正確接收,所以不緩衝,不需要傳送...
CRC校驗和網路通訊中writen readn函式
1.對網路傳輸的資料進行crc32校驗。1 include 2 include 3 include 45 static const uint32 t crc32tab 7172 73 uint32 t crc32 const unsigned char buf,uint32 t size 7481 ...