CS架构与BS架构
在互联网中,通信协议一般分为两种:CS架构以及BS架构
CS指的是Client Server 代表客户端和服务端
BS指的是Browser Server 代表浏览器和服务端
客户端send 服务端recv
操作系统 操作系统
计算机硬件 <=====物理介质=====> 计算机硬件
网络通信
网络 = 物理链接介质 + 互联网通信协议
网络存在的意义就是跨地域数据传输, 称之为通信
互联网的本质就是一系列的网络协议
互联网协议的功能:定义计算机如何接入internet,以及接入internet的计算机通信的标准。
体系结构
把计算机网络的各层及其协议的集合,称为网络的体系结构
互联网通信协议根据历史发展分别有下面几个协议
注:图片源于知乎 友情链接
物理层
功能:负责传输比特流,将数据从物理介质上发送和接收。
两台计算机如果想要通信,就必须接入Internet(接入网络)
数据链路层
功能:负责在直接相连的节点之间传输数据帧,进行错误检测和纠正,以及流量控制。
网络层
目的:划分广播域
功能:负责为数据包选择合适的路径,并进行路由和转发。
引入一套新的地址来区分不同的广播域/子网,这套地址即网络地址(IP地址)
网络层:遵循IP协议
IP协议
IP协议是一种用于在网络上寻址和路由数据包的协议,它定义了如何将数据包从源地址发送到目标地址。
主要作用
为每一台计算机分配IP地址
确定哪些地址在同一个网络
注意:单纯的IP地址段只是标识了IP地址的种类,从网络部分或主机部分都无法辨识一个IP所处的子网
例如:172.18.45.1与172.18.45.2 并不能确定二者处于同一子网
子网掩码
子网掩码是一个用于确定IP地址的网络部分和主机部分的分界线的32位二进制数字,它与IP地址进行逻辑与操作,用于确定一个IP地址所属的网络。
IP数据包
IP数据包是在网络上传输的数据单元,它包含了源地址和目标地址等信息,用于在互联网上路由和传递数据。
ARP协议
ARP协议(Address Resolution Protocol)用于将IP地址解析为对应的物理MAC地址,以便在局域网内部进行通信。
补充1:arp协议只在一个局域网内通过ip解析获取mac地址,不会跨局域网根据ip地址获取主机mac地址。
补充2:局域网内每个主机的ip地址各不相同,这才实现了arp协议根据ip地址解析成mac地址的可能。
补充3:ip地址本质是网络地址加主机地址。通过ip地址可以唯一确定一个机器,因为局域网内每个主机的mac地址不同就会分配不同的ip地址。
传输层
功能:建立端口到端口的通信
传输层遵循的协议有两个:TCP协议和UDP协议,基于端口工作
mac + ip 标识唯一一个主机
ip + port 标识唯一一台主机上的一个基于网络通信的软件
TCP头里面放的是源端口和目标端口,UDP头也一样。
# tcp协议
可靠传输,TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP数据包的长度不会超过IP数据包的长度,以确保单个TCP数据包不必再分割。
# 至此:数据包装结果
以太网头 --> ip头 --> tcp头 --> 数据
# udp协议
不可靠传输,”报头”部分一共只有8个字节,总长度不超过65,535字节,正好放进一个IP数据包。
# 至此:数据包装结果
以太网头 --> ip头 --> udp头 --> 数据
TCP协议和UDP协议都是工作在传输层
三次握手
<1> 客户端作为主动方,首先向服务端发一个建立链接的请求。
<2> 服务端接收到请求后,回复同意。
<3> 然后服务端也要向客户端发一个请求建立链接。
<4> 客户端收到请求后,回复同意
<2>和<3>是两个连续从服务端发出的消息,可以合并从一个回复并请求。整个过程就是三次握手建立TCP连接
四次挥手
第一次挥手:当客户端想要关闭连接时,发送一个带有FIN(结束)标志位的报文,表明自己已经没有数据要发送了。
第二次挥手:服务器收到客户端的关闭请求后,发送一个带有ACK标志位的应答报文,确认收到客户端的关闭请求。
第三次挥手:服务器关闭自己的数据传输,发送一个带有FIN标志位的报文,表明自己已经没有数据要发送了。
第四次挥手:客户端收到服务器的关闭请求后,发送一个带有ACK标志位的应答报文,确认收到服务器的关闭请求。
UDP协议
udp协议特点:
UDP是无连接的,即发数据之前不需要建立连接,同理发送数据结束也没有连接可释放,这极大减少了开销和发送数据之前的时延。
UDP不保证数据的可靠交付,只负责将数据尽可能快的发出去。
即可能会产生丢包,一般使用场景就是网络查询,视频通话等。
应用层
应用层功能:提供特定的应用程序功能,例如电子邮件、文件传输、远程登录等。
我们知道两个进程如果需要进行通讯最基本的一个前提能能够唯一的标示一个进程,在本地进程通讯中我们可以使用PID来唯一标示一个进程,但PID只在本地唯一,网络中的两个进程PID冲突几率很大,这时候我们需要另辟它径了,我们知道IP层的ip地址可以唯一标示主机,而TCP层协议和端口号可以唯一标示主机的一个进程,这样我们可以利用ip地址+协议+端口号唯一标示网络中的一个进程。
能够唯一标示网络中的进程后,它们就可以利用socket进行通信了,什么是socket呢?我们经常把socket翻译为套接字,socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信。
socket起源于UNIX,在Unix一切皆文件哲学的思想下,socket是一种"打开—读/写—关闭"模式的实现,服务器和客户端各自维护一个"文件",在建立连接打开后,可以向自己文件写入内容供对方读取或者读取对方内容,通讯结束时关闭文件。
总结
每层都有自己的协议
网络通信实现
要实现网络通信,每台主机需要具备以下四个要素:
1. 本机的IP地址:用于唯一标识主机在网络中的位置。
2. 子网掩码:确定IP地址中哪些位用于网络标识,哪些位用于主机标识。
3. 网关的IP地址:作为主机与其他网络通信的出口,用于转发数据包到目标网络。
4. DNS的IP地址:用于域名解析,将域名转换为对应的IP地址。
这些要素可以通过两种方式获取:
1. 静态获取(手动配置):手动配置每个要素的数值,包括设置本机的IP地址、子网掩码、网关的IP地址和DNS的IP地址。
2. 动态获取(通过DHCP协议):使用DHCP(动态主机配置协议)协议,主机可以自动获取IP地址、子网掩码、网关的IP地址和DNS的IP地址。DHCP协议使用UDP协议进行通信。
DNS协议
DNS是域名解析服务器。也可以是域名解析系统,是用来绑定ip和域名的关系,它基于udp协议。
不管是BS架构还是CS架构的互联网通信软件都是基于IP地址+端口工作的。
对于BS架构,从方便使用者的角度出发(不需要用户记住复杂无趣的ip,引入的域名的概念)。于是BS软件就需要DNS域名解析过程。
基于CS架构的软件不需要DNS。
网络通信流程
1. 本机获取网络配置信息,包括IP地址、子网掩码、网关和DNS服务器的IP地址。
2. 打开浏览器,输入要访问的网址(如www.google.com)。
3. 浏览器使用DNS协议将网址解析为IP地址。
4. 使用HTTP协议发送请求给目标服务器,请求中包含了请求的内容和相关参数。
5. 请求数据被分割为TCP数据包,并添加TCP标头信息。
6. TCP数据包被嵌入IP数据包,添加IP标头信息。
7. IP数据包被嵌入以太网数据包,添加以太网标头信息。
8. 以太网数据包通过网络传输到目标服务器。
9. 目标服务器接收数据包,并按照相反的顺序解析数据。
10. 目标服务器使用HTTP协议生成响应,将响应数据分割为TCP数据包,并添加标头信息。
11. 响应数据通过网络返回到本机。
12. 本机接收到响应数据,浏览器解析并显示网页内容。
总结
基于网络通信的软件有两种架构:BS架构和CS架构。它们在以下几个方面有所不同:
- 客户端软件:BS架构没有独立的客户端软件,而是依赖于浏览器作为特殊的客户端来访问应用程序。
- DNS域名解析:在BS架构中,客户端多了一个DNS域名解析过程,即在浏览器的网址输入栏中输入网址后,需要进行域名解析获取对应的IP地址。
- 网络通信流程:BS架构中的网络通信流程可以总结如下:
- 本机的DNS域名解析系统启动,获取域名对应的IP地址,并将其交给浏览器。
- TCP/IP封包过程:浏览器将输入栏中的虚拟路径和其他信息打包成TCP/IP数据包。
- 数据包通过网络传输到对方主机,对方主机的应用层软件获取虚拟路径对应的资源,并原路返回响应给客户端。
- 本地主机接收到响应信息,解包获取请求的资源。
- 完成一次网络通信交流流程。
数据包装的过程如下:
- DNS协议启动工作,获取域名对应的IP地址。
- 应用层将数据打包成一个HTTPS协议的协议头,并交给传输层。
- 传输层基于TCP协议,将应用层的数据再打包成一个TCP头,其中包含浏览器端口和对方主机的端口,并将数据交给网络层。
- 网络层将数据打包成一个IP头,其中包含本机IP和对方主机的IP,并将包裹交给数据链路层。
- 数据链路层根据网络地址判断是外网IP,并在整个包裹上再打包一个以太网头,包含本机的MAC地址和当前局域网网关的MAC地址。
- 物理层将数据转换为二进制01数据,并通过网络传输到对方局域网的网关。经过交换机、路由系统等设备,根据IP地址找到目标主机,并根据端口号找到对应的软件,最终根据URL路径找到资源。
- 对方主机返回响应数据,按照原路返回资源。我方接收到响应资源后,完成了一次网络通信。