Стек TCP/IP в ядре Linux

Я реализую собственный протокол TCP как LKM. Мне нужно отправить, помимо обычных пакетов, один пользовательский пакет каждый RTT, чтобы передать некоторую информацию получателю. Но я не могу понять, как определить начало/конец каждого RTT или раунда передачи.

Любые указатели или предложения, которые могут помочь?


person ali    schedule 13.01.2012    source источник


Ответы (1)


Проверь это:

http://www.spinics.net/lists/newbies/msg47478.html

И поиск исходного кода ядра (особенно ветки net/ipv4/) для подписи «srtt»:

сеть/ipv4/tcp_input.c:

/* Called to compute a smoothed rtt estimate. The data fed to this
 * routine either comes from timestamps, or from segments that were
 * known _not_ to have been retransmitted [see Karn/Partridge
 * Proceedings SIGCOMM 87]. The algorithm is from the SIGCOMM 88
 * piece by Van Jacobson.
 * NOTE: the next three routines used to be one big routine.
 * To save cycles in the RFC 1323 implementation it was better to break
 * it up into three procedures. -- erics
 */
static void tcp_rtt_estimator(struct sock *sk, long mrtt_us)
{
        struct tcp_sock *tp = tcp_sk(sk);
        long m = mrtt_us; /* RTT */
        u32 srtt = tp->srtt_us;

и вот еще один пример, который устанавливает/сбрасывает поле srtt с помощью функции jiffies():

if (crtt > tp->srtt_us) {
            /* Set RTO like tcp_rtt_estimator(), but from cached RTT. */
            crtt /= 8 * USEC_PER_MSEC;
            inet_csk(sk)->icsk_rto = crtt + max(2 * crtt, tcp_rto_min(sk));
    } else if (tp->srtt_us == 0) {
            /* RFC6298: 5.7 We've failed to get a valid RTT sample from
             * 3WHS. This is most likely due to retransmission,
             * including spurious one. Reset the RTO back to 3secs
             * from the more aggressive 1sec to avoid more spurious
             * retransmission.
             */
            tp->rttvar_us = jiffies_to_usecs(TCP_TIMEOUT_FALLBACK);
            tp->mdev_us = tp->mdev_max_us = tp->rttvar_us;

            inet_csk(sk)->icsk_rto = TCP_TIMEOUT_FALLBACK;
    }
person Peter Teoh    schedule 04.03.2015