รับค่าปัจจุบัน / ค่าเริ่มต้นของ TCP initcwnd บน Linux


9

ฉันสามารถจัดการค่าดังกล่าวด้วย:

ip route change ... initcwnd 10

แล้วมีข้อเสนอแนะกับ:

ip route show

แต่สิ่งที่เกี่ยวกับค่าเริ่มต้นก่อนการแก้ไขใด ๆ มีวิธีสอบถามค่าจากระบบหรือไม่

หรือคุณสามารถให้การอ้างอิงที่ถูกต้องซึ่งแสดงค่าฮาร์ดโค้ดที่เป็นค่าเริ่มต้นสำหรับเคอร์เนลแต่ละเวอร์ชันได้หรือไม่?

คำตอบ:


10

ฉันไม่รู้จริงๆ แต่ดูเหมือนว่านี่เป็นข้อมูลอ้างอิงที่ถูกต้อง

โหนก:

$ grep -A 2 initcwnd `find /usr/src/linux/include -type f -iname '*h'`

ออก:

/usr/src/linux/include/net/tcp.h:
/* TCP initial congestion window as per draft-hkchu-tcpm-initcwnd-01 */
#define TCP_INIT_CWND          10

ใช่การ grepping รหัสเป็นความคิดที่ดีเสมอ!
cYrus

6

ฉันไม่สามารถบอกได้ว่าฉัน 100% แน่ใจว่านี่ควรเป็นคำตอบ, buuut, บ่อยครั้งที่มันมาssเป็นตัวเลือกที่ดีในการรับข้อมูลบางอย่างเช่น:

 ss -nli|fgrep cwnd
     westwood rto:1000 mss:536 cwnd:10
     westwood rto:1000 mss:536 cwnd:10
     westwood rto:1000 mss:536 cwnd:10

-nเป็นเรื่องปกติที่จะกำจัดการแก้ไข DNS ที่น่ารำคาญ-lเรายึดติดกับซ็อกเก็ตฟังเท่านั้นและ-i(กุญแจ) คือ "แสดงข้อมูล TCP ภายใน" ดังที่เห็นได้ทั้งอัลกอริธึมความแออัดและค่าเริ่มต้น cwnd จะแสดงขึ้น


2

หากฉันเข้าใจคุณอย่างถูกต้องคุณกำลังมองหาค่าเริ่มต้นของsnd_cwndพารามิเตอร์ที่กำหนดเมื่อซ็อกเก็ต TCP เริ่มต้น

ดูเหมือนว่าเริ่มต้นด้วยเคอร์เนล linux 2.6.39แมโครTCP_INIT_CWNDถูกนำมาใช้ในlinux / include / net / tcp.hซึ่งจะเติมค่าsnd_cwndเมื่อเริ่มต้นซ็อกเก็ต TCP

ฉันรู้ที่รหัสนี้อยู่ในเคอร์เนลสำหรับIPv4และน่าเสียดายที่ดูเหมือนจะไม่ใช้แมโครใด ๆ เพื่อเติมค่าสำหรับเมล็ดที่เก่ากว่า2.6.39

/* net/ipv4/tcp_ipv4.c from 2.6.37 kernel */
static int tcp_v4_init_sock(struct sock *sk)
{
        struct inet_connection_sock *icsk = inet_csk(sk);
        struct tcp_sock *tp = tcp_sk(sk);

        ....
        ....
        ....

        /* So many TCP implementations out there (incorrectly) count the
         * initial SYN frame in their delayed-ACK and congestion control
         * algorithms that we must have the following bandaid to talk
         * efficiently to them.  -DaveM
         */
        tp->snd_cwnd = 2;

        ....
        ....
        ....
}

มีรหัส init ที่คล้ายกันสำหรับฟังก์ชั่นIPv6ข้างtcp_v6_init_sock()ในnet/ipv6/tcp_ipv6.c

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.