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的移动端发送推送消息的,服务器是如何与各个移动端建立会话的?


正文

待续

你可能感兴趣的:(工作总结,记录,计算机网络基础)