网络架构和OSI7层协议
单机
-
单机游戏
以下基于网络
CS架构
-
客户端游戏
-
CS----->client(客户)/server(服务)
-
你自己是客户端:消费----->服务端:收钱
服务端一个够了,客户端可以有多个
服务端和客户端都是应用程序,那么两者都可以存储数据,优劣势:
-
服务端存储数据:很多人都可以用,一次更新,其他人还是可以直接拿,数据安全
-
客户端存储数据:快,非常快,但如果本地保存账户密码,安全性特别低,客户端不联网,数据不更新
BS架构
-
网页游戏
-
BS------>browser(浏览器)/服务端
客户端(浏览器)/服务端,程序放在浏览器上
互联网和互联网的组成
边缘部分:客户端、服务端,这些普通的计算机,负责接收传送数据
核心部分:传输网络的设备,路由,基站,负责数据的运输
科普版
-
打开浏览器
-
输入网址(www.taobao.com)----->地址指向淘宝的服务端
-
按下enter键客户端吧www.taobao.com解析成淘宝的地址(杭州XXXXXXXX)
-
发送一条指令给淘宝,让淘宝把数据发给你
-
客户端渲染数据
互联网的组成
硬件:提供给你网络
软件:应用程序,完成具体的任务
OSI七层协议(**********************)(面试常问)
-
互联网由硬件和软件组成,传输数据,只能传输电信号,1和0,OSi协议把0和1从无意义的东西转换为有意义的东西
物理层
计算机与计算机之间传输数据
-
光缆/网线:传输信号,链接两台计算机,如果有一根网线能从美国连到中国,那么只要物理层就够了(很多军事部门就是专线)
数据链路层
让同一局域网下的计算机连在一起
把1011010101101010100100000变得有意义,分组,没几个一组
以太网协议:规定物理层中传输的0和1的格式
head:
收件人地址:
数据类型:
发件人地址:
data:内容
-
发件人地址就是mac地址,计算机网卡的地址,这个地址固定不变,并且唯一,每一台电脑都有自己固定的mac地址
-
广播:你一定知道自己的mac地址,还有收件人的mac地址通过某一台设备(交换机),但是交换机不知道mac地址对应的计算机是那一台,交换机会以广播的形式发给所有计算机,收件人的计算机收到就会解析这条命令,拿到内容了之后交换机会记录两个mac地址
以上基于局域网
网络层
让不同局域网下面的计算机连在一起
叫做IP地址,只知道mac地址无法连接其他局域网内的计算机,因为mac地址只被交换机识别,然后不同局域网的交换机不一样,所以现在定义一个新的地址表名是哪个局域网,通过路由器
在数据链路层的基础上包一层IP头
已经知道了淘宝的IP地址和mac地址,你会把自己mac地址和IP地址一起发送过去,路由会接受淘宝的IP地址,路由发送的淘宝的IP地址和mac地址,自带mac地址(路由器的)和IP地址(路由器的IP地址)
mac地址(局域网)+IP地址(互联网)就能找到全世界独一无二的电脑
传输层
组织网络带来的数据
端口号,找到一个固定的应用程序,一个端口号对应一个应用程序
mac地址(局域网)+IP地址(互联网)+端口号就能找到全世界独一无二的电脑上的独一无二的应用程序
数据0和1发送给应用程序,TCP/UDP协议
应用程序
0和1转换成具体的功能
抽象层
客户端和服务端的应用程序想通信,两者传输的就、数据必须是一样
socket抽象层就是写出一个全世界独一无二的计算机上的应用程序,既可以是客户端,也可以是服务端
使用socket编写的客户端服务端写一个文件拷贝的CS架构的软件
TCP三次握手和四次挥手
TCP把链接作为最基本的对象,每一条TCP链接都有两个端口,这个端口成为套接字,他的定义为端口号拼接到IP地址及构成了套接字。
-
三次握手
-
其实一次握手,两次握手也能实现通信,但是存在很多问题:
-
一次握手的话,接收不到服务端的确认信号,你无法得知服务端的状态(关闭,开启)
-
两次握手的话,如果你在第二次握手后死掉了(宏机),但是你死之前发送了数据指令,则服务器依然会发送数据指令,很容易被拦截盗窃,有安全隐患。
-
-
四次挥手
-
四次挥手也是出于一种安全考虑吧
-
四次挥手的话,可以避免如果在第二次挥手后,客户端出现宏机撕掉后,在第二次和第三次之间,服务器端向客户端发送数据,数据无人接收,被人冒名接收的风险
-
同样,第四次挥手是为了解决第三次挥手时候,如果没有第四次挥手的话,服务器端不停的向客户端发送数据,不会停止的问题
-
为什么客户端最后还要等待2MSL
-
主要常见原因是为了网络延迟
MSL,TCP允许不同的实现可以设置不同的MSL值
-
保证客户端最后一个ACK能够到达服务器,因为这个ACK报文可能已经丢失,从服务器来看,FIN和ACK报文已经断开了,客户端没有回应,那应该是没有收到,我就重发一次,于是服务器再发一次,客户端就能在2MSL时间段内收到这个重传的请求,并给出回应报文,并重启2MSL计时器
-