پرش به مطلب اصلی

PacketSender

PacketSender یک chain-head لایه ۳ برای ساخت و ارسال packetهای IPv4 مصنوعی است. این نود در startup یک packet store می‌سازد و packetها را در طول مدت تنظیم‌شده به شکل یکنواخت روی worker packet lineها پخش می‌کند.

جایگاه رایج

PacketSender -> IpManipulator -> RawSocket
PacketSender -> WireGuardDevice -> UdpStatelessSocket

نمونه تنظیم

{
"name": "packet-sender",
"type": "PacketSender",
"settings": {
"source-ip4-range": [
"198.51.100.0/24",
"203.0.113.0/24"
],
"dest-ip4": "203.0.113.20",
"protocol-number": "TCP",
"duration-ms": 5000,
"dest-port": 443,
"src-port": "random"
},
"next": "raw-ip"
}

تنظیمات ضروری

گزینهتوضیح
source-ip4-rangeیک CIDR IPv4 یا آرایه‌ای از CIDRها. نود برای هر IP در این رنج packet می‌سازد.
dest-ip4مقصد IPv4
protocol-numberیکی از TCP، UDP، ICMP یا ALL
duration-msمدت زمان پخش packetها به میلی‌ثانیه
dest-portبرای TCP، UDP و ALL لازم است
src-portبرای TCP، UDP و ALL لازم است؛ عدد یا "random"

راهنمای استفاده

  • این نود با packet خام کار می‌کند؛ آن را در مسیر stream معمولی TCP قرار ندهید.
  • برای تست مسیرهای IpManipulator، RawSocket و WireGuardDevice مفید است.
  • PacketSender باید ابتدای chain باشد و shared packet lineها را در runtime نابود نمی‌کند.
  • اگر سناریو شما تولید ترافیک stream است، معمولا TesterClient مناسب‌تر است.

شکل packetهای تولیدشده

همه خروجی‌ها IPv4 هستند و TTL پیش‌فرض 64 دارند.

protocol-numberخروجی
TCPTCP segment حداقلی با flag ACK، checksum معتبر، destination port و source port تنظیم‌شده
UDPUDP datagram حداقلی با checksum معتبر و portهای تنظیم‌شده
ICMPICMP echo request با checksum معتبر و identifier/sequence deterministic
ALLبرای هر source IP دقیقا 255 packet، یکی برای protocol numberهای 0 تا 254

در حالت ALL، protocolهای 6، 17 و 1 به شکل معتبر TCP، UDP و ICMP ساخته می‌شوند و بقیه protocolها IPv4 packet معتبر با payload کوچک opaque هستند.

زمان‌بندی ارسال

PacketSender همه packetها را یک‌جا قبل از شروع ارسال materialize می‌کند، بعد deadline هر packet را براساس index آن، تعداد کل packetها و duration-ms حساب می‌کند. نتیجه این است که packetها در کل بازه تنظیم‌شده پخش می‌شوند و همه یک‌باره burst نمی‌شوند.

اگر چند packet به یک میلی‌ثانیه بیفتند، همان worker آنها را پشت سر هم می‌فرستد.

مصرف حافظه

packet store به صورت contiguous ساخته می‌شود تا fragmentation کمتر شود. برای ایمنی، configهایی که packet store نهایی‌شان بیشتر از 512 MiB شود رد می‌شوند. اگر ترافیک بیشتری می‌خواهید، source range را کوچک‌تر کنید یا چند PacketSender جدا بسازید.

نکته

در mode ALL برای هر source IP تعداد 255 packet ساخته می‌شود؛ یکی برای protocol numberهای 0 تا 254. برای رنج‌های بزرگ، حجم packet store می‌تواند زیاد شود.