一些网络相关

软件开发架构

客户端:用户安装的软件

服务端:统一管理数据库的主机中的软件就叫做服务端,再后来服务端不只是管理数据,外加处理业务逻辑

C/S架构

client																      server
客户端--------------------------网络传输-----------------------------------服务端
我们通常称为这种架构为C/S架构

 一些网络相关_第1张图片

C/S架构要求

  1. 用户操作系统安装客户端;产商操作系统部署服务端
  2. 每个用户需要独立安装软件、服务端升级也要每个用户升级
  面试题:数据放在服务端和客户端的利与弊?
  • 服务端统一处理有更好的安全性和稳定性而且升级比较容易,不过服务器负担就增加了。
  • 客户端将负担分配到每个用户,从而可以节约服务器资源,安全性和稳定性可能会有一定的问题,但是升级比较麻烦,每个安装的客户端程序都需要升级,另外为了节省网络资源,通过网络传输的数据应该尽量减少!

B/S架构

browser																      server
浏览器(客户端)-----------------------网络传输-------------------------------服务端
我们通常称为这种架构为B/S架构

"""本质上B/S架构也是C/S架构!!!"""

一些网络相关_第2张图片

        基于BS结构下的程序就要求解决速度问题,而速度问题的核心就是解决海量数据操作和高并发问题,网站复杂架构就是从这两个问题演变出来的。

C/S架构与B/S架构的区别

一些网络相关_第3张图片


 OSI七层协议(互联网通信协议)

        互联网的本质就是一系列的网络协议,这个协议就叫OSI协议(一系列协议),按照功能不同,分工不同,人为的分层七层。实际上这个七层是不存在的。没有这七层的概念,只是人为的划分而已。区分出来的目的只是让你明白哪一层是干什么用的。

每一层都运行不同的协议。协议是干什么的,协议就是标准。

实际上还有人把它划成五层、四层。

七层划分为:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。

五层划分为:应用层、传输层、网络层、数据链路层、物理层。

四层划分为:应用层、传输层、网络层、网络接口层。        

一些网络相关_第4张图片        

 每层运行常见的物理设备

一些网络相关_第5张图片

1 物理层

         物理层字面意思解释:物理传输、硬件、物理特性

 物理层功能:主要是基于电器特性发送高低电压(电信号),高电压对应数字1,低电压对应数字0

2 数据链路层

        数据链路层的功能:定义了电信号的分组方式

数据链路层由来:单纯的电信号0和1没有任何意义,必须规定电信号多少位一组,每组什么意思

2.1 以太网协议

        早期的时候,数据链路层就是来对电信号来做分组的。以前每个公司都有自己的分组方式,后来形成了统一的标准,即以太网协议ethernet

ethernet规定:一组电信号构成一个数据报,叫做’帧’,每一数据帧分成:报头head和数据data两部分

  • head包含:(固定18个字节)
    • 发送者/源地址,6个字节
    • 接收者/目标地址,6个字节
    • 数据类型,6个字节
  • data包含:(最短46字节,最长1500字节)
  • 数据报的具体内容:head长度+data长度=最短64字节,最长1518字节,超过最大限制就分片发送

这就像写信,发送者的地址(源地址)就是你家的地址,接收者地址(目标地址)就是对方的收信地址,你家的路由器就相当于邮局。其实在计算机通信中的源地址和目标地址指的是Mac地址。

2.2 Mac地址

                head中包含的源和目标地址由来:ethernet规定接入internet的设备都必须具备网卡,发送端和接收端的地址便是指网卡的地址,即Mac地址

  • Mac地址:每块网卡出厂时都被烧制上一个世界唯一的Mac地址,长度为48位2进制,通常由12位16进制数表示(前六位是厂商编号,后六位是流水线号)
  • 一些网络相关_第6张图片

  • 一些网络相关_第7张图片

3 网络层

        

	该层使用的是IP协议,规定每一个接入互联网的计算机都必须要有一个IP地址,网络层中的数据我们称为是数据包,IP地址的组成格式
    分类:IPv4、IPv6, 目前大多数用的都是IPv4,由于IPv4地址即将耗尽,所以,其他场景开始使用IPv6了
    IPv4:
    0.0.0.0------------------------------------->255.255.255.255
