1、OSI七层协议
1.七层划分为:应用层,表示层、会话层、传输层、网络层、数据链路层、物理层
2.五层划分:应用层、传输层、网络层、数据链路层、物理层
应用层:
表示层:
会话层:
传输层:四层交换机、四层路由器,TCP协议、UDP协议
网络层:路由器、三层交换机
数据链路层:网桥、以太网交换机、网卡
物理层:中继器、集线器、双绞线
2、软件架构
C/S: client ===>客户端 server===>服务端
B/S: browser ===>浏览器 server===>服务端
一、CS系统架构
客户端:用户安装的软件
服务端:统一管理数据库的主机中的软件叫做服务端,在后来服务端不只是管理数据,外加处理业务逻辑
1.用户操作系统安装客户端
2.每个用户需要独立安装软件、服务端升级也要每个用户升级
应用领域:QQ、大型网络游戏
二、BS系统架构
1.统一客户端即默认安装用户电脑中的浏览器,访问同种类的网站,具体业务的处理根据相应协议和标准提供通用的服务器程序,在不同的服务器处理。
2.基于BS结构下的程序就要求解决速度问题,而速度问题的核心就是解决海量数据操作和高并发问题,网站复杂架构就是从这两个问题演变出来的。
三、BS架构和CS架构区别
BS技术架构:纯B/S架构,MYSQL数据库,JAVA语言,LINUX操作系统,全球领先的技术,免费正版的数据库,没有病毒的操作系统,经营数据不会被截取和外泄。
CS技术架构:C/S架构,使用VPN连接,费用高,数据慢,容易丢失数据,采用WINDOWS操作系统,Oracle,SQL-Server数据库,用正版费用高,用盗版存在商业风险。
BS核心技术:纯B/S架构,WEB2.0,管理便利,数据实时同步,便于数据分析和总部营销决策、
CS核心技术:C/S架构,数据传输慢,容易丢单,管理非常不便利,可扩展性差
3、TCP协议
TCP协议的三次握手和四次挥手
# 三次握手:建立连接 ,四次挥手:断开连接
TCP协议特点:
1.数据可靠传输
2.速度相对于UDP协议较慢
UDP协议特点:
1.数据不可靠
2.速度相对于TCP协议较快
4、Socket抽象层
一、socket是什么
1.我们经常把Socket翻译为套接字,Socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信。
二、本机IP地址:
本机IP地址:127.0.0.1
socket抽象层:就是一个个的对外访问的接口
5、基于TCP协议的套接字编程
注意:先启动服务端再启动客户端
##########################Sever.py##############################
import socket
1.实例化socket对象
# 参数不传递默认代表是TCP协议
server = socket.socket(type=socket.SOCK_STREAM)
2.绑定
server.bind(('127.0.0.1',8001)) # 必须端口在1024之上
3.监听,括号中是半连接池
server.listen(5)
4.接收客户端发来的信息
print('正在等待客户端发来的消息:')
# sock:当次连接对象,addr:客户端的地址。ip+port
sock,addr = server.accept()
5.拿到数据,一次最多接收1024个字节的数据
data = sock.recv(1024)
print(data)
6.发送客户端的数据
sock.send(data.upper()) # 接收客户端发送的数据并转为大写
7.断开连接
sock.close()
8.关闭之后不能在绑定IP地址了
server.close()
##########################Client.py##############################
import socket
1.实例化socket对象
client = socket.socket()
client.connect(('127.0.0.1',8001))
2.向服务器发送数据
client.send(b'hello boy')
3.接收服务端发来的数据
data = client.recv(1024)
print(data)
client.close()
6、基于UDP协议的套接字编程
# 服务端
import socket
# SOCK_STREAM : tcp协议的服务端
# SOCK_DGRAM :udp协议的服务端
server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 数据报协议-》UDP
server.bind(('127.0.0.1', 8080))
while True:
data, client_addr = server.recvfrom(1024)
print('===>', data, client_addr)
server.sendto(data.upper(), client_addr)
server.close()
# 客户端
import socket
client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 数据报协议-》UDP
while True:
msg = input('>>: ').strip() # msg=''
client.sendto(msg.encode('utf-8'), ('127.0.0.1', 8080))
data, server_addr = client.recvfrom(1024)
print(data)
client.close()