شرح الـ Packet و Frame
المقدمة
تخيل إنك عايز تبعت كتاب كبير لصاحبك في مدينة تانية. مش هتبعت الكتاب كله مرة واحدة، صح؟ هتعمل كده:
- تقسم الكتاب لفصول (Chapters)
- كل فصل تحطه في ظرف (Envelope)
- تكتب على كل ظرف: “الفصل 1 من 10”
- كل ظرف يتحط في صندوق (Box) للشحن
- الصناديق توصل، صاحبك يفتحها ويرتب الفصول
ده بالظبط اللي بيحصل مع البيانات في الشبكات:
- Data = الكتاب
- Segment = الفصول
- Packet = الظرف
- Frame = الصندوق
ليه نقسم البيانات أصلاً؟
المشكلة لو بعتنا كل حاجة مرة واحدة
تخيل إنك عايز تنزل فيديو حجمه 100 MB:
❌ بدون تقسيم:
- لو في خطأ صغير، تنزل الـ 100 MB كلهم تاني
- الشبكة هتتقفل لحد ما التحميل يخلص
- مفيش فرصة لحد تاني يستخدم الشبكة
✅ مع التقسيم:
- البيانات تتقسم لقطع صغيرة (مثلاً 1500 byte لكل قطعة)
- لو قطعة ضاعت، نعيد بعت القطعة دي بس
- الشبكة متاحة للكل
- القطع ممكن تاخد مسارات مختلفة وتوصل أسرع
الرحلة الكاملة: من Data لـ Frame
نظرة عامة على الطبقات
Application Layer → [Data]
↓
Transport Layer → [Segment] = Header + Data
↓
Network Layer → [Packet] = Header + Segment
↓
Data Link Layer → [Frame] = Header + Packet + Trailer
↓
Physical Layer → [Bits] = 0101010101...
تعالى نشرح كل خطوة بالتفصيل.
Layer 4: Segment (التقسيم)
ما هو الـ Segment؟
في Transport Layer (TCP/UDP)، البيانات الكبيرة بتتقسم لقطع صغيرة اسمها Segments.
مثال عملي - TCP Segment
لو عايز تبعت رسالة طويلة:
Original Data: "This is a very long message that needs to be split..."
↓
[TCP Segmentation]
↓
Segment 1: "This is a very "
Segment 2: "long message th"
Segment 3: "at needs to be "
Segment 4: "split..."
بنية الـ TCP Segment
┌─────────────────────────────────┐
│ TCP Header (20-60 bytes) │
│ ┌─────────────────────────────┐ │
│ │ Source Port (16 bits) │ │ ← من أنهي برنامج
│ │ Destination Port (16 bits) │ │ ← لأنهي برنامج
│ │ Sequence Number (32 bits) │ │ ← ترتيب الـ Segment
│ │ Acknowledgment Number (32 bits) │ │ ← تأكيد الاستلام
│ │ Flags (SYN, ACK, FIN, etc.) │ │ ← حالة الاتصال
│ │ Window Size (16 bits) │ │ ← Flow Control
│ │ Checksum (16 bits) │ │ ← كشف الأخطاء
│ └─────────────────────────────┘ │
├──────────────────────────────────┤
│ Data (Payload) │ ← البيانات الفعلية
│ (up to ~65,495 bytes) │
└──────────────────────────────────┘
مثال حقيقي - شوف Segment بعينك
استخدم Wireshark:
# شغل Wireshark
sudo wireshark
# افتح أي موقع في المتصفح
# في Wireshark اختار أي TCP packet
# هتلاقي تفاصيل زي دي:
Transmission Control Protocol
Source Port: 54321
Destination Port: 443 (https)
Sequence Number: 1
Acknowledgment Number: 1
Flags: 0x018 (PSH, ACK)
.... .... ...1 .... = Acknowledgment
.... .... .... 1... = Push
Window: 502
Checksum: 0x1a2b [correct]
Data (120 bytes)
Layer 3: Packet (الحزمة)
ما هو الـ Packet؟
في Network Layer (IP)، الـ Segment بياخد غلاف تاني اسمه IP Header ويبقى اسمه Packet.
الـ Packet هو المسؤول عن التوجيه - يعني إزاي نوصل من IP للتاني.
بنية الـ IP Packet (IPv4)
┌───────────────────────────────────────────────
│ IP Header (20 – 60 bytes)
│ ┌─────────────────────────────────────────────┐
│ │ Version (4 bits) ← IPv4 أو IPv6
│ │ Header Length (4 bits) ← طول الهيدر
│ │ Total Length (16 bits) ← حجم الـ Packet كله
│ │ Identification (16 bits) ← رقم تعريف الباكت
│ │ Flags + Fragment Offset ← التقسيم (Fragment)
│ │ Time To Live - TTL (8 bits) ← عدد القفزات المتبقية.
│ │ Protocol (8 bits) ← TCP=6, UDP=17, ICMP=1
│ │ Header Checksum (16 bits) ← كشف الأخطاء
│ │ Source IP Address (32 bits) ← عنوان المرسل
│ │ Destination IP Address (32) ← عنوان المستقبل
│ └─────────────────────────────────────────────┘
├────────────────────────────────────────────────
│ TCP Segment (من الطبقة الأعلى)
│ (TCP Header + Application Data)
└───────────────────────────────────────────────┘
أهم حاجة في الـ Packet: TTL
الـ TTL (Time To Live) هو عداد بينزل كل ما الـ Packet يعدي على Router.
Packet يبدأ: TTL = 64
↓
Router 1: TTL = 63
↓
Router 2: TTL = 62
↓
Router 3: TTL = 61
↓
...
لو وصل TTL = 0 → الـ Packet يتمسح
ليه؟ عشان الـ Packets ما تفضلش تلف في الشبكة للأبد (Routing Loops).
مثال عملي - شوف TTL
# Ping أي موقع
ping -c 4 google.com
# النتيجة:
64 bytes from 142.250.185.46: icmp_seq=1 ttl=116 time=12.3 ms
64 bytes from 142.250.185.46: icmp_seq=2 ttl=116 time=11.8 ms
الـ ttl=116 يعني الـ Packet بدأ بـ TTL حوالي 128، وعدى على حوالي 12 Router في الطريق.
تجربة - Traceroute بيستغل TTL
traceroute google.com
# النتيجة:
1 192.168.1.1 1.2 ms ← TTL=1، الراوتر الأول يرد
2 10.5.5.1 5.8 ms ← TTL=2، الراوتر التاني يرد
3 62.114.x.x 12 ms ← TTL=3
...
10 142.250.185.46 45 ms ← وصلنا!
ازاي؟
- Traceroute بيبعت Packet بـ TTL=1، الراوتر الأول يرد “Time Exceeded”
- بعدين بيبعت TTL=2، الراوتر التاني يرد
- وهكذا لحد ما يوصل للهدف
Layer 2: Frame (الإطار)
ما هو الـ Frame؟
في Data Link Layer (Ethernet/WiFi)، الـ Packet بياخد غلاف أخير اسمه Frame.
الـ Frame هو المسؤول عن النقل المادي من جهاز للتاني في نفس الشبكة باستخدام MAC Addresses.
بنية الـ Ethernet Frame
┌──────────────────────────────────────────────┐
│ Ethernet Frame
│ ┌────────────────────────────────────────────
│ │ Preamble (7 bytes) ← مزامنة الإشارة
│ │ Start Frame Delimiter (1 byte) ← بداية الـ Frame
│ ├─────────────────────────────────────────────
│ │ Destination MAC Address (6) ← عنوان المستقبل
│ │ Source MAC Address (6) ← عنوان المرسل
│ │ EtherType (2 bytes) ← نوع البروتوكول
│ │ (0x0800 = IPv4)
│ ├─────────────────────────────────────────────
│ │
│ │ Payload (46 – 1500 bytes)
│ │ ← IP Packet
│ │ (IP Header + TCP Segment + Application Data)
│ │
│ ├──────────────────────────────────────────────
│ │ Frame Check Sequence - FCS (4 bytes)
└────────────────────────────────────────────────
الـ Frame Check Sequence (FCS)
ده Checksum بيتحسب على كل الـ Frame. لو في خطأ واحد في الإرسال، الـ FCS مش هيطابق والـ Frame يترفض.
Frame أثناء الإرسال:
Data: 01010101...
FCS: Calculate CRC → 0xABCD1234
Frame عند الاستلام:
Data: 01010101...
Calculated FCS: 0xABCD1234
Received FCS: 0xABCD1234
Match? ✓ → Frame صحيح
Don't Match? ✗ → Frame فيه خطأ، ارميه
مثال عملي - شوف Frame في Wireshark
sudo wireshark
# اختار أي Frame
# هتشوف تفاصيل زي دي:
Frame 42: 98 bytes on wire
Arrival Time: Jan 6, 2026 13:30:15.123456
Frame Length: 98 bytes
Ethernet II
Destination: aa:bb:cc:dd:ee:ff
Source: 11:22:33:44:55:66
Type: IPv4 (0x0800)
Internet Protocol Version 4
Source: 192.168.1.5
Destination: 142.250.185.46
Transmission Control Protocol
Source Port: 54321
Destination Port: 443
Data (50 bytes)
التغليف الكامل (Encapsulation)
الرحلة من Application لـ Physical
┌────────────────────────────────────────────────┐
│ Application Layer │
│ "GET /index.html HTTP/1.1" │
└────────────────────────────────────────────────┘
↓
┌────────────────────────────────────────────────┐
│ Transport Layer (TCP) │
│ ┌──────────────┬──────────────────────────────┐ │
│ │ TCP Header │ GET /index.html HTTP/1.1 │ │
│ │ Src Port: │ │ │
│ │ 54321 │ │ │
│ │ Dst Port:80. │ │ │
│ └──────────────┴──────────────────────────────┘ │
│ = TCP Segment │
└────────────────────────────────────────────────┘
↓
┌───────────────────────────────────────────────┐
│ Network Layer (IP) │
│ ┌──────────────┬─────────────────────────────┐ │
│ │ IP Header. │ TCP Segment │ │
│ │ Src IP: │ │ │
│ │ 192.168.1.5. │ │ │
│ │ Dst IP: │ │ │
│ │ 142.250.x.x. │ │ │
│ └──────────────┴─────────────────────────────┘ │
│ = IP Packet │
└───────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────┐
│ Data Link Layer (Ethernet) │
│ ┌───────────┬────────────────────┬────────┐ │
│ │ Ethernet │ IP Packet │ FCS │ │
│ │ Header │ │ │ │
│ │ Src MAC │ │ │ │
│ │ Dst MAC │ │ │ │
│ └──────────┴─────────────────────┴────────┘ │
│ = Frame │
└─────────────────────────────────────────────┘
↓
┌──────────────────────────────────────────────┐
│ Physical Layer │
│ 0101010101010101010101010101010101010101... │
│ = Bits │
└──────────────────────────────────────────────┘
فك التغليف (Decapsulation)
السيرفر لما يستلم البيانات، بيعمل العكس:
Bits → Frame → Packet → Segment → Data
↓ ↓ ↓ ↓ ↓
يشيل يشيل يشيل يشيل يوصل
كل MAC IP TCP للتطبيق
طبقة header header header
MTU (Maximum Transmission Unit)
يعني إيه MTU؟
أكبر حجم لـ Frame ممكن ينقل على الشبكة. عادة 1500 bytes في Ethernet.
MTU = 1500 bytes
├─ Ethernet Header: 14 bytes
├─ IP Header: 20 bytes
├─ TCP Header: 20 bytes
└─ Data: 1500 - 14 - 20 - 20 = 1446 bytes
لو البيانات أكبر من MTU؟
بيحصل Fragmentation (تجزئة):
Original Packet: 3000 bytes
↓
MTU = 1500
↓
Fragment 1: 1500 bytes (More Fragments = 1)
Fragment 2: 1500 bytes (More Fragments = 0)
مشاكل الـ Fragmentation
❌ بطء في الأداء
❌ احتمال فقدان Fragments
❌ استهلاك موارد أكتر
تجربة - شوف MTU بتاع جهازك
# على Linux/Mac
ip link show
# النتيجة:
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500
link/ether 11:22:33:44:55:66
# على Windows
netsh interface ipv4 show subinterfaces
# النتيجة:
MTU MediaSenseState Bytes In Bytes Out Interface
------ --------------- --------- --------- -------------
1500 1 1234567890 987654321 Ethernet
من ناحية السيكيورتي
1. Packet Sniffing
الـ Packets والـ Frames ممكن يتم التقاطها بسهولة:
# استخدام tcpdump
sudo tcpdump -i eth0 -n
# النتيجة:
13:30:15.123456 IP 192.168.1.5.54321 > 142.250.185.46.443: Flags [P.], seq 1:100
13:30:15.125678 IP 142.250.185.46.443 > 192.168.1.5.54321: Flags [.], ack 100
الخطر: لو الشبكة مش مشفرة (HTTP بدل HTTPS)، الـ Attacker يقرأ كل حاجة.
الحل: استخدام Encryption (HTTPS, VPN, SSH).
2. Packet Injection
إدخال Packets مزيفة في الشبكة:
# مثال: إرسال TCP SYN مزيف
hping3 -S -p 80 -c 1000 target.com
# هيبعت 1000 SYN packet (SYN Flood Attack)
الحل: Firewall يفلتر الـ Packets المشبوهة.
3. Fragmentation Attacks
استغلال الـ Fragmentation:
Ping of Death
# إرسال ping بحجم ضخم (> 65,535 bytes)
ping -s 65500 target.com
# النظام القديم ممكن يكراش
Teardrop Attack
إرسال Fragments متداخلة تخلي النظام يكراش.
الحل: تحديث الأنظمة، Firewall يرفض Fragments المشبوهة.
4. MAC Spoofing
تغيير الـ MAC Address في الـ Frame:
# تغيير MAC address مؤقت
sudo ifconfig eth0 hw ether 00:11:22:33:44:55
# أو
sudo macchanger -m 00:11:22:33:44:55 eth0
الاستخدام:
- تجاوز MAC Filtering
- إخفاء الهوية
- MAC-based attacks
الحل: Port Security على الـ Switch.
مثال عملي كامل: رحلة HTTP Request
السيناريو
تفتح المتصفح وتكتب http://example.com
الخطوات بالتفصيل
1. Application Layer
Browser creates HTTP Request:
"GET / HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0"
2. Transport Layer (TCP)
TCP Segment:
┌──────────────┬─────────────────┐
│ TCP Header │ HTTP Request │
│ Src: 54321 │ "GET / ..." │
│ Dst: 80 │ │
│ Seq: 1 │ │
│ Flags: PSH │ │
└──────────────┴─────────────────┘
3. Network Layer (IP)
IP Packet:
┌─────────── ──┬────────────┐
│ IP Header │ TCP Segment │
│ Src IP: │ │
│ 192.168.1.5 │ │
│ Dst IP: │ │
│ 93.184.216.34 │ │
│ TTL: 64 │ │
│ Protocol: 6 │ │
└──────────── ──┴────────────┘
4. Data Link Layer (Ethernet)
Ethernet Frame:
┌────────┬──────────────┬─────┐
│Ethernet │ IP Packet │ FCS │
│Header │ │ │
│Src MAC: │ │ │
│11:22.. │ │ │
│Dst MAC: │ │ │
│aa:bb.. │ │ │
└────────┴──────────────┴─────┘
5. Physical Layer
Converting to electrical signals...
01010101010101010101010101...
Transmitting on wire/WiFi...
الرد يرجع بنفس الطريقة بالعكس
Server Response:
"HTTP/1.1 200 OK
Content-Type: text/html
..."
↓
TCP Segment
↓
IP Packet
↓
Ethernet Frame
↓
Bits
↓
Your Computer receives
↓
De-encapsulation
↓
Browser displays the page
خلاصة
الفرق بين Segment و Packet و Frame
| Name | Layer | Address | Contains |
|---|---|---|---|
| Segment | Layer 4 (Transport) | Port Numbers (Src & Dst) | Data |
| Packet | Layer 3 (Network) | IP Addresses (Src & Dst) | Segment |
| Frame | Layer 2 (Data Link) | MAC Addresses (Src & Dst) | Packet |
متى نستخدم أي مصطلح؟
- Segment: لما نتكلم عن TCP/UDP
- Packet: لما نتكلم عن IP Routing
- Frame: لما نتكلم عن Ethernet/WiFi
من ناحية السيكيورتي
- فهم البنية يساعدك تعرف أنهي طبقة فيها المشكلة
- Packet Analysis أساس الـ Network Forensics
- كل طبقة ليها هجمات خاصة بيها
- Encryption بيحمي الـ Data جوه الـ Packets
في المقالات الجاية هنتعمق في البروتوكولات وازاي نحلل الـ Packets في الـ Penetration Testing.