จำลองการเชื่อมต่ออินเทอร์เน็ตช้า


188

ฉันรู้ว่านี่เป็นคำถามแปลก ๆ เนื่องจากฉันมักจะพัฒนาแอพพลิเคชั่นตาม "สมมติฐาน" ที่ผู้ใช้ทุกคนมีการเชื่อมต่ออินเทอร์เน็ตช้า แต่มีใครคิดบ้างไหมว่ามีวิธีการจำลองการเชื่อมต่ออินเทอร์เน็ตแบบช้าโดยทางโปรแกรมดังนั้นฉันสามารถ "ดู" วิธีที่แอปพลิเคชันทำงานภายใต้ "ความเร็วการเชื่อมต่อ" ที่หลากหลายหรือไม่?

ฉันไม่กังวลเกี่ยวกับการใช้ภาษาใด และฉันไม่ได้มองหาตัวอย่างโค้ดหรืออะไรก็ตามแค่สนใจตรรกะที่อยู่เบื้องหลัง

คำตอบ:


109

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

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

เพิ่ม : บทความนี้ที่บล็อกของ Pavel Donchev เกี่ยวกับ Software Technologies แสดงวิธีการสร้างความเร็วจำลองที่กำหนดเอง: จำกัด ความเร็วการเชื่อมต่ออินเทอร์เน็ตของคุณด้วยพู้ทำเล่น


6
สวัสดีฉันเขียนคู่มือเล็ก ๆ น้อย ๆ เกี่ยวกับการจำลองการเชื่อมต่ออินเทอร์เน็ตที่ช้าซึ่งอาจมีประโยชน์: developertipoftheday.com/2010/12// - การเปิดเผยอย่างเต็มรูปแบบ - นี่คือบล็อกของฉันเอง แต่ในกรณีที่มันช่วยฉันได้ คำพูดที่ดีของนักไวโอลิน :-)
Alex KeySmith

ปัญหาของวิธีการเล่นไวโอลินนี้คือการจำลองเวลาแฝงนั้นไม่ถูกต้องมันทำงานที่ระดับโปรโตคอลที่ไม่ถูกต้องดังนั้นคุณจะไม่ได้รับการจำลองการเริ่มต้นช้าอย่างถูกต้อง
แซม Saffron

@SamSaffron, ขออภัยที่จะขุดโพสต์เก่าเช่นนี้ แต่คุณรู้หรือไม่ว่ามีเครื่องมืออื่น ๆ ที่ช่วยในการจำลองการเริ่มช้า?
Anish Ramaswamy

@AnishRam ทางออกที่ดีที่สุดคือการใช้ dummynet / ipfw ที่มาพร้อมกับ bsd และครอบครัว, freebsd
Sam Saffron

@AnishRam เห็น netem linuxfoundation.org/collaborate/workgroups/networking/netemสามารถจำลองเงื่อนไขจำนวนมากโดยใช้ iproute2
Philip Rieck

154

เริ่มต้นด้วยChrome 38คุณสามารถทำได้โดยไม่ต้องใช้ปลั๊กอิน เพียงคลิกตรวจสอบองค์ประกอบ (หรือF12ปุ่มลัด) จากนั้นคลิกที่ "toggle Device mod" ป้อนคำอธิบายรูปภาพที่นี่และคุณจะเห็นสิ่งต่อไปนี้:

ป้อนคำอธิบายรูปภาพที่นี่

ในบรรดาคุณสมบัติอื่น ๆ จะช่วยให้คุณจำลองการเชื่อมต่ออินเทอร์เน็ตเฉพาะ (3G, GPRS)

PSสำหรับผู้ที่พยายาม จำกัด ความเร็วในการอัพโหลด น่าเศร้าที่เวลาปัจจุบันมันเป็นไปไม่ได้

PS2ตอนนี้คุณไม่จำเป็นต้องสลับอะไร แผงควบคุมปริมาณสามารถใช้ได้จากแผงเครือข่ายป้อนคำอธิบายรูปภาพที่นี่

โปรดทราบว่าในขณะที่คลิกที่ไม่มีการควบคุมปริมาณคุณสามารถสร้างตัวเลือกการควบคุมปริมาณที่กำหนดเองของคุณ

ป้อนคำอธิบายรูปภาพที่นี่


