ขนาด "in-the-wire" ของเฟรมอีเธอร์เน็ตคืออะไร? 1518 หรือ 1542


22

ตามตารางที่นี่มันบอกว่า MTU = 1500 bytes และส่วนของ payload คือ 1500 - 42 bytes หรือ 1458 bytes (<- นี่มันผิดจริงๆ!) ตอนนี้คุณต้องเพิ่มส่วนหัว IPv4 และ UDP ซึ่งเป็น 28 ไบต์ (20 IP + 8 UDP) นั่นทำให้ข้อความแอปพลิเคชันสูงสุดที่ฉันสามารถทำได้คือ 1430 ไบต์! แต่ด้วยการค้นหาหมายเลขนี้ในอินเทอร์เน็ตฉันเห็น 1472 แทน ฉันคำนวณผิดตรงนี้หรือเปล่า

สิ่งที่ฉันต้องการค้นหาคือข้อความแอปพลิเคชันสูงสุดที่ฉันสามารถส่งได้โดยไม่ต้องเสี่ยงกับการแตกแฟรกเมนต์ ไม่ใช่ 1500 แน่นอนเพราะมันมีส่วนหัวของเฟรม ใครช่วยได้บ้าง


ความสับสนคือ PAYLOAD อาจมีขนาดใหญ่ถึง 1500 ไบต์และนั่นคือ MTU ดังนั้นขนาดในสายสำหรับน้ำหนักบรรทุกของ 1500 คืออะไร? จากตารางนั้นสามารถมีขนาดใหญ่ถึง 1542 ไบต์

ข้อความในแอปสูงสุดที่ฉันสามารถส่งได้คือ 1472 (1500 - 20 (ip) - 8 (udp)) สำหรับขนาดลวดสูงสุดที่ 1542 มันทำให้ฉันประหลาดใจว่าสิ่งต่าง ๆ จะซับซ้อนได้อย่างไรเมื่อมันง่ายจริงๆ และฉันยังไม่ได้รู้ว่ามีใครมาด้วยหมายเลข 1518 ถ้าตารางบอกว่า 1542


คำถามจริงที่นี่คือสิ่งที่คุณหมายถึง "ในขนาดลวด" และคุณจะทำอย่างไรกับข้อมูลนี้ คุณพยายามคำนวณแพ็กเก็ตต่อวินาทีหรือไม่
Mike Pennington

@MikePennington กำลังพยายามหาเวลา transite ในสาย ด้วยขนาดแพ็คเก็ตและความเร็วอีเธอร์เน็ต (10 กิกะบิต) คุณสามารถคำนวณได้
chrisapotek

คำตอบ:


26

แผนภาพใน Wikipedia นั้นแย่มาก หวังว่าสิ่งที่ฉันจะเขียนมีความชัดเจนมากขึ้น


เพย์โหลดสูงสุดใน 802.3 อีเธอร์เน็ตคือ 1500 ไบต์
นี่คือข้อมูลที่คุณพยายามส่งผ่านสาย (และสิ่งที่ MTU อ้างถึง)
[payload]<- 1500 ไบต์

