Reliable Data Transfer & TCP

1. Reliable Data Transfer (RDT)

Ensuring data reaches the receiver: Without Loss, Without Duplication, and In Order.

الشبكات مش Perfect.. ممكن يحصل:

  • Packet تتأخر
  • Packet تتكرر
  • Packet تتلخبط في الترتيب
  • Packet تضيع أصلاً

علشان كدة لازم نظام (RDT) يضمن إن البيانات توصل سليمة.

Receiver Rules (القواعد الذهبية):

1️⃣ يقبل الباكت لو هي اللي مستنيها (سليمة وبالترتيب).

2️⃣ يبعت ACK = رقم "أول بايت ناقص" (مش رقم الباكت!).

3️⃣ يرمي الـ Duplicate Packet (لو باكت وصلته قبل كدة).

4️⃣ يرمي الـ Out-of-order Packet (لو Window = 1).

2. TCP Segment Structure

The "Envelope" that carries your data.

Source & Dest Port (32 bits)

Addresses for the sending and receiving applications (The "Door" number).

Sequence Number (32 bits)

Byte-stream number of the first data byte in the segment. (Counting Bytes, NOT packets!).

ACK Number (32 bits)

Sequence number of the NEXT byte expected from the other side. (Cumulative).

Header Length

Length of the TCP header (Variable, min 20 bytes, max 60 bytes).

Receive Window (rwnd)

Number of bytes receiver is willing to accept (Flow Control).

Checksum

Error detection for header and data.

TCP Flags (Bits):

  • SYN (S): Synchronize (Start Connection).
  • FIN (F): Finish (End Connection Gracefully).
  • RST (R): Reset (Abort Connection Forcefully).
  • ACK (A): Acknowledgment field is valid.
  • PSH (P): Push data to app immediately.
  • URG (U): Urgent data pointer is valid.

3. Sequence Numbers & The Window

Golden Rule: Window = Amount of unacknowledged data allowed.

يعني إيه Window؟

دي "كمية البيانات" اللي مسموح للـ Sender يبعتها من غير ما يوقف ويستنى ACK.

لو Window = 1 ⬅️ يبعت باكت ويستنى، يبعت ويستنى (بطيء جداً).

لو Window = 3 ⬅️ يبعت باكت 0، 1، 2 ورا بعض، وبعدين يستنى الـ ACK.

4. TCP Retransmission Scenarios

1. TCP Sender Events (Simplified)

TCP Sender Events

Diagram Analysis:

  • Event 1 (Left): Data Received: The application sends data. TCP creates a segment with seq # = Byte stream number. It starts a Timer if not already running.
  • Event 2 (Top Right): Timeout: The timer runs out! TCP retransmits the oldest unACKed segment and restarts the timer. (This is the "Slow" path).
  • Event 3 (Bottom Right): ACK Received: A valid ACK arrives. TCP marks those packets as safe. If there are still packages in flight, it restarts the timer for them.

2. Lost ACK Scenario

Lost ACK Scenario

What happened here?

1️⃣ الـ Sender بعت بيانات (Seq=92).

2️⃣ الـ Receiver استلمها وبعت ACK=100 (يعني مستني 100).

3️⃣ المشكلة: الـ ACK ده ضاع في السكة (علامة الحمراء).

4️⃣ الـ Sender ميعرفش إنها وصلت، فالـ Timer خلص (Timeout).

5️⃣ الـ Sender بعت البيانات تاني (Retransmission).

6️⃣ الـ Receiver ذكي: شافها "Duplicate" ورماها، بس بعت ACK=100 تاني عشان يطمن الـ Sender.

3. Cumulative ACK (Premature Timeout)

Cumulative ACK

The Power of Cumulative ACK:

1️⃣ هنا حصل مصيبة: الـ ACK=100 اتأخرت جداً (مش ضاعت، بس بطيئة).

2️⃣ الـ Sender افتكرها ضاعت فبعت الداتا تاني (Seq=92).

3️⃣ في نفس الوقت، كان بعت داتا جديدة (Seq=100) ووصلت.

4️⃣ الـ Receiver لما استلم التانية، بعت ACK=120.

السحر هنا: لما ACK=120 وصل للـ Sender، هو فهم إن كل حاجة قبل 120 (بما فيها 100) وصلت تمام!

فمش محتاج يقلق على ACK 100 اللي ضاعت/تأخرت. دي فايدة الـ Cumulative ACK.

4. Fast Retransmit (Triple Duplicate ACKs)

Fast Retransmit

Detailed Analysis:

Notice the stream of arrows ("ACK=100") coming back?

1️⃣ الباكت اللي فيها Seq=100 ضاعت .

2️⃣ لكن الباكتات اللي بعدها وصلت! (Seq=20, etc..).

3️⃣ كل باكت توصل، الـ Receiver يبعت ACK يقول: "أنا لسه مستني 100" (ACK=100).

4️⃣ الـ Sender جاله 3 رسايل ورا بعض بيقولوا "ACK 100".

5️⃣ الـ Sender فهم الإشارة: "أكيد 100 وقعت، مش هستنى التايمر!".. وراح باعتها فوراً.

5. Connection Management (3-Way Handshake)

  1. SYN: "Can I send data? (Seq=x)"
  2. SYN-ACK: "Yes, I'm ready (Seq=y). I acknowledge x (ACK=x+1)."
  3. ACK: "Great, I acknowledge y (ACK=y+1). Connection Established!"

Closing Connection (FIN vs RST)

FIN (Graceful)

"I'm done talking." -> Waits for ACK. Other side can still speak until they send their own FIN.

زي: "أنا خلصت، أقفل؟" .. "تمام، سلام".

RST (Forceful)

"Terminate NOW!" -> Immediate abort. Used for errors or crashes.

زي: قفل السكة في وشك فجأة

6. Flow Control vs Congestion Control

Flow and Congestion Control
Flow Control (rwnd)

Protects the Receiver.

"Don't overwhelm ME."

عشان الـ Buffer بتاع الريسيفر ما يتمليش.

Congestion Control (cwnd)

Protects the Network.

"Don't overwhelm the ROUTERS."

عشان الطريق نفسه ما يقفش (زحمة المرور).

Practice Arena 🎯

1. TCP establishes a reliable connection using which mechanism?
2. Which mechanism prevents a fast sender from overwhelming a slow receiver?