软件开发架构
1. C/S架构
C: client 客户端
S: server 服务端
'''
客户端:店面服务的人员
服务端:可以理解为店面
客户端是可以有多个的
服务端需要具备的两大特征:
1. 24小时对外提供服务
2. 必须要有一个公网IP地址
'''
2. B/S架构
B: browser 浏览器
S: server 服务端
# 本质上B/S架构也是C/S架构
OSI七层协议
七层划分为:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。
五层划分为:应用层、传输层、网络层、数据链路层、物理层。
四层划分为:应用层、传输层、网络层、网络接口层。
网络层
如何查看电脑本机IP?
win + r => cmd => ipconfig
IP协议:规定了接入互联网的任何一台计算机都要有有个ip地址
ip地址:
ipv4:
最小:0.0.0.0
最大:255.255.255.255
本机回环地址:127.0.0.1
ipv6:表示的范围非常大
# ip地址能够确定世界上任何一台接入互联网的计算机
公网IP和内网IP
# 阿里云,腾讯云,华为云...
公网IP:
是需要购买的
内网IP:192.168开头
广域网,局域网,
传输层
TCP协议和UDP协议都是属于传输层的
端口(port):
范围:0-65535
基本使用:
0-1024是系统默认使用的
1024-8000 是常用软件使用的 3306, 8000, 5000
以后我们自己开大的软件端口号要使用8000以后的
# 一个端口在同一时刻不能同时使用
总结:
ip:port => 127.0.0.1:80
# ip+port能够表示世界上唯一一台计算机上的唯一一个应用正在执行
常用软件端口号
应用程序 FTP TFTP TELNET SMTP DNS HTTP SSH MYSQL
熟知端口 21,20 69 23 25 53 80 22 3306
传输层协议 TCP UDP TCP TCP UDP TCP TCP TCP
# http协议的端口号:80
# https协议: http + ssl证书
TCP协议
# 也叫流式协议, 可靠协议
三次握手,四次挥手
三次握手的目的:建立连接的
面试题:为什么建立连接是三次握手,关闭连接确是四次挥手呢?
UDP协议
# 不可靠
没有传输通道一说,
总结:
'''
TCP:
1. 数据安全可靠
2. 速度慢
UDP:
1. 数据不安全,也不可靠
2. 速度快
'''
案例:远程控制软件
socket编程
抽象层不属于七层协议的任何一层
什么是Socket呢?我们经常把Socket翻译为套接字,Socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信。
基于TCP协议的套接字编程
############################服务端########################################################
# 1. 实例化对象socket
import socket
# 2. 得到对象
# 2.1. 如果不传参数,代表的是TCP协议:SOCK_STREAM
# 2.2 type=socket.SOCK_DGRAM => UDP协议
# server = socket.socket(type=socket.SOCK_STREAM)
server = socket.socket()
# 3. 绑定
server.bind(('127.0.0.1', 8002))
# 4. 监听, 数字代表的是半连接池
server.listen(3)
print('服务端开始接收客户端消息了:')
# 5.
# sock: 当前连接的客户端对象
# addr: 客户端的地址
sock, addr = server.accept()
# 6. 接收客户段发送的消息
# 1024代表的是字节数,接收数据的最大字节数
# 粘包现象
data = sock.recv(1024) # hello
print('客户端数据:', data)
# 7. 给客户端返回数据
sock.send(data.upper()) # HELLO
# 8. 断开连接
sock.close()
# 9. 关门
server.close()
############################客户端########################################################
# 1. 实例化对象
import socket
client = socket.socket()
# 2. 连接
client.connect(('127.0.0.1', 8002))
# 3. 给服务端发送数据,发送的数据类型必须是字节类型
client.send('hello'.encode('utf-8'))
# 4. 接收服务端发送过来的数据
data = client.recv(1024)
print('服务端的数据:', data)
# 5. 断开连接
client.close()