เพย์โหลดถูกห่อหุ้มในอีเธอร์เน็ตเฟรม (ซึ่งเพิ่ม MAC ต้นทาง / ปลายทาง, แท็ก VLAN, ความยาวและ CRC Checksum นี่คือทั้งหมด 22 ไบต์ของ "ข้อมูลเพิ่มเติม"
[SRC+DST+VLAN+LENGTH+[payload]+CRC]<- 1522 ไบต์

Frame ถูกส่งผ่านสาย - ก่อนที่การ์ดอีเธอร์เน็ตของคุณจะทำหน้าที่ยืนขึ้นและตะโกนดัง ๆ เพื่อให้แน่ใจว่าไม่มีใครใช้สาย (CSMA / CD) - นี่คือตัวคั่นล่วงหน้าและเริ่มต้นของเฟรม (SFD) - เพิ่มอีก 8 ไบต์ดังนั้นตอนนี้เรามี:
[Preamble+SFD+[Ethernet Frame]]<- 1530 ไบต์

ในที่สุดเมื่อตัวรับส่งสัญญาณอีเธอร์เน็ตเสร็จสิ้นการส่งเฟรมจะต้องใช้ 802.3 เพื่อส่งสัญญาณเงียบ 12 ไบต์ ("Interframe Gap") ก่อนที่จะได้รับอนุญาตให้ส่งเฟรมถัดไป
[Preamble+SFD+[Ethernet Frame]+Silence]<- 1542 ไบต์ส่งผ่านสาย


Preamble, SFD และ Interframe Gap ไม่นับเป็นส่วนหนึ่งของเฟรม พวกเขาเป็นโครงสร้างสนับสนุนสำหรับโปรโตคอลอีเธอร์เน็ตเอง

MTU นำไปใช้กับเพย์โหลด - เป็นหน่วยข้อมูลที่ใหญ่ที่สุดที่คุณสามารถยัดเข้าไปในแพ็กเก็ตได้ ดังนั้นแพ็กเก็ตอีเธอร์เน็ตที่มี MTU ขนาด 1500 ไบต์จะเป็นเฟรม 1522 ไบต์และ 1542 ไบต์บนสาย (สมมติว่ามีแท็ก vLAN)

ดังนั้นคำตอบสำหรับคำถามของคุณ - อะไรคือแพ็คเก็ตที่ใหญ่ที่สุดที่ฉันสามารถส่งได้มากกว่า 802.3 อีเธอร์เน็ตโดยไม่มีการกระจายตัว? - เป็น1,500 ไบต์ของข้อมูลน้ำหนักบรรทุก

อย่างไรก็ตามเลเยอร์อีเทอร์เน็ตอาจไม่ใช่ปัจจัย จำกัด ของคุณ หากต้องการค้นพบว่ามีบางสิ่งระหว่างทางที่ จำกัด MTU ให้มีขนาดเล็กกว่า 1500 ไบต์ของข้อมูลโหลดเพอร์ให้ใช้วิธีใดวิธีหนึ่งต่อไปนี้:

  • Windows: ping hostname -f -l sizeofdata(กล่าวถึงเทคนิค John K)
  • BSD: ping -D -s sizeofdata hostname
  • ลินุกซ์: ping -M do -s sizeofdata hostname

ค่าที่ใหญ่ที่สุดของsizeofdataงานนั้นคือ MTU (เหนือเส้นทางที่ข้อมูลของคุณกำลังทำ)


อย่างไรก็ตามฉันต้องยกเว้นส่วนหัว IP และ UDP จาก 1500 นี้ใช่ไหม ดังนั้นความยาวข้อความสูงสุดของแอปพลิเคชันของฉันคือ 1472 สำหรับ UDP
chrisapotek

@chrisapotek ถูกต้อง - ส่วนหัวของ IP และ UDP (หรือ TCP, GRE, ฯลฯ ) เป็นส่วนหนึ่งของส่วนของข้อมูลที่ใส่ลงในเฟรมอีเธอร์เน็ต
voretaq7

2
traceroute --mtu {target} บน linux จะแสดง max mtu ด้วย
Rqomey

เราควรได้รับ "กายภาพ" มากกว่านี้อีกหรือไม่ en.wikipedia.org/wiki/8b/10b_encoding
SaveTheRbtz

@SaveTheRbtz โอ้ได้โปรดอย่า - ลงไปที่การเป็นตัวแทนไบนารีเจ็บหัวของฉันพอ :-)
voretaq7

2

ขึ้นอยู่กับปริมาณข้อมูลที่คุณใส่ในเฟรม หากคุณใส่ข้อมูล 1,500 ไบต์ลงในเฟรมขนาดเฟรมทั้งหมดของคุณจะเท่ากับ 1518 ไบต์ ด้วยข้อมูล 1472 ไบต์คุณจะจบลงด้วยขนาดรวมของเฟรม 1500 ..

http://en.wikipedia.org/wiki/Ethernet_frame

ที่ถูกกล่าวว่าหากคุณสนใจในการทดสอบการแตกแฟรกเมนต์วิธีที่ดีในการทดสอบนี้คือการใช้ ping แบบเก่าที่ดีและมีค่าสถานะน้อย:

