شرح الـ Packet و Frame

المقدمة

تخيل إنك عايز تبعت كتاب كبير لصاحبك في مدينة تانية. مش هتبعت الكتاب كله مرة واحدة، صح؟ هتعمل كده:

  1. تقسم الكتاب لفصول (Chapters)
  2. كل فصل تحطه في ظرف (Envelope)
  3. تكتب على كل ظرف: “الفصل 1 من 10”
  4. كل ظرف يتحط في صندوق (Box) للشحن
  5. الصناديق توصل، صاحبك يفتحها ويرتب الفصول

ده بالظبط اللي بيحصل مع البيانات في الشبكات:

  • 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    │               │
└──────────── ──┴────────────┘
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.