2
ตอนนี้การควบคุมปริมาณ Chrome Dev Tools จำกัด ทั้งความเร็วในการดาวน์โหลดและอัปโหลด แต่ จำกัด เฉพาะสำหรับหน้าปัจจุบันใน Chrome ดังนั้นคุณจึงไม่สามารถใช้เพื่อทดสอบหน้าเว็บของคุณในเบราว์เซอร์อื่น ในการทำเช่นนั้นคุณต้องใช้เครื่องมืออื่น ๆ เช่น Fiddler
Leonid Vasilev

3
เป็นมูลค่าการกล่าวขวัญว่าปัจจุบัน WebSockets ไม่ได้ควบคุมด้วยวิธีนี้: bugs.chromium.org/p/chromium/issues/detail?id=423246
mseddon

การควบคุมปริมาณการอัปโหลดไม่สามารถใช้งานได้ใน Chrome บางรุ่นรวมถึงรุ่นล่าสุด (70.0) มีความเป็นรายงานข้อผิดพลาดในการติดตาม
แมตต์

จากประสบการณ์ของฉันสาเหตุที่ใหญ่ที่สุดของความช้าของเว็บคือ DNS ที่ไม่สม่ำเสมอของผู้ให้บริการเคเบิลซึ่งไม่สามารถระบุเซิร์ฟเวอร์โฆษณาหรือ CDN ได้ บางครั้งทั้งหน้ายังคงว่างเปล่าจนกว่าความพยายามที่จะแก้ไขพวกเขาประสบความสำเร็จหรือหมดเวลา Chrome สามารถจำลองสิ่งนี้ได้หรือไม่
StackOverthrow

45

1
Network Link Conditioner ได้รับการดูแลโดย Apple (ดังนั้นจึงเสถียรและเชื่อถือได้) แต่จะใช้กับเครื่องจำลองของ Xcode เท่านั้น
Ben Wheeler

4
@BenWheeler ลองใช้เมื่อไม่นานมานี้มีการใช้งานระบบอย่างกว้างขวางแม้กระทั่ง localhost
aromero

2
ฉันสามารถยืนยันได้ว่า Network Link Conditioner นั้นถูกนำไปใช้กับเครือข่ายทั้งหมดอย่างสมบูรณ์
Fred Vollmer

14

บนเครื่อง Linux คุณสามารถใช้ wondershaper

apt-get install wondershaper

$ sudo wondershaper {interface} {down} {up}

{down} และ {up} เป็นแบนด์วิดท์เป็น kpbs

ตัวอย่างเช่นหากคุณต้องการ จำกัด แบนด์วิดท์ของอินเตอร์เฟส eth1 เป็น 256kbps อัปลิงค์และ 128kbps downlink

$ sudo wondershaper eth1 256 128

เพื่อล้างขีด จำกัด

$ sudo wondershaper clear eth1 

13

ฉันใช้http://www.netlimiter.com/และใช้งานได้ดีมาก ไม่เพียง จำกัด ความเร็วสำหรับกระบวนการเดียว แต่ยังแสดงอัตราการถ่ายโอนจริง


เครื่องมืออื่น ๆ ส่วนใหญ่ให้การควบคุมแบนด์วิดธ์ผ่านความหน่วงแฝงเทียมซึ่งดูเหมือนจะไม่เป็นเช่นนั้นกับ netlimiter ซึ่งเป็นสิ่งที่ดี อย่างไรก็ตามในท้ายที่สุดมันเป็นเครื่องมือเชิงพาณิชย์ (พร้อมรุ่นทดลอง) และใช้ได้เฉพาะใน Windows
Aleksander Stelmaczonek

6

มีผู้รับมอบฉันทะ TCP ออกมีเช่น iprelay และ Sloppy ที่แบนด์วิดท์การสร้างการจำลองการเชื่อมต่อช้า คุณสามารถสร้างแบนด์วิดท์และจำลองการสูญเสียแพ็กเก็ตโดยใช้เครื่องมือการกรอง IP เช่น ipfw และ iptables


ขอบคุณฉันจะดู iprelay และ Sloppy joe

ขอบคุณ ipfw ใช้งานได้ดี นี่คือคำแนะนำสั้น ๆ ที่ฉันเห็นว่ามีประโยชน์: barkingiguana.com/2009/12/04/…
Eric Nguyen

4

คุณสามารถลองDummynetมันสามารถจำลองข้อ จำกัด ของคิวและแบนด์วิดท์ความล่าช้าการสูญหายของแพ็กเก็ตและเอฟเฟกต์หลายเส้นทาง


4

