[Linux]NAT和代理服務器

1. NAT:(Network Address Translation)是網絡地址轉換。

我們有這樣一種場景,在專用網內部的一些主機本來已經分配到了本地IP地址,但現在又想和因特網上的主機通信,我們可以設法再申請一些全球IP地址,但是這個是不容易做到的,因為全球IPv4地址已經不多了,那么此時我們用的最多的就是使用網絡地址轉換技術。這種方法需要在專用網連接到因特網的路由器上安裝NAT軟件。裝有NAT軟件的路由器叫做NAT路由器,它至少有一個有效的外部全球IP地址。這樣所有使用本地地址的主機在和外界通信時,都要在NAT路由器上將其本地地址轉換成全球IP地址,才能和因特網相連。

舉個例子,當專用網主機A向因特網主機B上發送IP數據報,比如源IP地址為192.168.0.3,目的IP地址為213.18.2.4,NAT路由器會把IP數據報的源IP地址轉換為新的源IP地址172.38.1.5,然后轉發出去,因此主機B收到IP數據報時,以為A的地址是172.38.1.5,當B給A發送應答的時候,IP數據報的目的地址是NAT路由器的IP地址172.38.1.5。B并不知道A的專用地址192.168.0.3,即使知道了,也不能使用。因為因特網的路由器都不轉發目的地址是專用網本地IP地址的IP數據報。當NAT路由器收到因特網上的主機B發來的IP數據報時,還要進行一次IP地址的轉換。通過NAT地址轉換表,就可把IP數據報上的舊的目的IP地址172.38.1.5,轉換為新的目的IP地址192.168.0.3。

工作原理:

當內部網絡中的一臺主機想傳輸數據到外部網絡時,它先將數據包傳輸到NAT路由器上,路由器檢查數據包的報頭,獲取該數據包的源IP信息,并從它的NAT映射表中找出與該IP匹配的轉換條目,用所選用的內部全局地址(全球唯一的IP地址)來替換內部局部地址,并轉發數據包。當外部網絡對內部主機進行應答時,數據包被送到NAT路由器上,路由器接收到目的地址為內部全局地址的數據包后,它將用內部全局地址通過NAT映射表查找出內部局部地址,然后將數據包的目的地址替換成內部局部地址,并將數據包轉發到內部主機。

2. 代理服務器

所謂“代理”,就是代而勞之的意思。代理服務器就是代理網絡用戶去取得網絡信息,形象的說:它是網絡信息的中轉站,使得一個網絡終端和另一個網絡終端不直接進行相連,代理網絡用戶去取得信息。主要工作在OSI的會話層中。

一個完整的代理請求過程為:客戶端首先與代理服務器創建連接,接著根據代理服務器所使用的代理協議,請求對目標服務器創建連接或者獲得目標服務器的指定資源(如文件)。在后一種情況中,代理服務器可能對目標服務器的資源下載至緩存,如果客戶端索要獲取的資源在代理服務器的緩存之中,則代理服務器并不會向目標服務器發送請求,而是直接返回了緩存的資源。一些代理協議允許代理服務器改變客戶端的原始請求、目標服務器的原始響應,以滿足代理協議的需要。代理服務器的選項和設置在計算機程序中,通常只包括一個“防火墻”,允許用戶輸入代理地址,他會這該他們的網絡活動,可以允許繞過互聯網過濾實現網絡訪問。

代理服務器(Proxy Server)是Internet鏈路級網關所提供的一種重要的安全功能,主要的功能有:

1.突破自身IP訪問限制,訪問國外站點。教育網,過去的169網等。2.提高訪問速度:通常代理服務器都設置了一個較大的硬盤緩沖區,當有外界的信息通過的時候,同時也將其保存在緩沖區中,當其他用戶在訪問相同的信息時,則直接有緩沖區取出信息,傳給用戶,以提高訪問速度3.鏈接內網與Internet,充當防火墻:因為所有的內部網用戶通過代理服務器訪問外界時,只映射一個IP地址,所以外界不能直接訪問到內部網;同時可以設置IP地址過濾,限制內部網對外部的訪問權限4.節省IP開銷:代理服務器允許使用大量的偽IP地址,節約上網資源,即代理服務器可以減少對IP地址的需求,對于使用局域網方式接入Internet,如果為局域網(LAN)內的每一個用戶都申請一個IP地址,其費用可想而知。但使用代理服務器之后,只需代理服務器上有一個合法的IP地址,LAN內其他用戶可以使用10.*.*.*這樣的私有IP地址,這樣可以節約大量的IP,降低網路的維護成本。5.隱藏真實IP:上網者可以通過這種方式隱藏自己的IP,以免受到攻擊;6.設置用戶驗證和記賬功能,沒有登記的用戶無權通過代理服務器訪問Internet網。并對用戶的訪問時間、訪問地點、信息流量進行統計。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/382674.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/382674.shtml
英文地址,請注明出處:http://en.pswp.cn/news/382674.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

使用 C++的第三方庫 jsoncpp的步驟以及出現的問題

Jsoncpp 是一個json解析庫 下載地址為: http://sourceforge.net/projects/jsoncpp/ 方法一:使用Jsoncpp生成的lib文件 解壓上面下載的Jsoncpp文件,在jsoncpp-src-0.5.0/makefiles/vs71目錄里找到jsoncpp.sln,用VS2008版本編譯&am…

常用的友元重載運算符OSTREAM

對<<運算符重載&#xff0c;讓他能和cout一起顯示對象內容。 顯示值可以使用show()&#xff0c;但是使用cout<<更方便。 ostream類對該運算符進行了重載&#xff0c;將其轉換成輸出工具。 cout就是一個ostream的對象&#xff0c;他可以自動識別所有的c基本類型。…

python字符串系列

1.find方法用于在長串中查找子串&#xff0c;返回子串中最左位置的下標&#xff0c;如果沒找到&#xff0c;則返回-1 2.join方法用于在隊列中添加元素 3.lower返回字符串的小寫字母版 4.replace返回字符串中所有匹配項均被替換之后得到字符串 5.split將字符串分割成序列 6.stri…

C++ wstring 與 string 之間的相互轉換.

方式一&#xff1a;調用Windows API #include <Windows.h> //將string轉換成wstring wstring string2wstring(string str) { wstring result; //獲取緩沖區大小&#xff0c;并申請空間&#xff0c;緩沖區大小按字符計算 int len MultiByteToWideChar(CP_ACP, 0,…

linux網絡編程Internet Socket地址,套接字,和函數

文章內容節選《linux/UNIX 系統網絡編程》 Internet domain socket地址有兩種&#xff1a;IPv4 IPv6 IPv4被存儲在結構體中&#xff0c; 該結構體在 netinet/in.h 中進行定義 cd usr/include/netinet/in.h struct in_addr {in_addr_t s_addr; //32位IPv4地址 }struct so…

淺談socket網絡編程函數參數(一)

socket函數解析 概念: 每個進程的進程空間里都有一個socket描述符表。套接字描述符表屬于一個進程&#xff0c;而socket地址結構位于操作系統的內核緩沖。 函數原型 #include <sys/socket.h>int socket(int domain, int type, int protocol);函數參數 family參數 默…

C++ const 與 extern

C語言中&#xff0c; const修飾的全局變量是外部鏈接屬性&#xff0c;比如在 a.c文件中有 const int m_a 10; 在b.c中想用這個全局變量&#xff0c; 在b.c中這樣 extern const int m_a; 就可以使用a.c中的m_a C 語言中&#xff0c; const修飾的全局變量是內部鏈接屬性&#x…

淺談socket網絡編程函數參數(二)

bind()函數 bind()函數把一個地址族中的特定地址賦給socket。 例如對應AF_INET、AF_INET6就是把一個ipv4或ipv6地址和端口號組合賦給socket。 int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);參數解析 sockfd&#xff1a;即socket描述字&#xff0c…

