python 网络的三种架构
网络的三种架构
单机架构
不用联网,比如我们玩的单机游戏
cs架构
client: 客户 server:服务
客户端-->服务端
bs架构
brower 浏览器 server 服务
客户端嫁接在浏览器上-->服务端(bs为cs的一种)
互联网的组成
教材版
1.边缘部分: 客户端或者服务端
2.核心部分:路由器,基站
科普版
1.硬件:一些硬件设备
2.软件:通过一些osi协议组织无序的电信号为有序
osi七层协议(==面试经常问==,可以参考老师的示范,mp3文件)
物理层
电缆,光缆,能看得见的设备,连接计算机,传输电信号
数据链路层(局域网内)
把信号分组,数据只能在局域网内传输,局域网传输靠mac地址和交换机
head(以太网头)
发送地址 6 个字节
目标地址 6个字节
数据类型 6个字节
data 有长短限制
mac地址才是计算机的唯一编号
以广播的形式传输
网络层(局域网相连)
我们想连接其他局域网的电脑,比如美国的电脑,原则意义上我们可以通过交换机,网线把美国的电脑连接上,想想这可能吗?是不是想想都很恐怖
那如何连接上其他局域网的计算机呢?就是网络层
ip地址,ip地址是靠路由器传输,然后就可以跨局域网通信
我们可以获取自己的ip地址,在cmd中输入ipconfig,就可以看到自己的ip地址
ip地址+mac地址确定世界独一无二的计算机
传输层
传输层给了一个端口
ip地址+mac地+端口就能确定世界上独一无二的计算机上的应用程序
应用层
应用程序
tcp 协议
数据从客户端-->服务端的协议
三次握手建立联系
如果你要去服务端下载视频,客户端和服务端之间必须得连接,连接就是三次握手:
在连接之前客户端和服务端都是出于关闭状态的
1.客户端会像服务端发起一个请求,如下载视频,会有一个syn报头
2.服务端会接收到客户端的请求,然后会响应客户端,并且把syn报头改装好后又返回客户端,会有ack的报头
3.客户端开始进入建立连接状态,再发一条请求,请求带上ack给服务器,让服务器也进入连接状态
为什么要三次呢?
1次可以吗?为什么
1.客户端直接进入连接状态,直接发送请求给服务端,直接进入连接状态
弊端:假使这时客户端发送一个伪ip,直接发给服务端,服务端就立马进入连接,会导致服务端无效传输,浪费服务端的资源
2次可以吗?为什么
1.客户端暂不进入连接状态,发一条请求给服务端
2.服务端直接进入连接状态,发送一条确定请求给客户端,客户端收到直接进入连接状态
弊端: 一般服务端不会出现故障,死机之类的,客户端比较容易出现这种问题,假使在第2步的时候,客户端死了,这时服务端知道吗?并不知道,还是照旧传输数据,也会造成服务端资源的浪费
综上就是必须3次就可以进行建立连接
四次挥手关闭连接(为什么3次不行)
1.客户端会发送请求带上fin报头给服务端说我够了,要断开连接
2.服务端接收到客户端的请求后,返回一个带有ack报头的请求说确认了,还有数据没有传完,等会吧
(1.fin报头并没有返回 2.但是服务端此时还有可能传输数据)
3.服务端数据传输结束之后服务端又会发送一次带报头fin的请求,告诉客户端我所有数据都发完了,结束吧
(如果只有三次连接,但是客户端可能在第二次连接后死掉了,客户端压根没有收到第2-3步之间的数据传输,服务端并没有管你客户端到底接收到了没有,然后服务端是发送给了你确认关闭)
4.所以必须得有第四次,客户端像服务端进行一次确认,我收到了你中途发的数据
上一篇: 胜利的果实