درست الاتصالات الرئيسية لأول مرة. بعد التخرج ، ذهب زملائي في الدراسة طرقهم المنفصلة لمتابعة أحلامهم وسافر بين مواقع البناء من جميع الأحجام. هاها ، تمزح فقط ، هناك أيضًا بعض الأشخاص المذهلين الذين دخلوا معهد أبحاث معين ، هاه؟ والده ليس المخرج ، لذلك لا ينبغي أن يكون مظلمًا جدًا في الداخل. أتذكر أنه كان هناك دورة عالية المستوى تسمى شبكة الكمبيوتر (ربما هذا الاسم). هناك مفهوم حول المصافحة ، والآن مراجعته.
دعونا نلقي نظرة على التخطيطي أولاً:
TCP موجه نحو الاتصال. بغض النظر عن الاتجاه الذي يرسله الطرف الآخر البيانات ، يجب إنشاء اتصال بين الطرفين. في بروتوكول TCP/IP ، يوفر بروتوكول TCP خدمات اتصال موثوقة ، ويتم تهيئة الاتصال من خلال ثلاثة مصافحة. الغرض من المصافحة الثلاثية هو مزامنة الرقم التسلسلي ورقم تأكيد كلا الطرفين وتبادل معلومات حجم نافذة TCP.
1. المصافحة الأولى: إنشاء اتصال. يرسل العميل قطاع رسالة طلب الاتصال ، ويقوم بتعيين موضع SYN إلى 1 ، ورقم التسلسل هو X ؛ بعد ذلك ، يدخل العميل حالة syn_send وينتظر تأكيد الخادم ؛
2. المصافحة الثانية: يستقبل الخادم قطاع رسالة SYN. عندما يتلقى الخادم قطاع رسالة SYN من العميل ، فإنه يحتاج إلى تأكيد شريحة رسالة SYN وتعيين رقم الإقرار على x+1 (رقم التسلسل+1) ؛ في الوقت نفسه ، يحتاج أيضًا إلى إرسال معلومات طلب SYN ، وتعيين موضع SYN على 1 ورقم التسلسل إلى Y ؛ يضع الخادم جميع المعلومات المذكورة أعلاه في قطاع الحزم (أي جزء الرسائل Syn+ACK) ويرسلها إلى العميل معًا. في هذا الوقت ، يدخل الخادم حالة syn_recv ؛
3. المصافحة الثالثة: يتلقى العميل قطاع حزمة SYN+ACK من الخادم. ثم قم بتعيين رقم الإقرار على Y+1 وأرسل قطاع رسالة ACK إلى الخادم. بعد إرسال شريحة الرسائل ، يدخل كل من العميل والخادم الحالة المعمول بها وإكمال مصافحة TCP ثلاث مرات.
بعد الانتهاء من ثلاثة مصافحة ، يمكن للعميل والخادم البدء في نقل البيانات. ما سبق هو المقدمة الشاملة لمصافحة TCP ثلاث مرات.
ماذا عن تلك الأمواج الأربع؟
بعد أن يقوم العميل والخادم بإنشاء اتصال TCP من خلال ثلاثة مصافحة ، عند اكتمال نقل البيانات ، يجب فصل اتصال TCP. ثم هناك "أربع موجات" غامضة هنا من أجل فصل TCP.
1. الموجة الأولى: المضيف 1 (يمكن استخدامها كعميل أو كخادم) ، وتعيين رقم التسلسل ورقم الإقرار ، وإرسال شريحة رسائل زعنفة إلى المضيف 2 ؛ في هذا الوقت ، يدخل المضيف 1 إلى حالة fin_wait_1 ؛ هذا يعني أن المضيف 1 ليس لديه بيانات يمكن إرسالها إلى المضيف 2 ؛
2. الموجة الثانية: تلقى المضيف 2 شريحة رسائل الزعنفة التي أرسلها المضيف 1 ، وأعاد مقطع رسالة ACK إلى المضيف 1. رقم الإقرار هو رقم التسلسل زائد 1 ؛ المضيف 1 يدخل حالة fin_wait_2 ؛ يخبر المضيف 2 المضيف 1 أنه ليس لدي بيانات لإرسالها ، حتى أتمكن من إغلاق الاتصال ؛
3. الموجة الثالثة: المضيف 2 يرسل شريحة رسائل زعنفة إلى المستضافة 1 ، يطلب إغلاق الاتصال ، وفي نفس الوقت ، يدخل المضيف 2 حالة Close_Wait ؛
4. الموجة الرابعة: يستقبل المضيف 1 شريحة رسائل الزعنفة المرسلة بواسطة المضيف 2 ، ويرسل مقطع رسالة ACK إلى المضيف 2 ، ثم يدخل المضيف 1 إلى حالة time_wait ؛ بعد أن يتلقى المضيف 2 شريحة رسائل ACK من المضيف 1 ، يغلق الاتصال ؛ في هذا الوقت ، لا يزال المضيف 1 لا يتلقى ردًا بعد انتظار 2 مللي ثانية ، ويثبت أنه تم إغلاق جانب الخادم بشكل طبيعي ، لذلك لا بأس ، يمكن للمضيف 1 أيضًا إغلاق الاتصال.
في هذه المرحلة ، تم الانتهاء من موجات TCP الأربع بسعادة. عندما ترى هذا ، سيكون لديك الكثير من الأسئلة في عقلك ، والكثير من لا يفهم ، ويشعر بالفوضى ؛ لا بأس ، دعنا نستمر في تلخيصها.
لماذا تحتاج إلى مصافحة ثلاث مرات؟
تعني المصافحة الثلاثية المزعومة إنشاء اتصال TCP ، مما يعني أنه عند إنشاء اتصال TCP ، يحتاج العميل والخادم إلى إرسال ما مجموعه 3 حزم لتأكيد إنشاء الاتصال. في برمجة المقبس ، يتم تشغيل هذه العملية من قبل العميل الذي ينفذ Connect.
نظرًا لأننا قمنا بتلخيص المصافحة الثلاثة لـ TCP ، فلماذا يتعين علينا القيام ثلاث مرات؟ لماذا نعتقد أنه يمكننا إكماله مرتين؟ فلماذا يتعين على TCP إجراء ثلاثة اتصالات؟ هذا ما قاله Xie Xiren في "شبكة الكمبيوتر":
من أجل منع نقل شريحة طلب الاتصال الفاشلة فجأة إلى الخادم ، يحدث خطأ.
في الكتاب ، يتم تقديم مثال على النحو التالي:
إن توليد "شريحة طلب الاتصال الفاشلة" موجود في مثل هذه الحالة: لم يتم فقد شريحة طلب الاتصال الأول الذي أرسله العميل.
بدلاً من ذلك ، يبقى في عقدة شبكة معينة لفترة طويلة ، مما يؤدي إلى تأخير حتى وقت معين بعد إصدار الاتصال قبل الوصول إلى الخادم. كان هذا في الأصل أ
منذ فترة طويلة فشلت شريحة الرسائل. ومع ذلك ، بعد استلام الخادم هذا شريحة رسالة طلب الاتصال غير الصالحة ، اعتقدت عن طريق الخطأ أنها كانت واحدة جديدة أرسلها العميل مرة أخرى
طلب الاتصال. لذلك تم إرسال قطاع الإقرار إلى العميل ووافق على إنشاء الاتصال. على افتراض أن "المصافحة ثلاث مرات" لم يتم اعتمادها ، ثم الخادم فقط
إصدار تأكيد ويتم إنشاء الاتصال الجديد. نظرًا لأن العميل لم يصدر طلبًا لإنشاء اتصال ، فلن يتم تجاهل تأكيد الخادم.
لن يتم إرسال أي بيانات إلى الخادم أيضًا. لكن الخادم اعتقد أن اتصال النقل الجديد قد تم إنشاؤه وكان ينتظر العميل لإرسال البيانات. لذا،
تضيع العديد من موارد الخادم. يمكن منع الظاهرة أعلاه من الحدوث باستخدام "المصافحة ثلاث مرات". على سبيل المثال ، الوضع الآن ،
لن يصدر العميل إقرارًا بإقرار الخادم. نظرًا لأن الخادم لا يمكنه تلقي التأكيد ، فهو يعلم أن العميل لا يتطلب إنشاء الاتصال. "
هذا واضح للغاية ، مما يمنع الخادم من الانتظار وإهدار الموارد.
لماذا عليك أن تلوح أربع مرات؟
لماذا تلوح أربع مرات؟
تتمثل ما يسمى في اتجاهات الموجة ذات الاتجاه الرباعي في إنهاء اتصال TCP ، مما يعني أنه عندما يتم فصل اتصال TCP ، يحتاج العميل والخادم إلى إرسال إجمالي 4 حزم لتأكيد اتصال الاتصال. في برمجة المقبس ، يتم تشغيل هذه العملية من قبل العميل أو الخادم الذي ينفذ.
بروتوكول TCP هو بروتوكول اتصالات نقل طبقة النقل القائمة على الاتصال ، موثوق به للاتصال. TCP هو وضع Duplex الكامل ، مما يعني أنه عندما يرسل المضيف 1 مقطع زعانف ، فهذا يعني فقط أن المضيف 1 ليس لديه بيانات يمكن إرسالها. يخبر المضيف 1 المضيف 2 أنه تم إرسال بياناته ؛ ومع ذلك ، في هذا الوقت ، لا يزال بإمكان المضيف 1 قبول البيانات من المضيف 2 ؛ عندما يقوم المضيف 2 بإرجاع شريحة ACK ، فهذا يعني أنه يعرف بالفعل أن المضيف 1 لا يحتوي على بيانات يمكن إرسالها ، ولكن لا يزال بإمكان المضيف 2 إرسال البيانات إلى المضيف 1 ؛ عندما يرسل المضيف 2 أيضًا مقطع زعنفة ، فهذا يعني أن المضيف 2 لا يحتوي على بيانات يمكن إرسالها ، وسيخبر المضيف 1 أنه ليس لدي أي بيانات يتم إرسالها ، ثم سيقاطع بعضها البعض لحسن الحظ اتصال TCP. إذا كنت ترغب في فهم مبدأ أربع موجات بشكل صحيح ، فأنت بحاجة إلى فهم التغييرات في الحالة خلال الأمواج الأربع.
fin_wait_1: يجب شرح هذه الحالة بعناية. في الواقع ، فإن المعنى الحقيقي لحالات fin_wait_1 و fin_wait_2 على حد سواء لانتظار رسالة زعنفة الطرف الآخر. الفرق بين هاتين الدولتين هو: حالة fin_wait_1 هي في الواقع عندما يكون المقبس في الحالة القائمة ، فهي تريد إغلاق الاتصال بنشاط وإرسال رسالة زعنفة إلى الطرف الآخر. في هذا الوقت ، يدخل المقبس حالة fin_wait_1. عندما يستجيب الطرف الآخر لرسالة ACK ، فإنه يدخل حالة FIN_WAIT_2. بطبيعة الحال ، في ظل الظروف العادية الفعلية ، بغض النظر عن الطرف الآخر ، يجب الرد على رسالة ACK على الفور على رسالة ACK. لذلك ، يصعب رؤية حالة FIN_WAIT_1 بشكل عام ، ويمكن في كثير من الأحيان رؤية حالة FIN_WAIT_2 مع NetStat. (حفلة نشطة)
fin_wait_2: تم شرح هذه الحالة بالتفصيل أعلاه. في الواقع ، فإن المقبس في حالة fin_wait_2 يعني نصف الاتصال ، أي أن طرفًا واحدًا يتطلب اتصالًا وثيقًا ، لكنه يخبر الطرف الآخر أيضًا أن لدي بعض البيانات التي يتم نقلها إليك (معلومات ACK) في الوقت الحالي ، ثم أغلق الاتصال لاحقًا. (حفلة نشطة)
Close_wait: معنى هذه الحالة هو في الواقع في انتظار الإغلاق. كيف تفهم؟ عندما يغلق الطرف الآخر مقبسًا ويرسل رسالة زعنفة إلى نفسك ، فإن نظامك سيستجيب بلا شك لرسالة ACK إلى الطرف الآخر ، وبعد ذلك سوف يدخل حالة Close_Wait. بعد ذلك ، ما تحتاجه حقًا هو التحقق مما إذا كان لا يزال لديك بيانات لإرسالها إلى الطرف الآخر. إذا لم يكن الأمر كذلك ، فيمكنك إغلاق المقبس وإرسال رسائل الزعنفة إلى الطرف الآخر ، أي إغلاق الاتصال. لذلك عندما تكون في حالة Close_Wait ، فإن ما عليك فعله هو الانتظار حتى تغلق الاتصال. (الجانب السلبي)
Last_ack: هذه الحالة سهلة الفهم نسبيًا. إنه يغلق بشكل سلبي رسالة ACK للطرف الآخر بعد إرسال رسالة الزعنفة. بعد تلقي رسالة ACK ، يمكنك إدخال الحالة المغلقة المتاحة. (الجانب السلبي)
time_wait: هذا يعني أنه تم استلام رسالة زعنفة الطرف الآخر وتم إرسال رسالة ACK. فقط انتظر 2msl للعودة إلى حالة الإغلاق المتاحة. إذا كان في حالة Finwait1 ، عند تلقي رسالة مع الطرف الآخر مع كل من علم الزعنفة وعلم ACK ، يمكنك إدخال حالة time_wait مباشرة دون المرور بحالة Fin_Wait_2. (حفلة نشطة)
مغلق: يشير إلى أن الاتصال قد توقف.
لخص
ما سبق هو المحتوى الكامل لهذه المقالة حول مبدأ وتحليل العملية لثلاثة مصافحة وأربعة مصافحة في بروتوكول TCP/IP. آمل أن يكون ذلك مفيدًا للجميع. إذا كانت هناك أي أوجه قصور ، فيرجى ترك رسالة ونتطلع إلى آرائك القيمة.