客户端与服务端架构介绍
客户端与服务端实现通信
客户端将处理好的数据发给服务端,服务端把反馈好的数据再发回给客户端(客户端与服务端实现交互)
CS架构
跟CS相对应的还有一个BS架构 (浏览器和服务端软件)
服务端必须满足的要求:
1、稳定运行(网络、硬件、操作系统、服务端应用软件)对外一直提供服务
2、服务端必须绑定一个地址
================================================================================
计算机与计算机之间必须有底层的物理连接介质,我们才能将计算机与计算机连接到一起进行网络通信
打电话(电话线连接,这是物理连接介质) 计算机(网线连接)
什么是互联网?
两大要素
1、底层的物理连接介质,是为通信铺好道路的
2、一套统一的通信标准,互联网通信协议
互联网协议就是计算机界的英语
网线(物理连接介质) 物理连接设备:光缆,电缆,双绞线,无线电波
物理层:负责发送电信号 (调网卡往外发) 由网卡发给对方的物理层
=============================================================================================================
数据链路层:要想把电信号对应出意义(例如:电信号010101) 需要进行分组操作,要想分组物理层干不了,要干这件事需要数据链路层来干这件事 一开始
各有各的标准,后来统一了标准,这套标准称之为以太网协议(ethernet)
任何一个数据包分为两大部分,称之为报头与数据部分(报头相当于信封,信封里面包的数据相当于里面的内容)
自定义协议:
任何一种通信协议必须包含两部分:
1、报头:必须是固定长度
2、数据
以太网协议:
ethernet规定
head:报头
发送者/源地址 6个字节
接受者/目标地址 6个字节
数据类型/ 6个字节
data包含的内容:
数据包
mac地址 发送端和接受端的地址称之为mac地址即网卡地址
以太网协议通信:采用最古老的方式,广播
广播风暴:交换机产生大量的广播
两台机器在一个局域网内以太网 (mac地址出不了广播域)
======================================================================================================
网络层
网络层有一个协议称之为IP协议
目前我们使用IP的版本是第四版本 称之为IPV4 ,目前我们正普及IPV6
IP这个协议规定 发送数据包分为两部分, 报头和数据与以太网一样。 IP协议的数据包用的是IP地址。以太网协议的数据包用的是以太网地址。
IP地址与子网掩码
两者都一样都是点分十进制
学IP地址的用处?
子网地址一样的情况下 子网地址(IP地址与子网掩码匹配出子网地址)
当主机分散在不同的局域网内,无法找到对方在哪,先要找到对方的局域网在哪里,单纯的IP地址标识不了还需要配套的子网掩码。然后得到子网地址
接着匹配子网地址。得到对方的子网地址和自己的子网地址地址是不是一样,如果一样就在一个局域网内,然后再用mac地址
子网地址不一样的情况下
我自己有子网地址,对方也有子网地址IP与子网掩码的按位与运算,找到对方在哪个小圆圈,再根据mac地址,就能找到对方在哪个小圆圈的地址
IP+mac地址就能标识世界上独一无二的计算机(基于网络通信的前提一定要有标识地址的方式)
=======================================================================================================
光计算机通信就完了吗 是客户端软件与服务端软件进行通信,不光要找到计算机,还要找到计算机上面的应用软件,IP地址搞定不了
每启动一个互联通信的程序都会对应一个端口1024-65535是自己的程序 0-1024是给操作系统预留的
传输层(TCP/UDP)
IP+mac+端口号(port)就能标识全世界独一无二的基于网络通信的应用软件(服务端不许换端口号,客户端可以换端口号)
========================================================================================================
应用层(跟应用软件有关)
http,ftp,mail (这些是通用的协议) 浏览器用的是http协议
如何用浏览器把对方主机上的内容下载到本地浏览的过程
上网的过程其实就是一个下载的过程。
应用层产生一个请求(数据),调本机的网卡,沿着网络发给对方的网卡,再让对方收到。应用程序交给操作系统,操作系统会包tcp的头,操作系统再包IP 头,再包以太网头。再把包打散形成0101的二进制,沿着网卡接着通过物理连接介质送给对方。接着交给对方的操作系统,然后进行解包的过程。
如何解呢?一层层解,物理层拆以太网协议头,再拆IP 头然后拆TCP头,露出应用层的数据然后交给服务端的应用软件来接受数据。
发数据事不断封包的过程,收数据事拆包的过程。
应用层以下的归操作系统管
应用层其实是发给操作系统,应用层只要把数据丢给操作系统就发完了,操作系统会照着协议自己运作就可以了。应用层的send是发给自己的操作系统
应用层的send是给自己的操作系统发的
浏览器与服务端的交互通过url
URL称之为统一资源定位符 在视频的 (1:23里解释) 用来标识全世界范围内独一无二的资源。再找到软件的基础上再加一层
URL地址建立在 IP地址mac地址及端口地址上的
http://应用层协议部分
www.cnblogs.com称之为域名
此处还省略了端口号:80 这是服务端的端口号 (所有浏览器自动填充的端口号是80)
/linhaifeng/article/62300称之为文件的路径
网站的本质就是把一丢有价值的数据传到机器之上,起了服务端软件,管理这台机器上的文件。
域名一定是对应ip地址的。但是通过浏览器访问网站的时候没有指定IP,如何通过域名拿到IP地址呢?
通过一台机器来拿到DNS服务器
DNS称之为域名解析服务端。(通过他来拿到IP地址)
总的分析:浏览器如何从无到有访问一个网页的内容的
首先接受用户的交互操作,产生一个URL地址,然后浏览器不着急发请求,把域名交给网卡上配的DNS,DNS会反馈一个IP地址,拿到IP地址访问IP和端口
然后找到对方的机器。然后浏览器与对方软件建好联系(两条道),按照http协议去封装。
互联网协议的补充(了解)
网络层和以太网协议 如何把包送给对方的
先要拿到对面的IP地址,接下来算自己的IP和自己的子网掩码算一个网络地址,别人的IP和别人的子网掩码算一个网络地址。发现这两个一样在一个局域网
交换机有一个mac地址学习的功能,可以避免重复发广播包的问题
ARP协议算对方IP和子网掩码跟我的IP和子网掩码一样?
对方跟我在一个子网内基于mac地址的广播
mac地址通信只能在局域网内
网关与网关走的是路由协议
一个局域网网关都一样
三次握手
客户端发请求,服务端就立马要求建连接
sy1=1这是一个请求包
ack=1代表确认的意思
seq=x 序列号,暗号
seq=x+1
一般都是写ack=1+x这里面有两层意思 第一层是确认信息的意思,第二层1+x是基于上一个请求而来的
seq=y这个包的序列号 服务端受到这个包下个连接也建成功了
为什么三次握手建连接中间两步可以并成一步呢?因为此时只是为了传真正数据铺路而已。铺路是为了客户端给服务端发数据,服务端给客户端回数据。
数据发完了丧失存在的意义。
四次挥手
数据发完了 客户端会请求服务端断掉上面的连接
fin=1代表断开连接
ack=1+x这里面有两层意思
syn_sent 请求发送状态
listen 监听状态
syn_recv 请求接受状态
establish 连接建立状态
tcp协议
syn洪水攻击
服务端建连接只能一个一个来不可能跟所有人建连接 那怎么实现
所以建立了半连接池,就是一个队列
每来一个syn请求,到服务端之后
半连接池限制的不是连接数,限制的是请求数 不是限制并发的连接数
有6个客户端发请求只能接受5个
总结
三次握手:首先服务端处于监听状态,然后客户端发送一条请求syn和暗号seq=x,服务端收到请求和暗号开始响应,给客户端发送syn请求、暗号y和响应信号ack=x+1(1表示成功,0表示失败),客户端收到来自服务端的暗号并进行暗号与服务端发送的响应信号ack的对比,比对成功,成功建立客户端到服务端的数据传输路线。
由于客户端和服务端双方都知道这一次请求只是为了给接下来的数据传输铺路,于是把本应该重来一次的请求再响应的两步步骤合并为一步,客户端直接返回响应信号ack=y+1,服务端收到响应信号与之前发送的暗号进行比对,比对成功,直接建立服务端到客户端的数据传输路线。
注意:如果一直有大量客户端发送syn请求,而没有大量建立服务端到客户端的数据传输路线,则很大程度表明有人在攻击服务端,用这个方法阻碍正常用户的syn请求进入。
四次挥手:首先服务端成功传输了所有数据给客户端,然后开始发送一条关闭服务端到客户端的数据传输路线的请求fin,暗号seq=x+2,客户端接收到请求,响应并关闭了服务端到客户端的数据传输路线,并发送响应信号ack=x+3给服务端,服务端收到客户端发送的响应信号并与暗号进行比对,比对成功,得到服务端到客户端的数据传输路线已关闭的信息。
等到客户端也成功传输了所有数据,客户端发送关闭客户端到服务端的数据传输路线的请求fin和暗号seq=y+1,服务端收到请求,发送响应信号ack=y+2给客户端,并关闭了客户端到服务端的数据传输路线,客户端收到响应信号ack并拿它与暗号进行比对,比对成功,得到客户端到服务端的数据传输路线以关闭的信息。
注意:因为fin_wait_1/2都是在很快的时间内完成的,而time_wait则会等待一段时间,如果time_wait等待的时间较长,则很大可能表明有很多用户在使用服务端。
半链接池:由于建链接时,只能一条一条请求的来,有客户端对服务端发送了请求,下一条客户端请求就会显示等待。因此有了半链接池,他的工作原理是在客户端请求成功被服务端接收后,服务端不会马上对该请求发出响应,而是把这些请求存进半链接池内,只要半链接池没有满,客户端的请求都会进入服务端,如果半链接池满了,那么请求也会被阻拦在外面显示等待,并且半链接池会通过服务端响应最早进入的客户端请求,达到泄洪的目的。
注意:半链接池限制的同一时间的客户端请求数,而非连接数。
为什么tcp协议可靠,udp协议不可靠
因为tcp协议在发数据的时候必须要等到对方确认信息,才能把数据清掉,而udp协议把数据发出去之后,立马把自己这里的数据清除掉,根本不考虑对方是否收到,只顾发
这样对于udp协议来说。优点是效率高,缺点是数据不安全,而tcp协议数据更安全但是传输效率不如udp高
fin_wait_1代表主动断开连接的一方
fin_wait_2代表被动断开连接
last_ack 代表最后请求
大量 time_wait 代表大量的人在访问你
fin_wait_1代表主动断开连接的一方
fin_wait_2代表被动断开连接
last_ack 代表最后请求
大量 time_wait 代表大量的人在访问你