---
title: "Direct Shreds - UDP Forwarding (Raw Shreds)"
description: "UDP Forwarding ส่ง Shreds ดิบผ่าน UDP ไปยังที่อยู่ IPv4 สาธารณะและพอร์ตที่กำหนดค่าไว้ โดยมีให้เลือกทั้ง UDP Forwarding Standard และ UDP Forwarding Premium"
canonical: "https://erpc.global/th/doc/shredstream/udp-forwarding/"
locale: "th"
---

# Direct Shreds - UDP Forwarding (Raw Shreds)

UDP Forwarding ส่ง Shreds ดิบผ่าน UDP ไปยังที่อยู่ IPv4 สาธารณะและพอร์ตเพียงชุดเดียวที่คุณกำหนดค่าไว้ UDP Forwarding Standard และ UDP Forwarding Premium ต่างกันตรงวิธีที่ Shreds มาถึงคุณจากภูมิภาคที่คุณเลือกไว้ โดยใน Standard นั้น ERPC จะส่งต่อ Shreds ออกจากโหนดในภูมิภาคนั้น ส่วนใน Premium เครือข่าย mesh จะเป็นผู้ส่งต่อ

## UDP Forwarding Standard

**UDP Forwarding Standard** ส่งต่อ Shreds ดิบผ่าน UDP ไปยังที่อยู่ IPv4 สาธารณะและพอร์ตที่กำหนดค่าไว้สำหรับการสมัครใช้งานของคุณ ให้เลือกภูมิภาคที่พร้อมใช้งานหนึ่งแห่งระหว่างการกำหนดค่าเริ่มต้น แล้วบันทึกที่อยู่ IPv4 สาธารณะที่ถูกต้องและไม่เว้นว่างพร้อมพอร์ตเป็นปลายทาง คุณสามารถอัปเดตปลายทางได้ภายหลัง ERPC ใช้การกำหนดค่าการส่งต่อตามรอบรีเฟรช 30 วินาที และไม่จำเป็นต้องเปิดใช้งานด้วย heartbeat คุณยังเปลี่ยนภูมิภาคได้ภายหลังในแดชบอร์ดโดยไม่จำกัดจำนวนครั้ง การเปลี่ยนภูมิภาคจะทำให้ IP ต้นทางเปลี่ยนไป ดังนั้นไฟร์วอลล์ฝั่งรับต้องอนุญาต IP ต้นทางใหม่ การส่งข้อมูลจะหยุดชะงักชั่วขณะระหว่างที่การสมัครใช้งานย้ายไปยังภูมิภาคใหม่ หากภูมิภาคใหม่ไม่มีความจุในขณะนี้ การเปลี่ยนแปลงดังกล่าวจะไม่เกิดขึ้น และทั้งภูมิภาคและปลายทางจะคงเดิม

- ERPC ส่งต่อ Shreds ดิบผ่าน UDP จากโหนดในภูมิภาคที่คุณเลือกไว้ไปยังปลายทางที่กำหนดค่าไว้ Shreds จึงมาถึงคุณจาก IP ต้นทางเพียงรายการเดียว

## UDP Forwarding Premium

**UDP Forwarding Premium** ส่ง Shreds ดิบผ่าน UDP จากเครือข่าย mesh ไปยังที่อยู่ IPv4 สาธารณะและพอร์ตที่กำหนดค่าไว้สำหรับการสมัครใช้งานของคุณ เครือข่าย mesh จะส่งต่อสำเนาที่มาถึงเครือข่ายก่อนของ Shred แต่ละตัว โดย IP ต้นทางทุกรายการที่แสดงในแดชบอร์ดอาจเป็นผู้ส่งได้ ทั้งนี้ Shreds ทาง Premium มักมาถึงเร็วกว่าทาง Standard 1–3 ms เมื่อวันที่ 30 ตุลาคม 2026 ตัวรับของ ERPC ที่แฟรงก์เฟิร์ตได้รับ Standard และ Premium ไปพร้อมกันในการวัด 1 ครั้งนาน 120 วินาที แล้วนำ Shred แต่ละตัวที่มาถึงทั้งทาง Standard และ Premium มาเทียบเวลาที่มาถึงครั้งแรกในแต่ละทาง