00000000.00000000.00000000.00000000    ---------->    11111111.11111111.11111111.11111111
	
    192.168开头的地址基本上都是局域网中得ip地址
    公网ip:需要购买的,阿里云、腾讯云的,人家或给你一个公网ip地址,固定的,不会变。172.0.1.200
    内网ip:192.168开头的地址基本上都是局域网中得ip地址
    
	IPv6:十六进制表示法
    """
    	如何查看自己的IP地址:
    		windows: cmd----->ipconfig
    		linux(macOS): ifconfig
    """
    # 其实通过一个IP地址它是可以定位唯一一个局域网
    """IP+Mac地址确定世界范围内的唯一一台计算机? 是的"""
    但是我们知道,现在只需要一个IP地址就能够确定唯一一台计算机,那是因为:arp协议的玩意儿,它能够通过你的IP地址计算出Mac地址,归根结底还是:IP+Mac地址
    
    记忆:本地回环地址:127.0.0.1(你自己的电脑)
    192.168.1.252 127.0.0.1  localhost (这两个有时候会有区别)

3.1 IP协议详解

        规定网络地址的协议叫IP协议,它定义的地址称之为IP地址,广泛采用的v4版本即IPv4,它规定网络地址由32位2进制表示。范围0.0.0.0-255.255.255.255

  • 一个IP地址通常写成四段十进制数,例:172.16.10.1

3.2 IP地址的两部分

  1. 网络部分:标识子网
  2. 主机部分:标识主机
  • 注意:单纯的IP地址段只是标识了IP地址的种类,从网络部分或主机部分都无法辨识一个IP所处的子网

例:172.16.10.1与172.16.10.2并不能确定二者处于同一子网

3.3 IP数据包详解

IP数据包也分为head和data部分,无须为IP包定义单独的栏位,直接放入以太网包的data部分

  • head:长度为20到60字节
  • data:最长为65,515字节

注意:以太网数据包的”数据”部分,最长只有1500字节。因此,如果IP数据包超过了1500字节,它就需要分割成几个以太网数据包,分开发送了。

有了Mac地址+IP地址,我们就能确定世界上独一无二的一台计算机。

3.4 ARP协议详解

arp协议由来

                网络层中数据往往封装在TCP/IP协议簇中,当要将一条数据精准发送给目标主机时却无法得知目标主机的切确位置,于是便出现了在网络层中,数据不知道该发往哪个地方的问题。 这时便需要用ARP协议将IP对应的MAC主机地址帮忙“找出来”

arp协议功能:广播的方式发送数据包,获取目标主机的Mac地址:

协议工作方式:每台主机IP都是已知的,例如:主机172.16.10.10/24访问172.16.10.11/24

1.首先通过IP地址和子网掩码区分出自己所处的子网

场景

数据包地址

同一子网

目标主机Mac,目标主机IP

不同子网

网关Mac,目标主机IP

2.分析172.16.10.10/24与172.16.10.11/24处于同一网络(如果不是同一网络,那么下表中目标IP为172.16.10.1,通过arp获取的是网关的Mac)

-

源Mac

目标Mac

源IP

目标IP

数据部分

发送端主机

发送端Mac

FF:FF:FF:FF:FF:FF

172.16.10.10/24

172.16.10.11/24

数据

3.这个包会以广播的方式在发送端所处的自网内传输,所有主机接收后拆开包,发现目标IP为自己的,就响应,返回自己的Mac

4 传输层

传输层功能:建立端口到端口的通信

        端口范围0-65535,0-1023为系统占用端口

传输层的由来:

        网络层的IP帮我们区分子网,以太网层的Mac帮我们找到主机,然后大家使用的都是应用程序

Mac地址:
        以太网协议规定,每一个接入互联网的设备都必须要有一个网卡,发送端和接收端的地址便是指网卡的地址,即Mac地址

        每块网卡出厂时都被烧制上一个世界唯一的Mac地址,长度为48位2进制,通常由12位16进制数表示(前六位是厂商编号,后六位是流水线号)。

        通过IP和Mac找到了一台特定的主机,如何标识这台主机上的应用程序,答案就是端口,端口即应用程序与网卡关联的编号。

