Score:0

ส่ง IGMP v3 JOIN แล้ว แต่ไม่มีทราฟฟิกจากสวิตช์

ธง gr

ฉันกำลังพยายามเข้าร่วมสตรีมมัลติคาสต์ IGMP จากเครื่อง Centos 8 แต่หลังจากส่ง JOIN แล้ว ไม่มีการรับส่งข้อมูลที่มาจากสวิตช์

การเชื่อมต่อที่เรียบง่าย:

MUX <-----------> cisco3850 <--------> เซ็นโตส8
192.168.117.13 192.168.117.21

สวิตช์อัปสตรีม (cisco catalyst 3850) ป้อน MPEG-TS เป็น 239.1.1.1:4000 จาก MUX

ฉันได้ลองทั้งสองอย่างแล้ว โซแคท และโปรแกรมของฉันเองในการเปิดซ็อกเก็ต เข้าร่วมสตรีม และเปิดซ็อกเก็ตค้างไว้ ทั้งคู่ส่งข้อความเข้าร่วม IGMP เดียวกันกับที่ยืนยันโดย wireshark:

โปรโตคอลการจัดการกลุ่มอินเทอร์เน็ต
    [เวอร์ชัน IGMP: 3]
    ประเภท: รายงานการเป็นสมาชิก (0x22)
    จอง: 00
    เช็คซัม: 0xe9fb [ถูกต้อง]
    [สถานะเช็คซัม: ดี]
    จอง: 0000
    Num บันทึกกลุ่ม: 1
    บันทึกกลุ่ม: 239.1.1.1 เปลี่ยนเป็นโหมดไม่รวม
        ประเภทเรคคอร์ด: เปลี่ยนเป็นโหมดไม่รวม (4)
        Aux ข้อมูลเลน: 0
        จำนวน Src: 0
        ที่อยู่แบบหลายผู้รับ: 239.1.1.1

โดยใช้ เพิ่มเส้นทาง ip ฉันสร้างเส้นทางสำหรับกลุ่มมัลติคาสต์ไปยังอินเทอร์เฟซ:

ลิงก์ขอบเขต 224.0.0.0/4 dev eth1
ลิงก์ขอบเขต 225.0.0.0/8 dev eth1
239.0.0.0/8 dev ลิงค์ขอบเขต eth1

และ แมว /proc/net/igmp แสดงว่าเข้าร่วมกลุ่มแล้ว:

แมว /proc/net/igmp
Idx Device : นับจำนวนผู้ใช้ Querier Group Timer Reporter
3 eth1 : 2 V3
                                030101E1 1 0:00000000 0
                                010000E0 1 0:00000000 0

ฉัน สงสัย นี่เป็นปัญหาเกี่ยวกับสวิตช์มากกว่าปัญหาของ Linux แต่ลูกค้า (ซึ่งเป็นเจ้าของสวิตช์) บอกว่าทุกอย่างเรียบร้อยดี

ฉันสามารถทำอะไรได้อีกในฝั่ง Linux เพื่อตรวจสอบ/แก้ไขปัญหานี้

หากเป็นปัญหาที่สวิตช์แล้วล่ะก็ ต้องกำหนดค่าอะไรที่นั่น (จำเป็นต้องอธิบายให้ลูกค้าทราบ)


สำหรับการอ้างอิงโปรแกรมของฉันที่เข้าร่วมและเปิดซ็อกเก็ตไว้มีลักษณะดังนี้:

// การตรวจสอบข้อผิดพลาดถูกละไว้สำหรับความกะทัดรัด
fd = ซ็อกเก็ต (PF_INET, SOCK_DGRAM, IPPROTO_IP);
setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(yes);

memset(&saddr, 0, sizeof(saddr));
saddr.sin_family = PF_INET;
saddr.sin_addr.s_addr = mcastAddr;
saddr.sin_port = htons (พอร์ต);

ผูก(fd, (struct sockaddr *)&saddr, sizeof(saddr);

โครงสร้าง ip_mreq mcastReq;
mcastReq.imr_multiaddr.s_addr = mcastAddr;
&mcastReq.imr_interface.s_addr = interfaceAddr;

setsockopt(ถุงเท้า, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mcastReq, sizeof(mcastReq);
Score:0
ธง gr

ในท้ายที่สุด สวิตช์ของลูกค้าไม่สามารถ/จะไม่เปิดใช้งาน IGMPv3 ดังนั้นเราจึงตั้งค่าเครื่องของเราให้ใช้ IGMP v2 โดยสร้างไฟล์ภายใต้ /etc/sysctl.d.

จากนั้น JOIN จะทำงาน แต่ Linux ไม่ตอบสนองต่อการสอบถามสมาชิกแบบหลายผู้รับ ดังนั้นสวิตช์จึงหยุดสตรีมหลังจากผ่านไป 1-2 นาที (แม้ว่าเราจะมี net.ipv4.conf.default.rp_filter ตั้งค่าเป็นศูนย์

ปรากฎว่าปิดการตรวจสอบเส้นทางกลับโดยสมบูรณ์ เราจำเป็นต้องตั้งค่าทั้งหมด rp_filter การตั้งค่าเป็นศูนย์ (รวมถึงการแสดงรายการอินเทอร์เฟซอย่างชัดเจน)

# ตั้งค่าเวอร์ชัน IGMP สำหรับ eth1
# ตั้งเป็น '2' หรือ '3' ขึ้นอยู่กับสิ่งที่เปิดใช้งานในสวิตช์
net.ipv4.conf.eth1.force_igmp_version = 2

# ปิดการตรวจสอบเส้นทางต้นทาง
# นอกจาก 90-torque.conf ให้ตั้งค่า eth1 ให้ละเว้นอย่างชัดเจน
# การตรวจสอบเส้นทางกลับ
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.eth1.rp_filter = 0

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา