网络编程、互联网协议
一、软件开发架构
两个应用程序之间通讯的应用大致可以分为两种:
一:应用类:如 ,qq,wehchat,网盘, 优酷这一类属于需要安装的桌面应用
二:web类:如,百度,知乎,博客园等使用浏览器访问就可以之间使用的应用
一和二的本质其实都是两个程序之间的通讯,它们又对应两个软件开发的架构。
c/s架构
c/s:Client和Sever,即客户端和服务端架构,这种架构师从用户层面(物理层面)来划分的。
b/s架构
b/s:browser与server,即浏览器端与服务端架构,是从用户层面来划分的。
brower浏览器也是一种client客户端,它不需要安装什么应用程序,只需在浏览器上通过HTTP请求服务器端相关资源(网页资源),客户端browser浏览器就能进行增删改查。
二、互联网协议
网路基础
不同计算机之间想实现无障碍通信,除了物理连接介质外,还要有一套公用的标准,只有大家都遵守这套标准,计算机才能实现通信,这个标准叫 互联网协议!
互联网协议
按照功能不同分为:osi七层 或 tcp/ ip五层 或 tcp/ip四层
交换机知识补充:
多台电脑之间想实现相互通信,该如何链接?
这个时候就需要一个中间人来帮助我们完成多台机器之间互联:即交换机。(链接了同一个交换机的电脑彼此之间都是互联的)
了解:
三层交换机:既具有交换机功能又具有路由器功能
四层交换机:能够根据你走的是什么协议对应找到对应的应用
每层常见运行协议:
1、物理层
物理连接介质,传递电信号 01010101010101010101111
产生的问题:无法获取具体数据内容,因此需将电信号输给数据链路层
2、数据链路层
判断数据是什么,判断数据是给谁的
基于以太网协议的通讯方式:
1、规定了一套分组方式:获取电信号真实数据,电信号是一个数据包
数据包:
head:共有18个字节 ,其中, 6个是发送者的,6个是接收者的,6个是数据类型
data: 电信号具体的数据
2、每一台电脑必须要有一个网卡(电脑插入网线的地方):
每一块网卡都会有一串世界上独一无二的数字:
12位16进制的数字,称之为:mac地址
其中,前6位是:厂商号,后6位是流水号
mac地址的作用:
标示全世界上一台独一无二的计算机。
以太网协议的工作方式: 单播和广播
缺点: 广播风暴
只能在局域网内实现通信,无法跨局域实现通信
3、网络层
规定了计算机都必须有一个ip地址
ip地址特点: 点分十进制的数字组成,如,180.101.49.11
有两个版本:ipv4 和 ipv6 为了能够兼容更多计算机
其中 ipv4版本的:
最小: 0.0.0.0
最大: 255.255.255.255
ip的作用:
用于标示全世界某一台计算机的位置,局域网的位置。
ip地址 + mac地址:
标示全世界某一个局域网内的,某一台计算机。
4、传输层
tcp 与 udp 都是基于 端口port 实现通信的。
主要是软件与软件直接进行通信。
TCP协议:建立双向通道。
三次握手建连接:
1:C 向 S 发送建立连接请求
2:C 返回收到请求的信息给 S, 并且发送往C 建立连接的请求
3:C 接收到 S 发来的请求,返回接成功给 C,完成双向连接
反馈机制:
客户端往服务端发送请求,服务端必须返回响应,告诉客户端收到请求了,并且将服务端的数据一并返回给客户端。
C-->S: 一次请求,必须有一次响应。
缺点:
1、洪水攻击:
指的是通过伪造大量的请求,往对方服务器发送请求,
导致对方服务器响应跟不上,以至于瘫痪。
linux系统有个参数可以限制。
2、半连接池listen: 限制用户在同一个时间段内的访问数量。
四次挥手断开连接:
1:客户端向服务端发送断开连接的请求
2:服务端返回收到请求的信息给客户端
3:服务端确认所有数据接收完成以后,再发送同意断开连接的请求给客户端
4:客户端返回收到断开连接的请求,给服务端。
UDP协议:
称之为数据包协议。
特点:
1) 不需要建立链接。
2) 不需要知道对方是否收到。
3) 数据不安全
4) 传输速度快
5)能支持并发
6) 不会粘包
7) 无需先启动服务端再启动客户端
优点:
- 传输速度快
- 能支持并发
- 不会粘包
缺点:
- 数据不安全, 容易丢失
应用场景: 早期的QQ聊天室。
- TCP协议(称为流式协议):
优点:
- 数据安全
缺点:
- 传输速度慢
- 粘包
client:
import socket client = socket.socket(type=socket.SOCK_DGRAM) address = ('127.0.0.1', 9002) while True: msg = input('Client ---> Server:').encode('utf-8') client.sendto(msg, address) # data, addr = client.recvfrom(1024) # # print(data)
server:
import socket # socket.SOCK_DGRAM ---> UPD协议 server = socket.socket(type=socket.SOCK_DGRAM) # 服务端需要绑定一个地址,让别人知道你在哪里 server.bind( ('127.0.0.1', 9002) ) while True: # 发送数据给服务端的用户地址 data, addr = server.recvfrom(1024) print(addr) print(data) # msg = input('Server ---> Client:').encode('utf-8') # 无论服务端还是客户端,发送消息时,都必须知道对方是谁 # server.sendto(msg, addr)
端口port:
用于标识计算机中某一个独一无二的软件。
mac地址 + ip地址 + port端口:
标识的是全世界范围内某一个局域网内某一台计算机上的某一个软件。
5、应用层
分为
http协议:
ftp协议: