網路程式設計外網通訊

2021-10-10 18:17:50 字數 2287 閱讀 5783

對於初學者而已,我們學習的網路程式設計(如tcp,udp程式設計),我們通常都是在區域網內進行通訊測試,有時候我們或者會想,我們現在寫的內網網路資料和外網的網路資料有什麼不同,我們內網的資料是如何走出外網的呢?

首先,我們需要了解一下什麼是公有 ip 和私有 ip

公有位址(public address):由 inter nic(internet network information center 網際網路資訊中心)負責。這些 ip 位址分配給註冊並向inter nic提出申請的組織機構,公有 ip 全球唯一,通過它直接訪問網際網路(直接能上網)。

而我們平時通過運營商(電信、移動、聯通寬頻等)上網,家裡面通過路由器分出來的 ip 都是私有 ip(區域網 ip),大家可能會疑問,我們可以上網啊,怎麼會是私有 ip 呢?

而我們平時通過運營商(電信、移動、聯通寬頻等)上網,家裡面通過路由器分出來的 ip 都是私有 ip(區域網 ip),大家可能會疑問,我們可以上網啊,怎麼會是私有 ip 呢?

租用(申請)公有 ip是需要錢的。 運營商買了一些公有 ip,然後通過這些公有 ip 分出來,再分給乙個乙個的使用者使用。這個過程有點類似於,我們去安裝了寬度,通過路由器分出幾個 ip,讓好幾個人都能上網,當然運營商通過公有 ip 分出來的過程肯定比這個複雜多了。所以,我們平時上網用的 ip 是私有 ip,真正擁有公有 ip 的是運營商(當然,我們可以租用乙個公有 ip)。

接下來,給大家介紹一下什麼是埠對映

埠對映是 nat 的一種,它將外網主機的 ip 位址的乙個埠對映到內網中一台機器,提供相應的服務。當使用者訪問該 ip 的這個埠時,伺服器自動將請求對映到對應區域網內部的機器上。

現在市場上的家庭路由器都具備 nat 功能。

首先,我們需要在運營商那邊申請(租用)乙個公有 ip (學生機有優惠),假如這個公有 ip 為:122.112.174.128,伺服器上後台執行了乙個簡易聊天室,監聽的埠是 6666 。

那麼可以訪問外網(ping通)的電腦主機就可以去連線這個伺服器,然後進行資料互動。

伺服器是後台執行的,通過ps -a | grep s檢視伺服器,通過kill -9 程序id殺死服務

[root@ecs-x-medium-

2-linux-

20200312093025

~]# ps -a | grep s

23388?00

:00:00 s

後台執行的實現也很簡單,了解守護程序即可,總結就是呼叫下面函式

#include

intdaemonize()

else

if( pid >0)

umask(0

);pid_t sid =

setsid()

;if( sid <0)

if((chdir

("/"))

<0)

close

( stdin_fileno )

;close

( stdout_fileno )

;close

( stderr_fileno )

;open

("/dev/null"

, o_rdonly )

;open

("/dev/null"

, o_rdwr )

;open

("/dev/null"

, o_rdwr )

;return1;

}

小本本記上,也可以收藏文章。

伺服器上執行了server服務端之後,在可以訪問外網的主機上執行客戶端

本地沒有開啟服務端,客戶端繫結的ip位址是公網ip位址,埠是6666.

最後稍微改了下一口君的程式就發出來了,後面有時間我再自己寫乙個epoll的聊天室,**傳送關鍵字聊天室獲取,客戶端編譯執行可以一起聊天(要裝虛擬機器)。服務端**也可以一併獲取

獲取與外網通訊的真實ip位址

define str defaulthost www.sohu.com char getipbyindex int nindex if dwretval getadaptersinfo padapterinfo,uloutbuflen no error padapter padapter next ...

解決外網向內網通訊方案 NAT穿透技術詳解

在網路編碼中會發現程式在區域網中是可以適用的,但是在外網與內網之間和內網與內網之間就不可行。問題就在於nat。首先介紹下nat。nat的作用nat network address translator 網路位址轉換。顧名思義,它是一種把內部私有網路ip位址翻譯成公有網路ip位址的技術,如圖5 1所示...

子網通訊過程

交換機收到arp廣播後,首先會學習到主機a是連線到1埠的,然後快取起來,同時在快取中查詢c的mac位址,沒找到便將這個廣播包從所有埠發出去 1埠除外 c收到廣播後便會進行回應,來告知自己的身份 之後交換機便記憶了主機a和主機c的ip位址和mac位址,ac找到彼此後,便可以在同一子網內依靠mac位址進...