**پیمایش TCP NAT** و **سوراخ سوراخ تی سی پی (TCP)** (گاهی اوقات عبور **پانچ NAT**) زمانی اتفاق می‌افتد که دو میزبان پشت ترجمه آدرس شبکه (NAT) سعی دارند با اتصالات خروجی تی سی پی (TCP) به یکدیگر متصل شوند. این سناریو به خصوص در مورد مهم است نظیر به نظیر ارتباطات، مانند صدا از طریق IP (VoIP) به اشتراک گذاری فایل، راه دور، سیستم‌های چت و برنامه‌های مشابه.

سوراخ کردن سوراخ تی سی پی (TCP) یک روش پیمایش NAT است که برای ایجاد اتصال TCP بین دو همتا در اینترنت در پشت دستگاه‌های NAT مورد استفاده قرار گرفته‌است. *پیمایش NAT* اصطلاحی کلی برای تکنیک‌هایی است که شبکه TCP / IP و / یا اتصالات تی سی پی (TCP) را پیمایش می‌کند و دروازه‌های NAT را پیمایش می‌کند.

واژه‌شناسی
----------

در ادامه، اصطلاحات میزبان، مشتری و همکار تقریباً به جای هم استفاده می‌شوند.

*نقطه پایانی محلی*، *نقطه پایانی داخلی*
IP محلی: پورتی که توسط میزبان و قسمت داخلی NAT به صورت محلی مشاهده می‌شود.
*نقطه پایان عمومی*، *نقطه پایان خارجی*
IP خارجی: پورتی که توسط NAT مشخص شده‌است، همان‌طور که توسط شبکه و قسمت خارجی NAT دیده می‌شود.
*نقطه پایان از راه دور*
IP: پورت همتای دیگر که توسط شبکه یا قسمتهای خارجی هر دو NAT دیده می‌شود.

شرح
---

عبور از طریق NAT، از طریق سوراخ سوراخ، با استفاده از NAT، اتصالات دو طرفه تی سی پی (TCP) را بین میزبانهای اینترنت در شبکه‌های خصوصی برقرار می‌کند. با انواع NATها کار نمی‌کند، زیرا رفتار آنها استاندارد نیست. هنگامی که دو میزبان در تی سی پی (TCP) به یکدیگر متصل می‌شوند، هر دو از طریق اتصالات خروجی، آنها در حالت "همزمان بازکردن تی سی پی (TCP)" نمودار ماشین حالت تی سی پی (TCP) هستند.

انواع NAT
---------

در دسترس بودن سوراخ سوراخ تی سی پی (TCP) به نوع تخصیص پورت کامپیوتر به کار رفته توسط NAT بستگی دارد. برای دو همتا پشت NAT برای اتصال TCP simultaneous open[*نیازمند توضیح بیشتر*]، آنها باید کمی دربارهٔ یکدیگر بدانند. چیزی که آنها کاملاً باید بدانند «مکان» همکار دیگر یا نقطه انتهایی از راه دور است. نقطه پایانی از راه دور داده‌های آدرس IP و پورتی است که همکار به آن متصل می‌شود؛ بنابراین وقتی دو همتا، A و B، به ترتیب با اتصال به پورت‌های محلی Pa و Pb، اتصال تی سی پی (TCP) را آغاز می‌کنند، برای برقراری اتصال باید پورت نقطه انتهایی از راه دور را به عنوان نقشه‌برداری شده توسط NAT بدانند. هنگامی که هر دو همتا پشت NAT هستند، نحوه کشف نقطه پایانی از راه دور عمومی همتای دیگر مشکلی به نام *پیش‌بینی پورت NAT است*. تمام روشهای پیمایش و سوراخکاری تی سی پی (TCP) NAT باید مشکل پیش‌بینی پورت را حل کنند.

تخصیص درگاه NAT می‌تواند یکی از این دو باشد:

