这里写目录标题
- 一、必备基础
- (一)网络架构
- 1、交换机
- 2、路由器
- 3、三层交换机
- 4、小型企业基础网络架构
- 5、家庭网络架构
- 6、互联网
- (二)网络核心词汇
- 1、子网掩码和IP
- 2、DHCP
- 3、内网和公网IP
- 4、云服务器
- 5、端口
- 6、域名
- 二、网络编程
- 案例一:智障客服
- 案例二:上传文件
- 三、B/S和C/S架构
- (一)C/S架构
- (二)B/S架构
一、必备基础
(一)网络架构
两台电脑之间如果想要传输数据,最原始的方法是在两个电脑之间连接一个网线,网线上有网口,网口本质上就是网卡,网卡是专门用来做网络通信的。
1、交换机
两台电脑之间可以通过网线进行数据交换,但如果有四台电脑,四个电脑之间想要进行数据交互的时候,就必须让一台电脑拥有三个接口,这显然是低效率的,于是就发明了交换机。
当四台电脑连接到交换机上,互相之间就可以进行数据传输,此时就形成了小小的局域网,交换机会给四个电脑分配IP地址,IP也可以自己指定,这个IP地址就代表了电脑,每个电脑的网口中有一个网卡,而每个网卡上都有一个mac地址,mac地址是在电脑出厂的时候配置到网卡上的,而网卡一般是连在电脑的主卡上的,如果电脑换了主板,意味着电脑的主板会发生变化。
交换机在局域网内,通过广播的形式实现了电脑的通信:当2号电脑给3号电脑发消息时,电脑会打包一个数据信息,包括头部信息和发送数据,其中,头部信息包括了本机IP和mac地址以及目标机台的IP和mac地址,信息包传递到交换机上,交换机会以广播的形式传送给每天机器,所有的电脑就会进行校验,查看该信息包是否是传送给自己的,当目标机器3号收到信息时,也会给2号信息传递一个已经收到的信息,同样是通过交换机以广播的形式进行传递。但是这样的传递效率还是比较低的,但是随着传送次数多了之后,交换机和局域网内所有电脑就会有记录:IP地址和MAC地址的对应关系,之后交换机就会通过IP地址直接将信息传递给对应的mac地址,这样就免去了广播形式,只需要单播就可以发送信息。
2、路由器
当局域网和局域网之间需要进行数据传递时,如果将交换机之间进行直连,则会产生广播风暴,此时就需要借助另外一个有效的机器——路由器。
有了路由器之后,则会给不同的局域网配置不一样的ip地址,进行一个区域划分,接着要配置网关地址。
所以不同的局域网之间传递信息,将通过网关检查网段是否正确,然后通过交换机传递到目标电脑上。全球的信息传递就是通过交换机和路由器实现的。
3、三层交换机
集成了交换机和路由器的功能,既能够实现在局域网内收发消息,也能够构建不同局域网并在不同局域网内实现通讯。三层交换器内,首先由路由器划分vlan(网段),这一步相当于是交换机脸上了路由器。不同的局域网有不同的网段,不同局域网之间进行数据交互,则需要通过网关检查所属网段,然后发送到目标网段中,再有交换机通过广播/单播的形式发送给目标电脑。
4、小型企业基础网络架构
5、家庭网络架构
运营商连接光猫连接家用路由器(简单得实现了交换机和路由器的功能)连接电脑,家用路由器性能差,只能连接较少的设备。
6、互联网
与国外的网络进行链接,也需要专门的设备,该设备由三大运营商出资购买。
(二)网络核心词汇
1、子网掩码和IP
每一个IP地址代指一台电脑,IP其实是一个32位的二进制,为了便于记忆将它分为4组,每组8位,由小数点分开,每组的数值在0-255之间。
子网掩码的主要作用是屏蔽IP地址的一部分以区别网络标识和主机标识。一个ip地址可以分为两个部分:网络地址+主机地址。192.168.1.199/24表示前24位是网络地址(被掩盖),后面8位是主机地址。
划分成网络地址+主机地址的意义是什么?
网络地址相同的可以视作是同一个网络,网络地址相同的IP属于同一个网段,在局域网内只有同一个网段的IP才能相互通信,不同网段的IP通信需要借助路由器转发才能通信。在局域网内如果不是同一个网段也不能相互通讯。
2、DHCP
在一个局域网内,给某台电脑分配IP的方法有两种:(1)手动设置;2、自动获取。其中自动获取方式在电脑为“自动获取IP地址”,在路由器或三层交换机,开启DHCP服务,并设置IP地址。
3、内网和公网IP
自己在一个局域网内为电脑分配的IP都称为内网IP,基于内网IP可以在一个局域网内进行互相通信是可以的,但是不能跨运营商进行数据传输。如果想要通过互联网进行通信,就必须借助公司IP,例如家庭电脑想访问某公司服务器上部署的网站:
(1)公司去运营商申请公司的固定IP(办理专线宽带时,运营商会分配至少1个固定IP地址),其实运营商就是将专线和固定IP建立一个绑定关系。
(2)配置公网IP与制定服务器的转发规则。
(3)家庭电脑如果想访问某个公司拂去其上的网站,只需要执行制定IP,运营商就会根据IP找到与之关联的公司专线,并通过公司路由器、防火墙等设备找到服务器。
由于全球用户太多,IP不够分,所以运营商会进行划分,让多个家庭宽带用户共用一个公网IP(动态,所以每次上网公网IP都不一样)。
如果想开发一个网站供全球的用户访问,需要达到以下几个条件:
(1)拉专线,申请固定公网IP;
(2)买一台服务器(性能好的电脑);
(3)公网IP绑定至服务器;
(4)将写好的代码放在服务器上并运行起来。
4、云服务器
简单说,云服务器就是构建了一个机房,买了很多服务器,然后通电+通网,主要对外租赁这些服务器资源,让用户不必再自己拉专线+配置网络+买服务器。
假设在腾讯云租一台服务器,就可以根据自己的需求去选择配置,腾讯云会根据配置在他的物理机上虚拟出一个服务器,并进行相应的环境初始化并绑定公网固定IP,这样就可以快速拥有一台可以被大家访问的服务器了。注:一台性能非常高的物理机虚拟出很多虚拟机,类似于在自己电脑上通过vmware、parallel等搞出多台虚拟机。
5、端口
假设公司在腾讯租了一台云服务器(外网IP:123.206.15.88),然后又开发了两个网站运行在服务器上。那么用户在自己的手机或电脑上如何分别来访问同一台服务器上的两个程序呢?
在计算机中有一个端口,每个程序想要通过网络来进行通讯都必须要制定一个接口,例如:网站A 8001端口、网站B 8002端口。注意:端口的取值范围是:0~65535,其中前5000个端口已经有特定的含义,在自定义的时候最好选择5000之后的端口。
6、域名
对于浏览器来说,如果给了IP地址,但是没有给端口,会自动补全端口,由于IP地址很难记,所以域名就产生了,域名类似于www.baidu.com,为了好查询网址,对域名和IP创建对应关系,用户只需要记住域名就可以了。域名与端口无关。
当用户在自己电脑或手机上输入域名去访问时,有两个步骤:(1)根据域名寻找IP;(2)获得IP后,再通过IP去访问指定的服务器。
在电脑上输入域名后,寻找IP的过程如下:
(1)在自己电脑的DNC缓存记录中寻找域名对应的IP,如果未命中,则执行下一步;
(2)在自己电脑的hosts文件中寻找,如果未命中,则执行下一步;
(3)在自己电脑上找到DNC配置的地址(本地域名服务器),去这个地址寻找域名对应的IP,如果未命中,则进行下一步;
(4)去根域名服务器中询问(全球共13台根域名服务器,离中国最近的一台在日本)。
如果想要让自己的网站通过域名来访问,应该怎么办?
(1)租一个域名:ICANN,域名的总管理者(英国的一个非盈利机构),它仅制定域名政策,注册业务会授权一些顶级注册商,可以对外销售域名,但要受国家互联网信息中心的管理。
顶级注册商有:中国万网(阿里云收购)、新网互联、商务中国、中国频道等。
代理注册商:顶级注册商可以再招一些代理帮助他们麦域名。
(2)备案:现在国内注册域名后,需要进行备案(提交一些网站、个人或企业信息后)才能使用,国外的域名无需备案就可以使用。
(3)域名解析:让域名和IP创建关联关系,并将关系同步到相关:本地域名服务器和根域名服务器。
二、网络编程
通常来说需要编写两个程序,一个是对客户的,一个是对服务器的,我们现在自己的电脑上测试,ip地址使用“127.0.0.1”,该地址会自动返回本机IP地址(由于每次云服务器都会随机给每个电脑分配ip地址,所以每次的ip地址都不同)。
服务端:
import socket#1、监听本机的IP和端口
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind(('127.0.0.1', 8001)) #bind绑定IP和端口,127.0.0.1是回环IP地址,返回本机的IP地址,因为每次上网给出的地址都是随机的。sock.listen(5) #支持排队等待5人while True:#2、等待,有人来连接(阻塞)conn, addr = sock.accept() #等待客户端来连接(阻塞)#3、等待,连接着发送信息(阻塞)client_data = conn.recv(1024) #等待接收客户端发来的数据print(client_data.decode('utf-8')) #正常来说返回的是字节信息,如果想看内容的话需要用utf-8来解码#4、给连接者回复信息conn.sendall("hello world".encode('utf-8'))#5、关闭连接conn.close()#6、停止服务端程序
sock.close()
客户端:
import socket#1、向指定IP发送连接请求
client = socket.socket()
client.connect(('127.0.0.1', 8001))#2、连接成功之后,发送消息
client.sendall('hello'.encode('utf-8'))#3、等待,消息的回复(阻塞)
reply = client.recv(1024)
print(reply)#4、关闭连接
client.close()
案例一:智障客服
服务端
import socket#1、监听本机的ip和端口
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind(('127.0.0.1', 8001)) #以元组格式上传IP和端口
sock.listen(5)while True:#2、等待有人连接(阻塞)conn, addr = sock.accept()print("来人了")#3、连接成功后立即发送conn.sendall("欢迎使用xx系统,请输入您想办理的业务".encode('utf-8'))while True:#3、等待接收信息data = conn.recv(1024)if not data:breakdata_string = data.decode('utf-8')#4、回复信息conn.sendall("你说啥?".encode('utf-8'))print("断开连接了")conn.close()sock.close()
客户端
import socket#1、向指定IP发送连接请求
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(('127.0.0.1', 8001))#2、连接成功后,获取系统登录信息
message = client.recv(1024)
print(message.decode('utf-8'))while True:content = input("请输入(Q/q退出)")if content.upper() == 'Q':breakclient.sendall(content.encode('utf-8'))reply = client.recv(1024)print(reply.decode('utf-8'))client.close()
案例二:上传文件
服务端
import socketsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind(('127.0.0.1', 8001))
sock.listen(5)conn, adrr = sock.accept()#收集文件大小
data = conn.recv(1024)
total_file_size = int(data.decode('utf-8'))#接收文件
file_obj = open('xxx.png', mode='wb')
recv_size = 0while True:#每次最多接收1024字节data = conn.recv(1024)file_obj.write(data)file_obj.flush()recv_size += len(data)#上传完成if recv_size == total_file_size:break#接收完毕,关闭连接
sock.close()
客户端
import socket
import time
import osclient = socket.socket()
client.connect(('127.0.0.1', 8001))file_path = input("请输入要上传的文件:")#先发送文件大小
file_size = os.stat(file_path).st_size
client.sendall(str(file_size).encode('utf-8'))print("准备中")
time.sleep(2)
print("开始上传")
file_object = open(file_path, mode='rb')
read_size = 0
while True:chunk = file_object.read(1024)client.sendall(chunk)read_size += len(chunk)if read_size == file_size:breakclient.close()
三、B/S和C/S架构
(一)C/S架构
是client和server的简称。开发这种架构的程序意味着既需要开发客户端也需要开发服务端。例如:QQ、百度网盘、钉钉等安装在电脑上的软件。
服务端:互联网公司会开发一个程序放在服务器上,用于给客户端童数据支持。客户端:大家在电脑安装的相关程序,内部会连接服务器进行首发数据并提供交互和展示的功能。
(二)B/S架构
是Browser和server的简称。开发这种架构的程序意味开发服务端即可,客户端用用户电脑上的浏览器来代替。例如:淘宝、京东等网站。
服务端:互联网公司开发一个网站,放在他们的服务器上;
客户端:不需要开发,用现成的浏览器即可。
简而言之:B/S架构是开发网站;C/S架构就是开发安装在电脑的软件。