กรอกที่อยู่ IPv4 สาธารณะและพอร์ตของโฮสต์รับข้อมูลของคุณเอง แล้วเลือกภูมิภาคหนึ่งจาก 7 ภูมิภาคที่พร้อมใช้งาน หลังจากบันทึกปลายทางแล้ว สถานะจะแสดงเป็น “กำลังนำไปใช้” และการส่งข้อมูลจะเริ่มขึ้นเมื่อนำการตั้งค่าไปใช้เสร็จแล้ว

ในไฟร์วอลล์ฝั่งรับ ให้อนุญาต IP ต้นทางทุกรายการที่แสดงในแดชบอร์ด โดยใช้กฎ `/32` หนึ่งกฎต่อหนึ่ง IP

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

แม้คุณจะไม่ได้เปลี่ยนภูมิภาค แต่ IP ต้นทางก็อาจเปลี่ยนได้ หากการเปลี่ยนแปลงนั้นทำให้ต้องเพิ่มกฎในไฟร์วอลล์ เราจะแจ้งให้ทราบทางอีเมลหรือผ่านทีมสนับสนุน

## สิ่งที่ควรรู้เกี่ยวกับ UDP

- UDP ไม่มีการสร้างการเชื่อมต่อ ไม่มีการส่งซ้ำ และไม่มีการจัดลำดับแพ็กเก็ต ตัวรับของคุณจึงควรจัดการแพ็กเก็ตโดยคำนึงถึงเรื่องนี้

หมายเหตุ: Shreds gRPC endpoint แบบใช้ร่วมกันทำงานบน TCP จึงช้ากว่า UDP Shreds

## ลองใช้งานด้วย Solana Stream SDK

- โค้ดตัวอย่าง (`shreds-udp-rs`, Rust): การตรวจจับโทเค็นใหม่เป็นเพียงตัวอย่างที่ใช้กันทั่วไป เปลี่ยนเป็นเป้าหมายที่คุณต้องการได้เลย  
  https://github.com/ValidatorsDAO/solana-stream/tree/main/temp-release/shreds-udp-rs  
- ตั้งค่าตัวรับของคุณให้ใช้ `ip:port` ปลายทางที่บันทึกไว้สำหรับ UDP Forwarding
- หากยังไม่ได้ใช้ UDP ให้ลองรันในเครื่องหรือบนเซิร์ฟเวอร์ของคุณเองเพื่อดูล็อกและปรับแต่ง hook

## เมื่อแพ็กเก็ต UDP ไม่มาถึง

ขั้นแรก ให้ดักจับทราฟฟิกที่อินเทอร์เฟซเครือข่ายของโฮสต์

### UDP Forwarding Standard

การส่งต่อผ่าน UDP จะเริ่มทำงานโดยอัตโนมัติหลังจากตั้งค่าปลายทางแล้ว ไม่จำเป็นต้องเปิดใช้งานด้วย heartbeat และการที่ heartbeat ตอบกลับเป็น `UNIMPLEMENTED` ไม่ได้หมายความว่าการส่งต่อถูกปิดใช้งาน

ให้แทนที่ตัวยึดตำแหน่งด้วย IP ต้นทางของ ERPC ที่แสดงสำหรับสตรีมของคุณ และพอร์ตปลายทางที่คุณตั้งค่าไว้

Linux (`tcpdump`):

```bash
sudo tcpdump -ni any 'udp dst port <DESTINATION_PORT> and src host <ERPC_SOURCE_IP>'
```

Windows (`Pktmon`, เรียกใช้ในฐานะผู้ดูแลระบบ):

```powershell
pktmon filter add ERPC-UDP -t UDP -i <ERPC_SOURCE_IP> -p <DESTINATION_PORT>
pktmon start --capture --comp nics --log-mode real-time
```

### UDP Forwarding Premium

ให้แทนที่ตัวยึดตำแหน่งของ IP ต้นทางด้วย IP ต้นทางที่แสดงในแดชบอร์ด และแทนที่ `<DESTINATION_PORT>` ด้วยพอร์ตปลายทางที่คุณตั้งค่าไว้

