天天看點

網絡通信之校驗

這是一個可選的選項,并不是所有的系統都對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逾時和重傳機制”

    

繼續閱讀