编程语言
首页 > 编程语言> > 第四篇 网络编程(一)

第四篇 网络编程(一)

作者:互联网

概要:

1.必备基础

你必须了解的网络相关设备和基础概念。

1.1 网络架构

假设 al 上了一个野鸡大学买了一台电脑,电脑里存了1部小电影,整宿整宿的在宿舍反复的看。

al 如何想要和室友 进行收发数据,可以通过一根网线来进行连接,并进行数据的传输。

1.1.1 交换机

其他2位室友如何也想和他们的电脑相互连接然后进行资源的共享,此时就需要一个设备 【二层交换机】组件一个局域网。

当电脑接入交换机之后,我们需要为每台电脑分配一个IP,例如:
    - 电脑1:192.168.10.1
    - 电脑2:192.168.10.2
    - 电脑3:192.168.10.3
    - 电脑4:192.168.10.4
局域网内容个电脑之间是基于ARP协议来进行通信,例如:A电脑向 IP为192.168.10.3的另一个电脑发送消息。

第一步:A封装数据包,此时只知道目标IP不知道目标mac地址(未知mac地址时默认会设置为FF)。
第二步:将数据包发送到交换机,交换机通过广播的形式将数据发送给所有电脑。
第三步:目标电脑接收到数据包后,监测自己是否是目标IP。
		- 是,收到数据并回复。
		- 不是,则丢弃包。

为防止每次发送消息都是广播形式,每台电脑的内部都为维护了一个ARP表,接受到数据时(无论是否自己的)都会记录自己了解的IP和MAC的对应关系,例如:
    Internet地址			       物理地址
    192.168.10.1            14-9d-da-2a-dd-0a
    192.168.10.3            14-9d-da-2a-dd-0c
    ...
    
以便于下次在发送消息时,就知道了目标的mac地址,直接让交换机转发给指定的电脑(单播)。

同时,当有消息发送经过二层交换机时他的内容也会维护记录了交换机接口和连接的电脑的mac地址的对应关系,例如:
    接口(网卡)               mac地址
      接口1              14-9d-da-2a-dd-0A
      接口2              14-9d-da-2a-dd-0B
      接口3              14-9d-da-2a-dd-0C
      ...
这样一来,交换机在进行数据转发时,效率就更高了。

注意:每台电脑出厂时在网卡中都设置了唯一的mac地址(不重复),网卡集成在主板上,如果更换了主板则mac地址也会变更。

头部信息:xxx
数据:你好
头部信息:xxx
数据:收到

1.1.2 路由器

多个宿舍之间想想要组建一个相互可以通信网络,此时需要【二层交换机】和【企业路由器】配合组建稍微大一点的局域网(同时也可缓解广播风暴)。

划分好网络结构之后,其实会给各宿舍的电脑分配IP和网关,例如:
   宿舍A:
		- 电脑1:192.168.10.1  网关:192.168.10.254
		- 电脑2:192.168.10.2  网关:192.168.10.254
		- 电脑3:192.168.10.3  网关:192.168.10.254
		- 电脑4:192.168.10.4  网关:192.168.10.254
   宿舍B
		- 电脑1:192.168.20.1  网关:192.168.20.254
		- 电脑2:192.168.20.2  网关:192.168.20.254
		- 电脑3:192.168.20.3  网关:192.168.20.254
		- 电脑4:192.168.20.4  网关:192.168.20.254

然后再在路由器中配置路由表(包含网段和路由器上的接口的对应关系),例如:
	 接口             IP
     eth0   	  192.168.10.254(192.168.10网段)
     eth1   	  192.168.20.254(192.168.20网段)
    
想与外部网络通信,需要配置网关,网关就是路由表中配置的指向此网段的IP。其实就类似于贸易出口都需要经过海关。
数据通信的过程结合了APR协议和IP协议,例如:宿舍A的电脑1向宿舍B的电脑3发送消息(目标IP:192.168.20.3)。

简化过程:
	- 宿舍A的电脑1,通过广播或单播将数据发送到网管(路由器)
    - 路由器接收到数据之后,再通过对应的接口把数据通过广播的形式发送到宿舍B。