Linux (`tcpdump`):

```bash
sudo tcpdump -ni any 'udp dst port <DESTINATION_PORT> and (src host <SOURCE_IP_1> or src host <SOURCE_IP_2>)'
```

ต้องคงวงเล็บไว้ เพราะถ้าไม่มีวงเล็บ ตัวกรอง `udp dst port` จะมีผลเฉพาะกับ IP ต้นทางรายการแรก และการดักจับจะเก็บทราฟฟิกทุกโปรโตคอลและทุกพอร์ตจาก IP ต้นทางทุกรายการที่ถัดจากรายการแรก ให้ใช้เงื่อนไข `src host` หนึ่งรายการต่อ IP ต้นทางหนึ่งรายการ และหากมี IP ต้นทางเพียงรายการเดียว ให้ลบส่วน `or` และวงเล็บออก

Windows (`Pktmon`, เรียกใช้ในฐานะผู้ดูแลระบบ):

```powershell
pktmon filter add ERPC-UDP-1 -t UDP -i <SOURCE_IP_1> -p <DESTINATION_PORT>
pktmon filter add ERPC-UDP-2 -t UDP -i <SOURCE_IP_2> -p <DESTINATION_PORT>
pktmon start --capture --comp nics --log-mode real-time
```

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

### ตรวจสอบไฟร์วอลล์และตัวรับ

1. หากผลการดักจับยังคงเป็นศูนย์ ให้ตรวจสอบทั้งไฟร์วอลล์ของระบบปฏิบัติการและไฟร์วอลล์ภายนอกระบบปฏิบัติการ ในกรณีของ Hetzner ทราฟฟิกอาจถูกกรองที่ Cloud Firewall หรือที่ไฟร์วอลล์ Robot บนพอร์ตของสวิตช์ ส่วนบน AWS ให้ตรวจสอบ Security Group และ Network ACL ของซับเน็ต
2. เพิ่มกฎอนุญาตตามแผนที่คุณใช้:
   - UDP Forwarding Standard: อนุญาต UDP ขาเข้าจาก `<ERPC_SOURCE_IP>/32` ไปยังพอร์ตปลายทาง `<DESTINATION_PORT>` และอย่าจำกัดพอร์ตต้นทาง เพราะ ERPC ใช้พอร์ตต้นทาง UDP แบบไดนามิก
   - UDP Forwarding Premium: อนุญาต UDP ขาเข้าจาก `<SOURCE_IP_n>/32` แต่ละรายการไปยังพอร์ตปลายทาง `<DESTINATION_PORT>` โดยใช้หนึ่งกฎต่อ IP ต้นทางแต่ละรายการที่แสดงในแดชบอร์ด และอย่าจำกัดพอร์ตต้นทาง
3. หากเห็นแพ็กเก็ตในผลการดักจับแต่แอปพลิเคชันไม่ได้รับ ให้ผูกตัวรับไว้กับ `0.0.0.0:<DESTINATION_PORT>` แทน localhost แล้วตรวจสอบไฟร์วอลล์ภายในเครื่องและการตั้งค่าซ็อกเก็ต/โปรเซส

หากยังไม่มีแพ็กเก็ตมาถึงหลังจากอัปเดตกฎแล้ว ให้ส่งระยะเวลาที่ดักจับ, จำนวนแพ็กเก็ต, IP ต้นทาง, IP ปลายทาง และพอร์ตปลายทางไปยังทีมสนับสนุน

เอกสารอ้างอิงของผู้ให้บริการ: [Hetzner Cloud Firewall](https://docs.hetzner.com/cloud/firewalls/overview/), [Hetzner Robot Firewall](https://docs.hetzner.com/robot/dedicated-server/firewall/), [AWS Security Groups](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-security-groups.html), [AWS Network ACLs](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html) และ [Microsoft Pktmon](https://learn.microsoft.com/en-us/windows-server/networking/technologies/pktmon/pktmon)

## แหล่งข้อมูล

- โค้ดและเอกสาร README ทั้งหมดอยู่ใน repository ของ Solana Stream SDK:  
  https://github.com/ValidatorsDAO/solana-stream