ใช้พร็อกซี่เว็บแก้จุดบกพร่องที่มีคุณสมบัติการควบคุมปริมาณเช่นชาร์ลส์หรือไวโอลิน

คุณจะพบว่าการพัฒนาเว็บไซต์เหล่านั้นมีประโยชน์โดยทั่วไป ข้อแตกต่างที่สำคัญคือ Charles เป็นแชร์แวร์ในขณะที่ Fiddler นั้นฟรี


คุณเรียกใช้เป็นพร็อกซี เบราว์เซอร์จะเชื่อมต่อกับมันโดยอัตโนมัติและจะส่งต่อคำขอไปยังแอปพลิเคชันเว็บของคุณ
เบ็น M

สำหรับพู้ทำเล่นมันมีทั้งสองโหมดให้ทำงานทั้งในและนอกเบราว์เซอร์
Ken D

4

นอกจากนี้สำหรับการจำลองการเชื่อมต่อช้าในบาง nixes * คุณสามารถลองใช้ipfw ข้อมูลเพิ่มเติมให้ไว้โดยคำตอบของ Ben Newman สำหรับคำถาม Quora นี้


2

ใช้เครื่องมือเช่นTCPMon มันสามารถปลอมการเชื่อมต่อที่ช้า

โดยทั่วไปคุณร้องขอสิ่งเดียวกันแน่นอนและส่งต่อคำขอเดียวกันที่แน่นอนไปยังเซิร์ฟเวอร์จริงและจากนั้นเลื่อนการตอบกลับด้วยจำนวนไบต์ที่ตั้งค่าไว้เท่านั้น


2

คุณสามารถใช้NetEm (Network Emulation)เป็นพร็อกซีเซิร์ฟเวอร์เพื่อจำลองลักษณะเครือข่ายมากมาย (ความเร็ว, ความล่าช้า, การสูญหายของแพ็กเก็ต ฯลฯ ) มันควบคุมระบบเครือข่ายโดยใช้แพ็คเกจiproute2และมันเปิดใช้งานในเคอร์เนลของลีนุกซ์ส่วนใหญ่

มันจะถูกควบคุมโดยtcการประยุกต์ใช้บรรทัดคำสั่ง (จากiproute2แพคเกจ) แต่ก็ยังมีบาง GUIs อินเตอร์เฟซเว็บสำหรับ NetEm เช่นPHPnetemGUI2

ข้อได้เปรียบคืออย่างที่ฉันเขียนมันสามารถเลียนแบบความเร็วเครือข่ายที่แตกต่างกันไม่เพียงเท่านั้น แต่ยังสามารถจำลองได้เช่นการสูญเสียแพ็กเก็ตการทำซ้ำและ / หรือการคอร์รัปชั่นการสุ่มหรือกำหนดล่าช้าเป็นต้น

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

ฉันใช้มันเพื่อทดสอบประสิทธิภาพของแอพ Android บนเครือข่ายประสิทธิภาพต่ำที่จำลองขึ้นมา


1

Mac OSX ตั้งแต่ 10.10 มีแอพที่เรียกว่าMurus Firewallซึ่งทำหน้าที่เป็น GUI ไปยัง pf แทน ipfw

มันทำงานได้ดีมากสำหรับการควบคุมปริมาณโดเมนหรือทั้งระบบ ฉันสามารถใช้เพื่อเลื่อนความเร็วการดาวน์โหลดระหว่าง 300Kbps ถึง 30Mbps เพื่อทดสอบว่าผู้เล่นวิดีโอสตรีมมิ่งปรับอย่างไร


0

นอกจากนี้ยังมีเครื่องมืออื่นที่เรียกว่า WIPFW - http://wipfw.sourceforge.net/

มันเป็นโรงเรียนเก่า แต่คุณสามารถใช้มันเพื่อจำลองการเชื่อมต่อที่ช้ากว่าได้ เป็นระบบ Windows และเครื่องมือนี้ช่วยให้ผู้ดูแลระบบสามารถตรวจสอบปริมาณการรับส่งข้อมูลที่เราเตอร์ได้รับจากเครื่องบางเครื่องหรือปริมาณการรับส่งข้อมูล WWW ที่ส่งต่อ


0

การอัปเดตสิ่งนี้ (9 ปีหลังจากถาม) เนื่องจากคำตอบที่ฉันค้นหาไม่ได้กล่าวถึง:

