Python_架构、两个py文件通信、库、端口号
架构
C/S架构
C:client 客户端
S:server 服务器
CS架构是早期使用的一种架构,当然目前的各种app使用的也是这种架构,它的表现形式就是拥有专门的app。它是B/S架构的始祖。
B/S架构
B: brows 浏览器
S: server 服务器
优点:
统一了应用的接口(入口)。(是一个未来的发展趋势)
B/S架构是在C/S架构上衍生出来的架构,目前使用浏览器访问类似某宝之类的网站就是使用的这种架构。他的表现形式就是不需要专门的app,在浏览器中输入对应的域名,就可以完成各种需求。它是未来的发展趋势,最大的优势就是可以减少对个人终端的硬件配置的依赖性,可以节省内存。
通信
同一台电脑上两个py文件通信
同一台电脑上的两个py文件,可以借助一个文本文件进通信。具体过程是a.py文件将数据写入到c.txt文件中,然后b.py文件读取c.txt文件中的信息(这个信息是a.py文件写入的),然后b.py文件将读取到的信息进行处理,然后将反馈信息重新写入到c.txt文件中,最后a.py文件再从c.txt文件中获取b.py文件反馈的信息,这样就完成了一次通信。
1 import socket 2 # 3 # type=SOCK_STREAM# 流 tcp协议的关键字 4 # 5 # 实例化一个socket对象 : 套接字 6 sk = socket.socket()# 不传参,默认使用默认参数,默认tcp协议 7 # 8 # '127.0.0.1':回环地址 本机默认地址 9 sk.bind(('127.0.0.1',8090))# 开启服务 10 # 11 sk.listen(5)# 监听 允许多少个客户端来连接我 12 # 13 fd,addr = sk.accept()# 等待接收客户端连接 14 # 15 fd.close() 16 sk.close()
1 import socket 2 3 sk = socket.socket()# 我买一个新手机 4 sk.bind(('127.0.0.1',8090))# 买一个电话卡,装上 5 sk.listen(5)# 告诉了几个人我的手机号 6 fd,addr = sk.accept()# 等着别人给打电话 7 8 while 1: 9 msg_r = fd.recv(1024).decode('utf-8') 10 if msg_r == 'q': 11 break 12 print(msg_r) 13 14 msg_s = input(">>>") 15 fd.send(msg_s.encode('utf-8')) 16 if msg_s == 'q': 17 break 18 19 20 fd.close()# 挂断电话 21 sk.close()# 关机
1 # 要求 2 # 客户端主动发送一个q,断开连接,并且服务器也要断开连接 3 # 服务器端主动发送q,断开连接,并且此时客户端也要断开 4 5 import socket 6 7 sk = socket.socket() 8 9 sk.connect(('127.0.0.1',8090)) 10 11 # 收发信息的逻辑 12 while 1: 13 msg_s = input('>>>') 14 sk.send(msg_s.encode('utf-8')) 15 if msg_s == 'q': 16 break 17 18 msg_r = sk.recv(1024).decode('utf-8') 19 if msg_r == 'q': 20 break 21 print(msg_r) 22 23 sk.close()
先运行服务器,再运行客户端。
网卡
首先需要明确的一点就是,网卡是由网卡生产厂商生产的,不是电脑厂商生产的。
网卡上有一个mac地址,又叫物理地址,全世界唯一,可作为硬件设备的唯一标识。
查看mac地址命令
ipconfig -all
ipconfig /all
以上两条命令都可以查看mac地址,只是两种不同的书写方式而已。
两台电脑之间的通信
两台电脑之间通信,可以使用一根网线直接连接两台电脑,这样就可以进行简单的通信。平时在我们需要在两台电脑之间传输较大的文件时,可以使用这种方式,它的好处就是传输速度快,并且不需要移动硬盘或者U盘等。
几十台电脑之间的通信
多台电脑之间的通信,需要建立局域网,使用交换机或者路由器将这多台设备连接起来,在交换机或者路由器中做好配置后即可进行通信。
交换机通信
广播
交换机向局域网中广播一条信息,所有电脑都可以接收到广播的内容,可以想象下以前农村还是生产队的时候,大队的大喇叭,基本原理相同,也可以理解为吼一嗓子。
单播
方向固定的向某一台主机发送消息。
组播
向某一部分或某一组主机发送消息。
下图为局域网中两台主机之间的通信,具体过程见图:
整个通信过程简略概括如下:
第一步:服务器1向交换机发送一条消息,这条消息包含了服务器1的IP、端口、mac地址以及目标主机的IP。
第二步:交换机收到服务器1的消息后,向局域网中广播一条消息,消息携带了服务器1的IP、端口、mac地址以及目标主机的IP。
第三步:局域网中的所有主机收到交换机广播的消息后,查看时候是找的自己。如果是找的自己,则将自己的IP、端口、mac地址发送给交换机,并申请和服务器1建立通信。
Ip地址
IPV4地址是一个四位点分十进制的一串数字。
子网掩码
子网掩码是计算机根据你的Ip地址产生的一个地址。
网段
网段是根据IP地址 &(与) 子网掩码得出的一个结果。
先给出IP地址为192.168.12.84,子网掩码为255.255.255.0,计算出这台计算机所在的网段。
思路:
第一步:将IP地址和子网掩码转换成二进制
第二步:将IP地址和子网掩码的二进制进行按位与运算,得到的结果就是二进制的网段,最后再转换成十进制即可。
计算过程:
11000000.10101000.00001100.01010100 (192.168.12.84)
1111 1111 .11111 111.111111 11 .00000000 (255.255.255.0)
---------------------------------------------------------------------------------
11000000.10101000.00001100.00000000
192 . 168 . 12 . 0
所以这台计算机所在的网段为192.168.12.0。
二进制与十进制的转换
二转十
如下图所示,二进制数从右至左,一次是2的0次方,2的1次方,2的2次方,2的3次方...2的7次方,将每一位换算成十进制后相加起来就得到了最终想要的十进制数。
十转二
十进制转二进制就是将十进制的数字短除2,最后将余数按顺序排起来就得到了二进制数。
更多电脑之间的通信
更多电脑之间的通信,就比如说是我们现在日常的上网,它需要建立广域网,多台电脑通过网关、路由器、交换机等设备连接起来进行数据通信。在信息发送过程中,具体下一跳要跳在哪是要根据路由器中的路由表外加信息中的路由信息决定的。
广域网 交换机 + 路由器 + 代理ip
广域网中,
6、库 == 模块
就是别人写好的代码,我可以直接拿来调用的.
tcp和udp协议都是基于socket模块来实现的,是对socket模块的再次封装.
tcp
安全可靠,面向连接,字节流服务 - - 代表没有边界。
udp
不安全不可靠,不面向连接,但是效率高。
7、端口号
ip + port 唯一确定一台主机上的某一个程序。
允许开发人员使用的端口范围从 8000 开始 8000 - 10000.
三次握手
具体的通信过程如下图:
四次挥手
具体的通信过程如下图:
OSI七层模型
OSI七层模型,经过扁平化的处理,现在出现了两种形式,一种是五层的,一种的四层的.具体对应关系如下图:
小彩蛋:
1、你知道哪些研发相关的架构?
1) C/S架构
2) B/S架构
2、arp协议做了什么事情?
ARP(Address Resolution Protocol,地址解析协议)是将IP地址解析为以太网MAC地址(或称物理地址)的协议。
在局域网中,当主机或其它网络设备有数据要发送给另一个主机或设备时,它必须知道对方的网络层地址(即IP地址)。但是仅仅有IP地址是不够的,因为IP数据报文必须封装成帧才能通过物理网络发送,因此发送站还必须有接收站的物理地址,所以需要一个从IP地址到物理地址的映射。APR就是实现这个功能的协议。
假设主机A和B在同一个网段,主机A要向主机B发送信息。具体的地址解析过程如下
(1)主机A首先查看自己的ARP表,确定其中是否包含有主机B对应的ARP表项。如果找到了对应的MAC地址,则主机A直接利用ARP表中的MAC地址,对IP数据包进行帧封装,并将数据包发送给主机B。
(2)如果主机A在ARP表中找不到对应的MAC地址,则将缓存该数据报文,然后以广播方式发送一个ARP请求报文。ARP请求报文中的发送端IP地址和发送端MAC地址为主机A的IP地址和MAC地址,目标IP地址和目标MAC地址为主机B的IP地址和全0的MAC地址。由于ARP请求报文以广播方式发送,该网段上的所有主机都可以接收到该请求,但只有被请求的主机(即主机B)会对该请求进行处理。
(3)主机B比较自己的IP地址和ARP请求报文中的目标IP地址,当两者相同时进行如下处理:将ARP请求报文中的发送端(即主机A)的IP地址和MAC地址存入自己的ARP表中。之后以单播方式发送ARP响应报文给主机A,其中包含了自己的MAC地址。
(4)主机A收到ARP响应报文后,将主机B的MAC地址加入到自己的ARP表中以用于后续报文的转发,同时将IP数据包进行封装后发送出去。
当主机A和主机B不在同一网段时,主机A就会先向网关发出ARP请求,ARP请求报文中的目标IP地址为网关的IP地址。当主机A从收到的响应报文中获得网关的MAC地址后,将报文封装并发给网关。如果网关没有主机B的ARP表项,网关会广播ARP请求,目标IP地址为主机B的IP地址,当网关从收到的响应报文中获得主机B的MAC地址后,就可以将报文发给主机B;如果网关已经有主机B的ARP表项,网关直接把报文发给主机B。
3、交换机的通讯方式?
1.交换机根据收到数据帧中的源MAC地址建立该地址同交换机端口的映射,并将其写入MAC地址表中。
2.交换机将数据帧中的目的MAC地址同已建立的MAC地址表进行比较,以决定由哪个端口进行转发。
3.如数据帧中的目的MAC地址不在MAC地址表中,则向所有端口转发。这一过程称为泛洪(flood)。
4.广播帧和组播帧向所有的端口转发
4、你认为tcp和udp的区别?
TCP 安全可靠,面向连接,字节流服务 - - 代表没有边界。
UDP 不安全不可靠,不面向连接,但是效率高。
5、请描述出osi五层模型?
应用层
传输层
网络层
数据链路层
物理层
小彩蛋:
1、网段ip怎么确定?
ip地址 &(与) 子网掩码
2、请描述B/S架构的优势
统一了应用的接口。