對引用的理解3

對數組的引用&#xff0c; 相關語法 int main() { //引用于法// type &引用名 原名//數組的引用//1) 先定義一個數組int array[10];int (&refArray)[10] array;for (int i 0; i < 10; i) {array[i] i;}for (int i 0; i < 10; i) {cout << refArray[i…

運算符與,|與||的區別

|和&是位運算&#xff0c;運算結果是二進制數。 &&,||是邏輯運算&#xff0c;運算結果是真&#xff0c;或者假。 6&3110&0110102 6|3110|0111117&, &&和||計算時注意&#xff0c; 題目&#xff1a;條件1&&條件2&&條件3 如…

C++ 對引用的理解4

引用的注意事項 // 引用注意事項&#xff0c; 不能返回局部變量的引用 int & test3() { //因為局部變量出了函數體外 就會被銷毀int a 10;return a; }// 引用注意事項&#xff0c; 返回值如果是引用&#xff0c; 那么函數可以作為左值進行運算 int & test4() {static…

關于argc和argv的輸出

代碼 #include <stdio.h>int main(int argc ,char * argv[]) {printf("argc ->%d\n",argc);for(int i 0; i < argc;i){printf("%s\n",argv[i]);}return 0; } 輸出結果 [koulocalhost 8_6網絡計算器]$ ./a.out 192.168.1.1 9000 argc ->…

C++ 對引用的理解5

常量引用 int main() { // int &m 10; // 錯誤&#xff0c; 引用必須引一塊合法的內存空間&#xff08;什么是合法的內存空間&#xff0c; 這個10在程序中有內存嗎&#xff1f;&#xff09;const int &m 10; //加入const后&#xff0c;語法就通過了&#xff0c;編譯…

為什么計算機起始時間是1970年1月1日

1969年8月&#xff0c;貝爾實驗室的程序員肯湯普遜利用妻兒離開一個月的機會&#xff0c;開始著手創造一個全新的革命性的操作系統&#xff0c;他使用B編譯語言在老舊的PDP-7機器上開發出了Unix的一個版本。隨后&#xff0c;湯普遜和同事丹尼斯里奇改進了B語言&#xff0c;開發…

C++ 使用extern C簡單使用

先說一下函數重載&#xff0c; C 之所以會進行函數重載&#xff0c; 是因為對函數名進行二次修飾(重新命名) 在C文件中寫好的程序&#xff0c; C引入過來&#xff0c;卻沒法使用提示 無法連接的外部符號&#xff0c;那是因為C按照C的函數命名機制來尋找函數的實現. 第一種情況&…

IP數據包格式netinet/ip.h

轉載地址https://www.cnblogs.com/embedded-linux/p/4986449.html 頭文件netinet/ip.h中定義ip&#xff1a; struct ip{#if __BYTE_ORDER __LITTLE_ENDIANunsigned int ip_hl:4; /* header length */unsigned int ip_v:4; /* version */#endif#if __BYTE_ORDER __BIG_ENDIA…

c 結構體的簡單封裝1

先看C語言的 借助結構體 struct Person{char name[64];int age; }; void PersonEat(struct Person *p) {printf("%s在吃飯", p->name); } void test() {struct Person p;strcpy(p.name, "隔壁老王");PersonEat(&p); }

C++ 構造函數分類以及調用

#define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace std;//1、分類 //按照參數進行分類 有參構造函數 無參構造函數&#xff08;默認構造函數&#xff09; //按照類型進行分類 普通構造函數 拷貝構造函數 class Person { public://默認構造Per…

內存泄漏Valgrind

#內存泄漏Valgrind valgrind --toolmemcheck --leak-checkfull [Your progame option]; https://cloud.tencent.com/developer/article/1006199 https://www.cnblogs.com/zhoudayang/p/6110360.html https://www.cnblogs.com/napoleon_liu/articles/2001802.html https://…