ping hostname -f -l sizeofdata

แฟล็ก -f จะทำให้ ping ล้มเหลวหากแพ็กเก็ตมีการแยกส่วน กุญแจสำคัญในการทำความเข้าใจที่นี่คือ "sizeofdata" คือจำนวนข้อมูลที่คุณสามารถใส่ลงในข้อความโดยไม่ต้องแยกส่วน - ดังนั้นถ้าคุณส่ง payload จำนวน 1,500 คุณจะเริ่มแตกแฟรกเมนต์เมื่อคุณมีมากกว่า 1500 ไบต์ เลี้ยวลงไปที่ 1472 แม้ว่า (1500 - ค่าใช้จ่าย 18 ไบต์) และคุณจะเห็นการปิง


ฉันขอโทษ 1542 ไบต์นั้นอยู่เหนือเฟรมอีเธอร์เน็ตมาตรฐานที่กำหนดโดย IEEE 802.3 โหลดอีเทอร์เน็ตขนาด 1500 ไบต์ที่ไม่ได้ติดแท็กคือ 1518 ไบต์ (ไม่รวม SFD / preable) เฟรม 802.1q ที่ติดแท็กคือ 1522 ไบต์ (คำเตือนเดียวกัน)
Mike Pennington

มันสับสนมาก MTU = 1500 แต่ขนาดเฟรมคือ 1542 ??? ดังนั้น MTU จึงเป็นเพียงน้ำหนักบรรทุกกล่าวคือขนาดของเฟรมที่ 1542 ลบ 42 สิ่งพิเศษ ถูกต้องหรือไม่
chrisapotek

ขออภัยฉันพิมพ์ผิด - ฉันเพิ่งอัปเดตคำตอบ แต่ถ้าฉันยังคงผิดให้แจ้งให้ฉันทราบ - นี่คือคณิตศาสตร์ที่ฉันจำได้: S
Univ426

ฉันขอโทษฉันต้องผิด - ฉันคิดว่าฉันเข้าใจ แต่ฉันมีหมายเลขของฉันออกอย่างชัดเจนดูเหมือนว่า 1518: S เสียใจเกี่ยวกับที่
Univ426

ไม่ใช่คุณที่สับสน แต่ทุกคน ดังนั้นคำถามของฉันยังคง อะไรคือความแตกต่างระหว่างขนาดเฟรมของ MTU และอีเธอร์เน็ต? น้ำหนักบรรทุก 1,500 หรือน้อยกว่าหรือไม่
chrisapotek

0

สำหรับเฟรมพื้นฐาน Ethernet_II ขนาดเฟรมคือ 1518 ไบต์ (เปิดหรือปิดสาย) นี้ประกอบด้วย 6 ไบต์สำหรับแต่ละปลายทางและแหล่งที่อยู่ 2 ไบต์สำหรับเขตข้อมูลชนิดระหว่าง 46 และ 1500 ไบต์สำหรับ payload (ในกรณีของคุณแพ็กเก็ต IP ทั้งหมดที่มีส่วนหัว IP และส่วนหัว UDP) FCS นอกจากนี้ยังมีข้อ จำกัด ว่าเฟรมอาจมีขนาดเล็กเพียงใด (64 ไบต์) นี่คือสาเหตุที่ช่วงนั้นมาจาก 46 ไบต์ (เพิ่มไปยังที่อยู่สองแห่งและประเภทและ FCS และคุณจะได้รับ 64 ไบต์ - 46 + 6 + 6 + 2 + 4 = 64)

หากเฟรมอยู่บนเครือข่ายที่รองรับ vlans หลายอันและคุณต้องติดแท็กเฟรมด้วยแท็ก vlan ดังนั้นจะมีการเพิ่มฟิลด์พิเศษหนึ่งฟิลด์ก่อนฟิลด์ประเภท นี่คือ 4 ไบต์ ตอนนี้หมายความว่าช่วงของขนาดสำหรับส่วนของข้อมูลสามารถลดลงได้ 4 ไบต์ที่ด้านล่างสุดและยังคงมีอย่างน้อย 64 ไบต์ ดังนั้น 42. (ดังนั้น 42 + 6 + 6 + 2 + 4 + 4 สำหรับแท็ก vlan = 64)