注意:各自局域网内通过学习并记录相关mac地址后,就可以不再使用广播形式,而是使用单播来发送消息了。


1.1.3 三层交换机

三层交换机集成了 交换机 & 路由器的功能(大部分路由器功能),上述的三个设备其实可以用一个三层交换机就可以搞定。

按照下图,在三层交换机上分别做如下几件事:

1. 划分两个vlan,模拟出来路由器的两个接口。
2. 将交换机的接口划分给指定的vlan,例如:
	接口1、2、3划分给一个vlan,相当于交换机连接上了路由器。
    接口4、5、6划分给一个vlan,相当于交换机连接上了路由器。
3. 电脑连接上交换机。
4. 进行相应的配置。
	宿舍A(左边)电脑配置:
    	- 电脑1:192.168.10.1  网关:192.168.10.254	对应交换机接口:1
		- 电脑2:192.168.10.2  网关:192.168.10.254	对应交换机接口:2
		- 电脑3:192.168.10.3  网关:192.168.10.254	对应交换机接口:3
	宿舍B(右边)电脑配置:
		- 电脑1:192.168.20.1  网关:192.168.20.254	对应交换机接口:4
		- 电脑2:192.168.20.2  网关:192.168.20.254	对应交换机接口:5
		- 电脑3:192.168.20.3  网关:192.168.20.254	对应交换机接口:6
	
    交换机中的路由配置:
    	  接口               IP
         左vlan   	  192.168.10.254(192.168.10网段)
         右vlan   	  192.168.20.254(192.168.20网段)
        
通过上述的配置之后,就可以实现宿舍A和宿舍B的网络通信了。

1.1.4 小型企业基础网络架构

1.1.5 家庭网络架构

家用路由器集成了是交换机和路由的功能(性能差、价格便宜)。

1.1.6 互联网

1.2 网络核心词汇

1.2.1 子网掩码和IP

之前说过,接入网络设备后,需要一个IP来代指次电脑,例如:192.168.10.1 。

IP其是一个32位的二进制,为了便于记忆就将它分为4组,每组8位,由小数点分开,例如:

二进制表示:00000000.10010111.11111111.00001111
十进制表示:251.151.255.15

0~255
192.178.11.211
192.178.11.311

在网络中的每台电脑都会有一个IP与之绑定,这样通过IP就可以找到相应的电脑。

一个IP地址可以划分为两个部分,即:网络地址 + 主机地址。

1.2.2 DHCP

在一个局域网内想要给某台电脑分配IP有两种方式:

1.2.3 内网和公网IP

一般情况下,内网IP都用这些(潜规则):
	- 10.0.0.0 到 10.255.255.255
	- 172.16.0.0 到172.31.255.255
	- 192.168.0.0 到192.168.255.255

之前我们自己在一个局域网内为电脑分配的IP都称为内网IP,基于内网IP可以在一个局域网内进行相互通信(也需要相关的配置)。

如果想要通过互联网进行通信,就必须借助公网IP。例如,右边家庭电脑想访问左边某公司服务器上的部署的网站:

按理说,每个从运营商接入网的用户都可以有一个外网IP,但由于全球用户太多而IP根本就不够分配,所以,运营商网络会进行划分,让多个家庭宽带用户共用一个公网IP(动态,可能每次上网公网IP都不一样)。

让家庭用户想要通过网络访问访问其他IP时,先发给运营商由运营商向外转发到其他IP。

注意:外部用户想要访问家庭宽带的IP时,运营商不会把请求转发到我们的电脑。

所以,以后如果你想开发一个网站供全球的用户访问,那你就需要做以下几件事:

这样就可以搞定了...

扩展:IPv4和IPv6

IPv4,长度为 32 位(4 个字节), 格式:A.B.C.D
IPv6,长度为 128 位(16 个字节),用":"分成8段,格式:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX(每个X是一个16进制数)。

1.2.4 云服务器

大家可能之前听说过:阿里云、腾讯云、亚马逊aws等之类的平台都在搞云服务器,那是个啥?

