Advertisement

TCP序列号回绕问题及其解决方案

阅读量:

一个tcp流量的初始序列号(ISN)并非严格起始于数值0;而是通过一定概率算法随机生成;因而其值可能极大(例如达到2^32-10的数量级);即同一个tcp流量中的seq号可能会循环回到零值附近;而我们_tcp_在处理数据包丢失或顺序错乱等问题时主要依据序列号数值比较来判断;从而引发了著名的tcp序列号循环问题

在内核中提供的序列号信息用于解决序列号回绕问题;采用该方案能够有效地评估解决方案的有效性。

复制代码
    /* * The next routines deal with comparing 32 bit unsigned ints
    * and worry about wraparound (automatic with unsigned arithmetic).
    */
    static inline int before(__u32 seq1, __u32 seq2)
    {
    return (__s32)(seq1-seq2) < 0;
    }
    #define after(seq2, seq1) before(seq1, seq2)

<>

全部评论 (0)

还没有任何评论哟~