ดังนั้นเมื่อช่วงเขียน 1500-42 ไม่ได้หมายความว่า 1500 ลบ 42 มันหมายความว่าอะไรจาก 1500 ถึง 42 ไบต์ที่ถูกต้อง เส้นลวดหนึ่งเฟรมที่ติดแท็กนี้อาจมีขนาดใหญ่ถึง 1522 ไบต์ (หากใช้เพียงหนึ่งแท็กหรือ 1526 หากใช้สองแท็ก) ไม่มีสิ่งใดอธิบายหมายเลข 1542

ในการรับจำนวนนี้คุณต้องพิจารณาว่าเฟรมสามารถส่งบนอีเธอร์เน็ตได้อย่างไร ไม่มีนาฬิกาบน Ethernet LAN ดังนั้นชุดของ 1 และ 0 ถูกส่งโดยเครื่องส่งของเฟรมเพื่อตั้งนาฬิกา สิ่งนี้เรียกว่าคำนำ ไม่ใช่ผู้ฟังทุกคนจะ 'ได้ยิน' บทนำทั้งหมด แต่ส่วนใหญ่ควรฟังบางส่วน ในการส่งสัญญาณการสิ้นสุดของการเริ่มนำหนึ่งใน 8 บิตสุดท้ายที่ส่งถูกพลิกเพื่อให้แทนที่จะเป็น 10101010 จะกลายเป็น 10101011 ไบต์นี้เรียกว่า Start of Frame Delimiter (SDF) สิ่งนี้ไม่มีประโยชน์ในทางเทคนิคในการดักจับสายดังนั้น 7 ไบต์ของคำนำหน้าและ SDF ขนาด 1 ไบต์จะไม่นับ แต่ถ้าเป็น 1518 ดั้งเดิมของเราตอนนี้จะเป็น 1526 แต่ก็ไม่ใช่ 1,542 ..

หลังจากส่งเฟรมแล้วจะมีการบังคับให้เงียบลงบนลวดซึ่งเรียกว่าช่องว่างระหว่างเฟรม นี่เทียบเท่ากับการส่ง 12 ไบต์ นี่ไม่ใช่การนับหรือการจับภาพ แต่ถ้าเป็นเช่นนั้นมันจะทำให้เรามีจำนวน 1,538 ไบต์ วิธีเดียวที่จะได้รับ 1542 จาก 1538 คือบอกว่าเฟรมถูกติดแท็ก (เช่นมันมีแท็กแผน 4 ไบต์) สุดท้ายแล้ว 1542

มันอยู่ในคำศัพท์ทั้งหมด กรอบมาตรฐานคือ 1518 ไบต์บนเส้นลวด (เท่าที่เกี่ยวข้องกับอุปกรณ์จับภาพ) เฟรมที่ติดแท็ก (แท็กเดียว) คือ 1522 ไบต์บนเส้นลวด สิ่งเหล่านี้ใช้พื้นที่ 1538 ไบต์หรือ 1542 ไบต์ของพื้นที่ส่งสัญญาณบนสายไฟ

หวังว่าจะช่วยชี้แจง ..


-1

ไม่คุณต้องการให้การกระจายตัวเกิดขึ้นนี่คือเหตุผลที่คุณได้รับแพคเก็ตจะต้องมีการแยกส่วน แต่ df set ใช้มันเป็นทางหลวง 2 ทางที่มีทั้งกลุ่มของ semis vs ทางหลวงเดียวกันกับรถสมาร์ทเล็ก ๆ ทั้งกลุ่ม semis ปลายทางเดียวกันมีน้ำหนักบรรทุกมากขึ้น แต่ช้ากว่าและสามารถคับคั่งได้ง่ายขึ้นรถยนต์ขนาดเล็กพกพาน้อยลง แต่การเดินทางเร็วกว่า MSS ก็ไม่เหมือนกับ MTU เช่นกัน


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