20191222 對即時通訊、消息推送、socket編程中的計算機網絡知識的理解

一、前言

計算機網絡相關的知識重要嗎?

就像socket通信,如果不知道tcp、ip協議、公有地址,私有地址,默認網關等相關知識,我們只要知道使用socket,知道自己的ip地址和監聽端口,懂得 Ctrl C 和 Ctrl V,一切順利的話也能實現一個簡單的socket服務器。可是也有可能遇到各種各樣的問題,尤其是生產環境中,而不是簡單的在單機上啓動一個socket服務器和客戶端進行通訊那麼簡單。

在學習即時通訊相關知識的時候,遇到了好多問題,又結合工作中和工作前遇到的相關問題,把這些問題串起來做了個彙總。整理之後發現,這些都不是編程上的問題,也不是業務上的問題,而是計算機網絡相關的問題。而這些問題,或多或少,我也大家也會有一樣的疑惑。

因此計算機網絡挺重要的。

本文嘗試以下列問題爲主線寫出相關的摘要和理解。

二、問題彙總

問題羅列如下:


1、本地啓動了一個helloworld的web程序,只能本地訪問,用手機卻訪問不了。這是爲什麼?
2、部署在阿里雲服務器上的web程序,可以通過手機發起訪問。這是爲什麼?
3、怎樣才能讓本地web程序被手機端訪問?(除了讓兩端同屬一個局域網)答:通過內網穿透。
4、什麼是內網穿透?內網穿透怎麼實現?


5、手機/PC沒有單獨的公網ip,爲什麼還可以訪問各個網站,以及使用微信QQ等聊天工具?
6、默認網關到底是什麼?
7、什麼是NAT?爲什麼會有NAT?NAT有什麼用?NAT的壞處是什麼?


8、而在即時通訊的實現中,張三要發送消息給李四,一種實現是,張三把消息發送到應用服務器,應用服務器再把消息轉發給李四。爲什麼服務器可以把消息發送給沒有唯一公有ip的手機端?
9、即時通訊中,兩人實現通信的另一種方式是,終端a和終端b都跟服務器建立了長連接,張三要跟李四聊天,則服務器會返回終端b的socket的ip和端口給終端a,於是終端a向終端b發起建立長連接的請求。於是終端a和終端b通過這個socket通道進行通信,而不再將信息轉發到服務器。爲什麼終端b沒有唯一的公網ip,可是終端a也能與之建立socket連接?
10、而在我們學習socket時,爲什麼只能在本機服務器同時開啓客戶端和服務器才能建立socket連接,而把客戶端和服務器端放在不同的電腦上卻不能建立通信?


11、或多或少我們工作中都有接觸過消息推送,如第三方的友盟推送,信鴿推送等等,那麼他們是如何做到讓服務器給各個不具備唯一公網ip的移動端發送推送消息的,服務器是如何與各個移動端建立會話的?


正文

待續

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章