قابل پیش‌بینی
دروازه از یک الگوریتم ساده برای ترسیم پورت محلی به پورت NAT استفاده می‌کند. بیشتر اوقات یک NAT از *حفظ پورت* استفاده می‌کند، به این معنی که پورت محلی به همان پورت NAT نگاشت می‌شود.
غیرقابل پیش‌بینی
دروازه‌ها از الگوریتمی استفاده می‌کنند که تصادفی است یا برای پیش‌بینی خیلی غیر عملی است.
بسته به اینکه NATها یک رفتار قابل پیش‌بینی یا غیرقابل پیش‌بینی از خود نشان دهند، انجام اتصال تی سی پی (TCP) از طریق تی سی پی (TCP) به صورت همزمان امکان‌پذیر است یا نه، همان‌طور که در زیر توسط ماتریس اتصال نشان دهنده موارد مختلف و تأثیر آنها در انتها به ارتباطات پایان:

تکنیک
-----

### روش‌های پیش‌بینی بندر (با NATهای قابل پیش‌بینی)

در اینجا برخی از روش‌های استفاده شده توسط NATs برای همگام سازی‌ها برای انجام پیش‌بینی بندر وجود دارد:

* NAT به پورت‌های داخلی متوالی پورت‌های خارجی متوالی اختصاص می‌دهد.

اگر همتا از راه دور اطلاعات یک نقشه‌برداری را داشته باشد، می‌تواند ارزش نگاشت‌های بعدی را حدس بزند. اتصال TCP در دو مرحله اتفاق می‌افتد، در ابتدا همتایان با شخص ثالث ارتباط برقرار می‌کنند و نقشه‌برداری آنها را می‌آموزند. برای مرحله دوم، هر دو همکار می‌توانند حدس بزنند که برای همه اتصالات بعدی نگاشت درگاه NAT چگونه خواهد بود که پیش‌بینی پورت را حل می‌کند. این روش نیاز به ایجاد حداقل دو اتصال متوالی برای هر همتا دارد و نیاز به استفاده از شخص ثالث دارد. این روش در صورت وجود Carrier-grade NAT با تعداد زیادی مشترک در پشت هر آدرس IP به درستی کار نمی‌کند، زیرا فقط مقدار محدودی پورت در دسترس است و اختصاص پورت‌های متوالی به یک میزبان داخلی ممکن است غیر عملی یا غیرممکن باشد.

* NAT از طرح تخصیص حفظ پورت استفاده می‌کند: NAT پورت منبع همتا داخلی را به همان پورت عمومی ترسیم می‌کند.

در این حالت، پیش‌بینی پورت پیش پا افتاده‌است و همکاران به راحتی باید پورتی را که به آن متصل هستند از طریق کانال ارتباطی دیگری (مانند UDP یا DHT) قبل از بازکردن همزمان اتصالات خروجی TCP، مبادله کنند. این روش فقط به یک اتصال در هر کاربر نیاز دارد و برای پیش‌بینی پورت به شخص ثالث نیاز ندارد.

* NAT از «نگاشت مستقل نقطه پایان» استفاده می‌کند: دو اتصال تی سی پی (TCP) پی در پی که از همان نقطه پایانی داخلی می‌آیند به همان نقطه پایانی عمومی ترسیم می‌شوند.

با استفاده از این راه حل، همتا ابتدا به یک سرور شخص ثالث متصل می‌شوند که ارزش نگاشت درگاه آنها را ذخیره می‌کند و به هر دو همتا ارزش نگاشت پورت همکار دیگر را می‌دهد. در مرحله دوم، هر دو همتا از نقطه پایانی محلی یکسان استفاده می‌کنند تا همزمان یک باز تی سی پی (TCP) را با یکدیگر انجام دهند. متأسفانه این امر مستلزم استفاده از SO\_REUSEADDR در سوکتهای تی سی پی (TCP) است و چنین استفاده ای استاندارد تی سی پی (TCP) را نقض می‌کند و می‌تواند منجر به خراب شدن داده‌ها شود. فقط درصورتی که برنامه بتواند از خود در برابر تخریب این داده‌ها محافظت کند، باید استفاده شود.