简单的说:他们造了一个机房(网吧),买了很多很多的服务器(高性能电脑),然后将他们放在机房,然后通电+通网,主要对外去租赁这些服务器资源,让用户不必再自己 拉专线+配置网络+买服务器。

假设,你想要在腾讯云租一台服务器,就可以根据自己的需求去选择配置,腾讯云会根据配置在他的物理机上虚拟出一个服务器,并进行相应的环境初始化并绑定公网固定IP,这样你就可以快速拥有一台可以被大家访问的服务器了。

注意:一台性能非常高的物理机虚拟出很多虚拟机,类似于你在自己电脑上通过vmware、parallel等搞出多个虚拟机。

1.2.5 端口

假设,你在腾讯租了一台云服务器(外网IP:123.206.15.88),然后又开发了 2 个网站运行在服务器上。

那么问题来了,用户在自己的电脑或手机上如何来分别访问同一台服务器上两个程序呢?

其实,在计算机中有一个 端口 的概念,每个程序想要通过网络进行通讯都必须要指定一个端口,例如:

注意:端口的取值范围:0 ~ 65535,很多端口在计算机的内部已被使用,我们平时自定义时尽量选择5000之后的端口。

示例:访问百度

提示:如果在浏览器上只写IP不写端口,则默认是80端口。

1.2.6 域名

假设你创业开发了一个网站,用户很难记住你的公网IP:123.206.15.88:80 ``123.206.15.88`。

所以,域名就诞生了,让域名和IP创建对应关系,用户只需要记住域名就可以了,例如:

www.baidu.com   -->  110.242.68.3
www.taobao.com  --> 121.18.239.232
...

注意:域名只是和IP创建了对应关系,与端口无关 www.baidu.com:80

在用户在自己的电脑或手机上输入域名去访问时,其实要执行两个步骤:

在电脑上属如域名后,寻找IP的过程如下:

问题来了

了解域名是怎么回事之后?现在你如果想要让自己的网站通过域名来访问,应该怎么办呢?【目前了解即可】

2. 网络编程

Python中内置了一个socket模块,可以快速实现网络之间进行传输数据。例如:

上述示例需要借助于互联网,你至少需要租一台云服务器才能通信。

为了节省学习成本,大家可以在自己电脑上模拟【服务端】和【客户端】,等以后项目开发完毕后,再租服务器并部署到服务器上。

注意:在自己本地运行上述代码时,要监听和连接时的IP地址。



当然,你也可以把在自己的局域网内找两台电脑,A作为服务端,B作为客户端,这样两者也可以通信。

服务端的代码需修改:监听的IP修改为A的IP地址。
客户端的代码需修改:连接的IP修改为A的IP地址(客户端要去找到服务端,并与服务端创建连接)。

注意事项:

案例:智障客服

案例:文件上传

3. B/S和C/S架构

平时在开发或与人沟通时,经常会有人提到b/s和c/s架构,他们是啥意思呢?

简而言之,B/S架构就是开发网站;C/S架构就是开发安装在电脑的软件。

总结

  1. 了解常见设备和网络架构。
  2. 掌握常见网络词汇的意思。
  3. 了解B/S和C/S架构的区别。
  4. 基于Python的socket模块实现网络编程。

问题

  1. 简述 二层交换机 & 路由器 & 三层交换机 的作用。

  2. 简述常见词:IP、子网掩码、DHCP、公网IP、端口、域名的作用。

  3. 实现远程用户认证系统。

    客户端:
    	1. 运行程序,连接服务端并获取服务端发送的欢迎使用xx系统信息。
        2. 输入用户名和密码,并将用户名和密码发送到服务端去校验。
        3. 登录失败,重试(Q退出)。
        4. 登录成功,进入系统,提示登录成功
    服务端:
    	1. 客户端连接上服务端,返回 欢迎使用xx系统信息。
        2. 等待客户端发送用户名和密码进行校验(用户名和密码在文件中)
        3. 登录失败,返回错误信息。
        4. 登录成功,返回成功提示的内容。
    

标签:socket,IP,编程,电脑,网络,192.168,服务器,第四篇,服务端
来源: https://www.cnblogs.com/huahuawang/p/14725390.html