Firefox ยังมีค่าที่ตั้งไว้ล่วงหน้าสำหรับความเร็วในการเชื่อมต่อ ค้นหาได้ในแท็บการตรวจสอบเครือข่ายของเครื่องมือสำหรับนักพัฒนา ค่าเริ่มต้นคือ 'ไม่ควบคุมปริมาณ'

ช้าที่สุดคือGPRS ( ความเร็วในการดาวน์โหลด: 50 Kbps, ความเร็วในการอัปโหลด: 20 Kbps, เวลาในการตอบสนองขั้นต่ำ (ms): 500 ), ตั้งแต่ 'ดี' และ 'ปกติ' 2G, 3G และ 4G ถึง DSL และWiFi ( ความเร็วในการดาวน์โหลด: 30Mbps, อัปโหลด ความเร็ว: 15Mbps, เวลาแฝงต่ำสุด (ms): 2 )

มากขึ้นในเครื่องมือ Dev เอกสาร


0

สำหรับ Linux รายการเอกสารต่อไปนี้อาจมีประโยชน์:

โดยส่วนตัวในขณะที่Dummynetนั้นดีฉันพบว่าNetEmนั้นมีความหลากหลายมากที่สุดสำหรับกรณีใช้งานของฉัน ฉันมักจะสนใจผลของความล่าช้ามากกว่าแบนด์วิดท์ (เช่นปัญหาการเชื่อมต่อ WiFi) และมันง่ายมากที่จะเลียนแบบการสูญเสีย / ความเสียหายของแพ็กเก็ตแบบสุ่ม ฯลฯ มันยังเข้าถึงได้ง่ายมากและฟรี (ไม่เหมือนกับLinktropy )

บนโน้ตสำหรับ Windows, Clumsyน่ากลัว ฉันต้องการเพิ่มว่าการควบคุมปริมาณเบราว์เซอร์ (เกี่ยวกับเว็บไซต์) ไม่ใช่วิธีที่ถูกต้องในการเลียนแบบปัญหาเครือข่ายในชีวิตจริง (ฉันคิดว่า "TKK" แสดงความคิดเห็นด้วยเหตุผลสองสามประการข้างต้น)

หวังว่านี่จะช่วยใครซักคน!


0

หนึ่งกรณีทั่วไปของการสร้างการเชื่อมต่อ TCP เดียวสามารถประกอบได้จริงจากคู่คู่socatและcpipeในรูปแบบ UNIX ดังนี้:

socat TCP-LISTEN:5555,reuseaddr,reuseport,fork SYSTEM:'cpipe -ngr -b 1 -s 10 | socat - "TCP:localhost:5000" | cpipe -ngr -b 1 -s 300'

นี่เป็นการจำลองการเชื่อมต่อกับแบนด์วิดท์ประมาณ 300kB / s จากบริการของคุณที่:5000และไปที่ประมาณ 10kB / s และฟัง:5555สำหรับการเชื่อมต่อขาเข้า Caveat : โปรดทราบว่าสิ่งนี้ต่อการเชื่อมต่อดังนั้นการเชื่อมต่อ TCP แต่ละรายการจะได้รับจำนวนนี้

คำอธิบาย: outer (ซ้าย) socatฟังด้วยตัวเลือกที่กำหนด:5555เป็นเซิร์ฟเวอร์ forking cpipeคำสั่งแรกในSYSTEM:...ตัวเลือกจากนั้นบีบข้อมูลที่เข้าไปในซ็อกเก็ต: 5555 (และออกมาจากด้านนอกแรกsocat) ไปที่มากที่สุด 10kByte / s ข้อมูลนั้นจะถูกส่งต่อโดยใช้อีกsocatที่เชื่อมต่อกับlocalhost:5000(ที่บริการที่คุณต้องการชะลอตัวควรจะฟัง) ข้อมูลจาก localhost:5000นั้นใส่ลงในcpipeคำสั่งที่ถูกต้องซึ่ง (ด้วยค่าที่กำหนด) throttles ไปประมาณ 300kB / s

ตัวเลือก-ngrที่cpipeสำคัญ มันทำให้ cpipe อ่านไม่โลภโมรีจาก file-descriptor มิฉะนั้นคุณอาจติดกับข้อมูลในบัฟเฟอร์ที่ไม่ได้ถูกส่งต่อและรอการตอบกลับ

การใช้bufferเครื่องมือทั่วไปแทนที่จะcpipeเป็นไปได้เช่นกัน

(เครดิต: เป็นไปตามสูตร "double-tee" โดย Christophe Loor จากsocatเอกสารประกอบ)

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