### جزئیات نمونه اولیه اتصال تی سی پی (TCP) با سوراخ سوراخ تی سی پی (TCP)

ما در اینجا فرض می‌کنیم که پیش‌بینی پورت قبلاً از طریق یکی از روش‌های توضیح داده شده در بالا صورت گرفته‌است و هر همتا نقطه پایانی همکار را از راه دور می‌داند. هر دو هم صدا *تماس POSIX متصل* به نقطه پایانی همتا را انجام می‌دهند. تی سی پی (TCP) همزمان باز به صورت زیر اتفاق می‌افتد:

1. * Peer A SYN را برای Peer B ارسال می‌کند
	* Peer B یک SYN را برای Peer A ارسال می‌کند
	* وقتی NAT-a SYN خروجی را از Peer A دریافت می‌کند، در دستگاه حالت خود نقشه‌برداری ایجاد می‌کند.
	* وقتی NAT-b SYN خروجی را از Peer B دریافت می‌کند، در دستگاه حالت خود نقشه‌برداری ایجاد می‌کند.
2. هر دو SYN در امتداد مسیر شبکه از جایی عبور می‌کنند، سپس:
	* SYN از Peer A به NAT-b می‌رسد، SYN از Peer B به NAT-a می‌رسد
	* بسته به زمان این رویدادها (در کجای شبکه SYN متقابل است)،
	* حداقل یکی از NAT به SYN ورودی اجازه می‌دهد و آن را برای مقصد داخلی ترسیم می‌کند
3. با دریافت SYN، همکار SYN + ACK را به عقب می‌فرستد و اتصال برقرار می‌شود.

الزامات قابلیت همکاری در NAT برای سوراخکاری سوراخ تی سی پی (TCP)
----------------------------------------------------------------

### سایر الزامات موجود در NAT برای مطابقت با تی سی پی (TCP) همزمان باز است

برای کارکرد همزمان NAT، تی سی پی (TCP) باید:

* RST را به عنوان پاسخی برای بسته SYN ورودی ارسال نکنید که بخشی از نقشه‌برداری نیست
* وقتی NAT قبلاً یک SYN خروجی را برای همان نقطه پایانی مشاهده کرده‌است، یک SYN ورودی را برای یک نقطه پایانی عمومی بپذیرید

این برای اطمینان از اینکه NATها با توجه به تی سی پی (TCP) همزمان باز رفتار خوبی دارند، کافی است.

تکنیک توضیح داده شده در بالا در CGN به خوبی کار می‌کند. CGN همچنین می‌تواند از یک *رفتار اضافه بار درگاه استفاده* کند، به این معنی که نقاط انتهایی داخلی مشخص با همان مقدار پورت را می‌توان در همان نقطه پایانی عمومی ترسیم کرد. این منحصر به فرد بودن پنج {protocol, public address, public port, remote address, remote port } نیست و در نتیجه قابل قبول است. *حفظ پورت* تی سی پی (TCP) همچنین می‌تواند منجر به مواردی شود که پورت‌های CGN بیش از حد بارگیری می‌شوند و مسئله ای برای سالم بودن پروتکل نیست. *اضافه بار پورت* برای تی سی پی (TCP) به CGN این امکان را می‌دهد تا با حفظ ضمانت‌های ارتباطی تی سی پی (TCP) از انتها به پایان، میزبان بیشتری را در داخل جا دهد.

جستارهای وابسته
---------------

* سوراخ زدن سوراخ (شبکه)
* سوراخ سوراخ ICMP
* پروتکل کنترل بندر (PCP)
* سوراخ سوراخ UDP

منابع
-----

1. ↑  Information Sciences Institute (September 1981). "Transmission control protocol: DARPA internet program protocol specification". *IETF*. Defense Advanced Research Projects Agency.