在阅读本篇文章之前,你已经阅读了:

 在前面几节课,都是以让你先“拥有”,明确了你的目标,但没有教太多的知识点。现在开始教你如何一步步地达到目标,我们第一个目标是实现demo1,最终的目标是实现demo2,开始前进。

本篇学习内容

 本篇先要理清一下网络相关的问题,如:

  • 什么是IP地址?
  • 网址与IP地址之间的关系是什么?
  • IP地址后面的端口号有什么用?
  • 什么是内网IP地址?公网IP地址?
  • 127.0.0.10.0.0.0这两个特殊的IP地址是什么意思?

本篇视频

IP地址与端口号

 先介绍IP地址,IP协议的设计目的可以理解为,为了隐藏不同物理网络的细节以便各互联网络中的所有主机呈现一个统一的网络架构,可使用单个地址格式来标识互联网上的所有主机。我们都知道电子设备所存储的本质是0和1(分别代表着没电、有电,两种状态),现在的IP地址(IPv4,下一代是IPv6)是由4个字节(即32位)组成。每一台电脑都拥有不同的IP地址。IP地址长这样的(图片来自于《计算机网络-谢希仁》):
点分十进制

 更进一步的,一串数字很难让人记住,所以再创造一个网址,来指向所设定的IP地址:
网址与IP地址的对应关系

 两台电脑通信传输数据,当然是可以理解为数据在这两个IP地址之间传输:

1
2
3
// 两台电脑在网络上通信,只需要IP地址:
// 电脑A(1.2.3.4) 与 电脑B(6,7,8,9) 通信
1.2.3.4 <---> 6,7,8,9

 然而,真要准确地来说,并不能说电脑自己想通信,而应该是电脑上的程序想通信。一台电脑上是拥有很多个程序的,所以真要说细点,应该是 两个程序在通信,最终使用IP地址来区分电脑,使用端口号来区分程序:

1
2
3
// 使用端口号来进一步区分是电脑上哪个程序:
// 电脑A上的程序a(1.2.3.4:80) 与 电脑B上的程序b(6.7.8.9:2400)通信
1.2.3.4:80 <--> 6.7.8.9:2400

 最终结论:网络通信时是需要IP地址与端口号,它们一般使用:来分隔开(IP地址:端口号)。
需要IP地址与端口号

聊聊端口号

 网络通信中的程序可分为 服务器端客户端,服务器端先启动,客户端会主动找到服务器进行通信。举个例子,医院一般是24小时营业,当人生病时就会主动去医院看病。这里可以把医院看成服务器端,等待病人主动找上门后提供它所需的医疗服务。把病人看成是客户端,它会主动地去医院。
 端口号是16位的(从0到65535),通过端口号来区分程序。那么程序是怎么选择使用哪个端口号呢?
 对应服务器端程序来说,公认端口(Well-Known Ports),范围从0到1023,这些端口号一般固定分配给一些服务。比如21端口分配给FTP(文件传输协议)服务,25端口分配给SMTP(简单邮件传输协议)服务,80端口分配给HTTP服务(在浏览器网址栏不输入端口号时,就是默认为80),135端口分配给RPC(远程过程调用)服务等等。
 而对应客户端应用程序来说,使用由系统分配的随机端口。动态端口,范围从1024到65535,只要运行的程序向系统提出访问网络的申请,那么系统就可以从这些端口号中分配一个供该程序使用。在关闭程序进程后,就会释放所占用的端口号。端口号-百度百科

聊隐内网IP与公网IP

 IP地址,还区分内网IP与公网IP(也被称为外网IP)。公网IP可以理解为不管你在哪里,只要能正常上网,使用这个公网IP就能找到那个设备,全球唯一。而内网IP,你必须是连接到那个局域网上,才能通过这个内网IP地址找到那个设备,局域网内唯一,换一个内网,同样是这个内网IP,指的设备就是当前局域网内的设备,这就是为什么,我们在之前演示的时候,NodeMCU与本地电脑相连时 必须要连接同一个WIFI的原因,因为你的电脑并没有公网IP,只有内网IP。而云服务器是有公网IP的。 例如192.168.x.x,这个地址就是很常见的内网IP地址。

聊聊特殊的IP地址

 IP地址有两个特殊含意的IP地址:

  • 127.0.0.1代表的是本机,是回环IP地址(loopback address),常用于本机测试用。比如说我的手提电脑在公司的WIFI里内网IP地址是192.168.1.1,而在家里的WIFI的内网IP地址是192.168.1.24,如果我写代码的时候不使用127.0.0.1来代表自己的手提电脑,所以我在公司的网络里就要把代码里的IP地址改成前面的,回到家后又要把IP地址改成后面的,这就比较麻烦。
  • 0.0.0.0代表缺省值,对于我们来说,在服务器端程序时建立时代表本机所有的IP地址(因为有些时候一个设备可以拥有多个IP地址,比如说有多个网卡)。如果建立时指定了其中一个IP地址,代表着只有那个IP地址能通信,其它的都不可以通信。服务器端程序建立时一般不会写127.0.0.1,一般使用0.0.0.0

有空啃书

必须要啃书

 网上的教程只有短短十几分钟的阅读量,是做不到全面的系统性学习,只能从中简单了解。要想系统性地学习,踏踏实实地获取知识,就要啃书:《计算机网络第五版-谢希仁》-百度网盘,《计算机网络:自顶向下方法》(强力推荐这本,自顶向下才有学习热情)。建议去图书馆借阅纸质书或联系计算机专业通信专业的同学去借书,大约花两天的时间,快速翻阅完前6章,不必太扣细节,等你觉得需要研究时再深入研究,对所有概念有个简单的认识。

计算机网络基础 入门书籍

其它

附录