通过一个Mac地址能不能确定局域网中得唯一一台计算机? 能确定

        PS: 有了Mac地址+IP地址+端口,我们就能确定世界上独一无二的一台计算机上的应用程序

5 应用层 

Application App
    该层就是离用户最近的一层,比如,微信、QQ、腾讯会议、pycharm等都是一个一个的应用,他们都在应用层
    
    1. 客户端:你想使用什么协议都行,自己开发的软件,协议你自己选择
    2. 浏览器:你就不能够随便使用了,就要安装浏览器规定的协议使用,而浏览器使用的协议恰好事HTTP协议
    3. Https协议
    	HTTP协议 HTTPS协议
        https://www.baidu.com/
        协议://域名/v1/v2?参数
        https://www.baidu.com/s?wd=%E7%BE%8E%E5%A5%B3
        
        """
        	HTTP协议
        		1. 是明文传输数据
        		2. 不安全
       		HTTPS协议
       			1. 是密文传输数据
       			2. 安全
       		https = http + ssl证书(它是需要申请的,国际机构,公钥、私钥等)
       		nginx服务器:配置文件,需要在配置文件中配置一些东西,就能够把你的http改成https
        """
   域名解析:
		DNS服务器它就是用来解析域名的,域名的本质其实就是IP地址,域名比IP地址好记,最终还是需要把域名解析成IP地址
         baidu.com				110.242.68.66
   域名的解析过程:
		1. 首先会先从本地开始解析hosts文件
    	2. 会去对应平台的域名关系表中取查询

TCP协议和UDP协议

TCP协议

TCP协议是什么 ?

        TCP( Transmission control protocol )即传输控制协议,是一种面向连接、可靠的数据传输协议,它是为了在不可靠的互联网上提供可靠的端到端字节流而专门设计的一个传输协议。

        面向连接:数据传输之前客户端和服务器端必须建立连接
        可靠的:数据传输是有序的 要对数据进行校验

  • 可靠传输,TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP数据包的长度不会超过IP数据包的长度,以确保单个TCP数据包不必再分割。

TCP三次握手和四次挥手

        为了保证客户端和服务器端的可靠连接,TCP建立连接时必须要进行三次会话,也叫TCP三次握手,进行三次握手的目的是为了确认双方的接收能力和发送能力是否正常。

TCP三次握手

  1. 客户端向服务器发送SYN包,表明客户端想要建立连接。

  2. 服务器向客户端发送ACK确认包,表示服务器已经收到SYN包。

  3. 客户端再次向服务器发送ACK确认包,表示客户端已经收到服务器的ACK包,此时连接建立成功。

TCP四次挥手

  1. 客户端向服务器发送FIN包,表明客户端想要关闭连接。

  2. 服务器向客户端发送ACK确认包,表示服务器已经收到客户端的FIN包,但是服务器还可以向客户端发送数据,所以连接还没有关闭。

  3. 服务器向客户端发送FIN包,表明服务器也想要关闭连接。

  4. 客户端向服务器发送ACK确认包,表示客户端已经收到服务器的FIN包,此时连接关闭成功。

TCP三次握手图解

一些网络相关_第8张图片

TCP四次挥手图解

 一些网络相关_第9张图片

UDP协议

  • 不可靠传输,”报头”部分一共只有8个字节,总长度不超过65,535字节,正好放进一个IP数据包。
客户端    服务端
"""客户端要想给服务端发送消息,肯定需要建立链接"""
tcp协议它也称为是可靠协议(三次握手), 流式协议(发送数据可以分多次发送 100M数据  10M 10次)
三次握手--------------------> 建立链接


四次挥手---------------------> 断开链接
"""一定是客户端先给服务端发送消息,然后,服务端给客户端做返回信息"""
# 有个个例,服务端可以先给客户端发送消息,需要使用websocket协议,一般用在即时通信软件
客服系统、微信、QQ等都是

客户端可以是多个的,服务端(饭店)只有一个

面试题:
	1. TCP协议的可靠性,是因为建立了双向通道?
    		不是。是因为TCP协议的反馈机制
    2. 四次挥手能不能省略为三次挥手?
  
UDP协议:
	它不可靠、是因为它不建立链接,没有三次握手、四次挥手
     速度快
远程控制

​

END 


你可能感兴趣的:(python)