ไตรมาส
QFT เป็นแอปพลิเคชั่นขนาดเล็กสำหรับการถ่ายโอนไฟล์ Peer-To-Peer UDP ที่รวดเร็ว (และเชื่อถือได้จริงๆ)
ถ้าเพื่อนส่งคุณมาที่นี่...
...ดูที่ส่วน "การเผยแพร่" บนแถบด้านข้าง คุณควรเห็นลิงก์ชื่อ vX.YZ คลิกที่ลิงก์นั้น จากนั้นเลือกไฟล์ที่ถูกต้องสำหรับระบบปฏิบัติการของคุณ: qft
สำหรับ Linux, qft-mac
สำหรับ Mac และ qft.exe
สำหรับ Windows ดาวน์โหลดไฟล์นี้ ทำให้สามารถเรียกใช้งานได้ในกรณีของ Linux หรือ Mac จากนั้นทำตามคำแนะนำของเพื่อนของคุณเกี่ยวกับวิธีการรับไฟล์ที่พวกเขาต้องการส่งถึงคุณ
การใช้งาน:
- ค้นหาผู้ช่วย QFT สาธารณะ (เช่น tudbut.de:4277)
- บนพีซีของผู้ส่ง ให้ป้อน
qft sender <helper> <shared-phrase> <filename>
- บนพีซีตัวรับ ให้ป้อน
qft receiver <helper> <shared-phrase> <filename>
- พีซีทั้งสองเครื่องควรเริ่มถ่ายโอนหลังจากนั้นไม่นาน หากไม่เป็นเช่นนั้น ให้ลองอีกครั้ง
หรือ
- บนพีซีทั้งสองเครื่อง ให้ป้อน
qft gui
- เลือกโหมด
- เลือกไฟล์ที่จะส่งและไฟล์ที่จะบันทึก
- อัปเดตวลีที่แชร์และบิตเรตให้ตรงกัน
- คลิกเริ่ม
ข้อโต้แย้ง:
qft helper <bind-port>
qft sender <helper-address>:<helper-port> <phrase> <filename> [send-delay] [bitrate] [skip]
qft receiver <helper-address>:<helper-port> <phrase> <filename> [bitrate] [skip]
ตัวช่วยทำอะไร.
ตัวช่วยไม่ใช่ตัวส่งต่อข้อมูล แต่ใช้เพื่อสร้างการเชื่อมต่อเท่านั้น
มีผู้ช่วยคอยช่วยเจาะรู
- P1 เชื่อมต่อ* กับผู้ช่วย
- P1 ส่งวลีไปยังผู้ช่วย
- P1 รอการตอบกลับ
- บางเวลาผ่านไป
- P2 เชื่อมต่อ* กับผู้ช่วยคนเดียวกัน
- P2 ส่งวลีไปให้ผู้ช่วย
- P2 รับ IP และพอร์ตสาธารณะของ P1
- P1 รับ IP และพอร์ตสาธารณะของ P2
- P1 และ P2 ตัดการเชื่อมต่อ* จากตัวช่วยเหลือ
- P1 และ P2 เริ่มวนซ้ำ (ทำให้ง่ายขึ้นเล็กน้อย):
- ยิงแพ็คเก็ตใส่กันหลายครั้ง
- พยายามรับแพ็กเก็ตจากอีกแพ็กเก็ตให้ได้มากที่สุด
- หากไม่ได้รับ ให้วนซ้ำอีกครั้ง
- หากได้รับแล้วให้ออกจากลูป
- สร้างการเชื่อมต่อระหว่าง P1 และ P2 แล้ว
*UDP เป็นโปรโตคอลที่ไม่มีการเชื่อมต่อ ไม่มีการจับมือกัน คำว่า "การเชื่อมต่อ" ถูกใช้ที่นี่เป็นตัวบ่งชี้ว่าข้อมูลจะถูกแลกเปลี่ยนระหว่างฝ่ายที่ "เชื่อมต่อ" คำว่า "ตัดการเชื่อมต่อ" ถูกใช้ที่นี่เป็นตัวบ่งชี้ว่าจะไม่มีการแลกเปลี่ยนข้อมูลอีกต่อไประหว่างฝ่ายที่ "เชื่อมต่อก่อนหน้านี้"
หักล้างความเชื่อผิด ๆ เกี่ยวกับเครือข่าย P2P
- "P2P ที่แท้จริงจะเกิดขึ้นได้หากไม่มี NAT" - ทั้งการทดลองและวิกิพีเดียของฉันอยากจะพูดถึงการเจาะรู ปัญหาเดียวที่ฉันพบคือผู้ให้บริการข้อมูลมือถือชาวเยอรมัน บางราย แต่การส่งไฟล์ขนาดใหญ่ผ่านข้อมูลมือถือนั้นแทบจะไม่ใช่สิ่งที่คุณต้องการทำ และถ้าเป็นเช่นนั้น ให้ใช้บางอย่างเช่น croc หรือ magic wormhole ซึ่งไม่ใช่ P2P ที่แท้จริงอย่างแท้จริง .
- “Croc ก็คือ P2P เหมือนกัน ทำไมมันถึงมีสิ่งนี้” - Croc ไม่ใช่ Peer-to-Peer Croc ใช้เซิร์ฟเวอร์รีเลย์เพื่อแลกเปลี่ยนข้อมูลระหว่างไคลเอนต์ทั้งสอง (เว้นแต่ไคลเอนต์ตัวใดตัวหนึ่งมีการตั้งค่าการส่งต่อพอร์ต ซึ่งแทบไม่เคยเป็นเช่นนั้น) นั่นคือ Client-to-Server-to-Client ซึ่ง ไม่ใช่ Peer-to-Peer จริงๆ Peer-to-Peer หมายถึงไคลเอนต์สองรายที่ส่งข้อมูลถึงกันโดยตรงโดยไม่มีเซิร์ฟเวอร์ “เพียร์ทำให้ส่วนหนึ่งของทรัพยากรของตน เช่น พลังการประมวลผล พื้นที่เก็บข้อมูลดิสก์ หรือแบนด์วิธเครือข่าย พร้อมใช้งานโดยตรงสำหรับผู้เข้าร่วมเครือข่ายอื่นๆ โดยไม่จำเป็นต้องมีการประสานงานจากส่วนกลางโดยเซิร์ฟเวอร์หรือโฮสต์ที่เสถียร” - วิกิพีเดีย
เคล็ดลับและเทคนิค
- คุณสามารถเพิ่มตัวเลขที่ส่วนท้ายของคำสั่งทั้งสองของคุณ (หลังชื่อไฟล์) เพื่อเพิ่มความเร็วการถ่ายโอน (ต่ำกว่า = เร็วกว่า) แต่จำนวนที่น้อยเกินไปอาจทำให้เกิดความไม่น่าเชื่อถือเนื่องจากสภาพเครือข่ายท้องถิ่น VPN ฯลฯ (ค่าเริ่มต้นคือ 500) . สิ่งนี้จะแก้ไขความล่าช้าระหว่างแพ็กเก็ตที่ส่ง
- คุณสามารถเพิ่มตัวเลข หลังจากนั้น ได้ มันจะแก้ไขขนาดแพ็คเก็ต และตัวเลขที่สูงกว่าที่นี่จะมีผลคล้ายกับตัวเลขที่ต่ำกว่าใน arg ก่อนหน้า
- คุณสามารถเรียกใช้ตัวช่วยได้ด้วยตัวเอง ตามที่อาร์กิวเมนต์ของโหมด "ตัวช่วย" แนะนำ ตัวช่วยนี้ควรจะทำงานบนเซิร์ฟเวอร์ที่สามารถเข้าถึงได้จากทั่วทั้งเว็บ (VPS ราคาถูกจะทำได้แน่นอน)
- ตัวช่วยไม่ จำเป็นต้อง ทำงานบนเซิร์ฟเวอร์สาธารณะ พวกมันทำงานใน LAN เช่นกัน แต่ด้วยวิธีนี้ มีเพียงคอมพิวเตอร์ใน LAN เดียวกันเท่านั้นที่จะสามารถใช้งานได้
- คุณสามารถอนุญาตการสตรีม (เช่น เมื่อคุณต้องการส่งสัญญาณจาก /dev/stdin) โดยการตั้งค่าตัวแปรสภาพแวดล้อม
QFT_STREAM
- หากต้องการใช้นามแฝง qfts และ qftr บน linux หรือ mac ให้รัน (แทนที่
(shell)
ด้วยชื่อเชลล์ของคุณ ซึ่งมักจะเป็น bash หรือ zsh):
echo ' alias qftr="qft receiver tudbut.de:4277" ' >> ~ /.(shell)rc
echo ' alias qfts="qft sender tudbut.de:4277" ' >> ~ /.(shell)rc
source ~ /.(shell)rc
สิ่งดีๆ
- ไฟล์จะถูกโอนผ่าน UDP แต่ qft มีมาตรการความน่าเชื่อถือเพิ่มเติมเพื่อหลีกเลี่ยงไฟล์ที่เสียหาย
- การเชื่อมต่ออินเทอร์เน็ตไม่น่าเชื่อถือ? ไม่มีปัญหา! QFT จะหยุดการส่งข้อมูลชั่วคราวจนกว่าการเชื่อมต่อจะกลับมา! ไม่ทำงานเหรอ? ตรวจสอบส่วน "ดำเนินการโอนต่อโดยสมบูรณ์"!
- คุณรู้หรือไม่ว่าคุณสามารถไฮเบอร์เนตหรือระงับคอมพิวเตอร์ของคุณได้ในขณะที่กำลังถ่ายโอน และคอมพิวเตอร์จะดำเนินการต่อจากจุดที่เหลือ แม้ว่าจะมีการระงับเพียงด้านเดียวก็ตาม (ยกเว้นในกรณีที่เราเตอร์ของคุณบล็อกพอร์ต โปรดอ่านส่วน "ดำเนินการถ่ายโอนที่หยุดโดยสมบูรณ์" ในกรณีนั้น)
- QFT สามารถรับน้ำหนักได้
สภาพอากาศ เงื่อนไขเครือข่าย: การ ping 1,000 มิลลิวินาทีนั้นเร็วเท่ากับการปิง 10 มิลลิวินาที อัตราการสูญเสียแพ็คเก็ต/การเรียงลำดับใหม่นั้นยอมรับได้มากกว่า 10% (แต่อาจทำให้ความเร็วช้าลงได้ โดยเฉพาะเมื่อ ping สูง) - เขียนด้วย สนิมบริสุทธิ์ 100%
ดำเนินการถ่ายโอนที่หยุดโดยสมบูรณ์ต่อ
คุณมักจะไม่จำเป็นต้องใช้สิ่งนี้ เว้นแต่การถ่ายโอนจะตายโดยสิ้นเชิงเนื่องจากการหยุดชั่วคราวนานมากหรือการรีสตาร์ทคอมพิวเตอร์ แต่ถ้าคุณทำ:
หยุด qft ที่ปลายทั้งสองข้างแล้วเริ่มใหม่อีกครั้งโดยใส่พารามิเตอร์ [skip] ไว้ (หากคุณไม่ได้ระบุบิตเรตไว้ก่อนหน้านี้ ค่าเริ่มต้นคือ 256) มันจะข้ามไบต์เหล่านั้นและดำเนินการต่อตามที่คุณระบุ
การแก้ไขปัญหา
มันบอกว่า Connecting...
แต่ไม่ได้เชื่อมต่อ
ปลายด้านหนึ่งของคุณเชื่อมต่อกับผู้ช่วยไม่ถูกต้อง หยุดการถ่ายโอนทั้งสองด้านแล้วลองอีกครั้ง
ครอก
หลายๆคนเคยพูดถึงว่านี่เหมือนจระเข้ขนาดไหน ไม่ใช่เพราะ croc ใช้รีเลย์ที่ข้อมูลทั้งหมดของคุณถูกส่งผ่าน นี่เป็นปัญหาคอขวดและยังหมายความว่าผู้ดูแลระบบการส่งต่อต้องรับผิดชอบต่อเนื้อหาที่ส่งไป รีเลย์ยังบัฟเฟอร์ข้อมูลจำนวนมาก ซึ่งหมายความว่า RAM อาจเต็มหากการเชื่อมต่อของผู้ส่งเร็วกว่าของผู้รับมาก Croc ถูกแท็ก "peer-to-peer" ทำให้เกิดความเข้าใจผิดได้ดีที่สุด เนื่องจากไม่ค่อยใช้ความสามารถ P2P (ต้องใช้ port-forward เพื่อทำ P2P ซึ่งไม่ค่อยได้ทำ) อ่านหัวข้อก่อนหน้าเกี่ยวกับตำนาน P2P หากคุณคิดว่า Croc เป็นแบบ peer-to-peer เสมอ
XKCD ที่เกี่ยวข้อง
คำถามที่พบบ่อย
ผู้ช่วยคืออะไร?
ตามที่อธิบายไว้ข้างต้น จะใช้เพื่อสร้างการเชื่อมต่อระหว่างคู่ค้าทั้งสอง
เหตุใดจึงต้องมีผู้ช่วย?
เราเตอร์ของคุณใช้สิ่งที่เรียกว่า N etwork A ddress T ranslation จำเป็นเพราะไม่เช่นนั้น จะมีการใช้ที่อยู่ IP มากเกินไป และอินเทอร์เน็ตจะหยุดทำงานในช่วงเวลาที่วุ่นวาย อย่างไรก็ตาม NAT นี้ก็เป็นปัญหาเช่นกัน เนื่องจากเป็นชั้นระหว่างพีซีของคุณกับอินเทอร์เน็ตแบบเปิด เมื่อมีการเชื่อมต่อเข้ามาใหม่ NAT จะไม่ทราบว่าพีซีเครื่องใดใน LAN ของคุณที่จะส่งต่อการเชื่อมต่อไป ดังนั้นการเชื่อมต่อจึงถูกปฏิเสธ ซอฟต์แวร์ Peer-to-Peer ใดๆ จำเป็นต้องมีเซิร์ฟเวอร์ตัวช่วย (หรือที่เรียกว่าเซิร์ฟเวอร์ "STUN") ซึ่งเพียร์ทั้งสองจะขอที่อยู่ IP และพอร์ตของอีกฝ่าย เพื่อนทั้งสองสามารถส่งการเชื่อมต่อขาออกจำนวนมากให้กันและกันได้ หากทุกอย่างเป็นไปด้วยดี เพื่อนร่วมงานทั้งสองคนได้ส่งข้อมูลขาออกในช่วงเวลาที่เหมาะสม ทำให้ NAT ทั้งสอง คิดว่า พวกเขากำลังเชื่อมต่อขาออก ซึ่งจริงๆ แล้ว พวกเขาเป็นการผสมผสานระหว่างการเชื่อมต่อขาเข้าและขาออก
TL; DR: เครือข่าย P2P เป็นไปไม่ได้หากไม่มีเซิร์ฟเวอร์ตัวช่วย เนื่องจากเราเตอร์ มิฉะนั้นจะต้องทำการส่งต่อพอร์ต ซึ่งอาจตั้งค่าได้ยาก
จะสร้างผู้ช่วยสาธารณะ/ส่วนตัวได้อย่างไร?
อ่านหัวข้อย่อยที่ 2 ในส่วน Tips 'n Tricks