1,概念
网络协议指的是计算机网络中互相通信的对等实体之间交换信息时所必须遵守的规则的集合。
网络上的计算机之间是如何交换信息的呢?就像我们说话用某种语言一样,在网络上的各台计算机之间也有一种语言,这就是网络协议,不同的计算机之间必须使用相同的网络协议才能进行通信。
- 负责在网络上建立通信通道和控制通过通道的信息流的规则
- 协议依赖于网络体系结构,由硬件和软件协同实现
- 网络体系结构:指通信系统的整体设计方案,是计算机之间相互通信的层次、以及各层次中的协议和层次之间接口的集合,它为网络硬件和软件、协议、存取、控制和网络图普提供标准。
本层内的沟通是通过协议 本层与上层之间的通信是通过接口
2,组成要素
(1) 语义。
语义是解释控制信息每个部分的意义。它规定了需要发出何种控制信息,以及完成的动作与做出什么样的响应。
(2) 语法。
语法是用户数据与控制信息的结构与格式,以及数据出现的顺序。
(3) 时序。
时序是对事件发生顺序的详细说明。(也可称为“同步”)。
人们形象地把这三个要素描述为:语义表示要做什么,语法表示要怎么做,时序表示做的顺序。
3,层次划分
为了使不同计算机厂家生产的计算机能够相互通信,以便在更大的范围内建立计算机网络,国际标准化组织(ISO)在1978年提出了“开放系统互联参考模型”,即著名的OSI/RM模型(Open System Interconnection/Reference Model)。它将计算机网络体系结构的通信协议划分为七层,自下而上依次为:
应用层(Application Layer)软件
表示层(Presentation Layer)
会话层(Session Layer)
传输层(Transport Layer)
网络层(Network Layer)
数据链路层(Data Link Layer)
物理层(Physics Layer)
物理层
链路层
只有物理层远远不够,0和1究竟会怎样去组合,不用的划分代表了什么意思,这就需要链路层来处理,将0和1划分为具有意义的数据帧进行传送。
一组电信号为一个数据包,一个数据包包含了标、 data、结束祯。
数据包的传输就是一块一块网卡之间的传输。
网卡的MAC地址很重要(类似人的身份证,修改不了),网卡想要知道局域网内另一个网卡的位置,要使用广播的方式。发送给本局域网内所有的网卡,网卡自己去判断要这个信息还是不要。
网络层
广播是低效的。而且局限在发送者的自网络,那么要想找到别的子网络MAC地址,就需要Internet将他们相互链接一起。网络层就出现了,让每一台主机都有一个除了MAC地址外的另外一个重要的东西:IP地址。IP地址能帮助我们确定计算机所在的子网络。
- IP地址 1-255 IPv4 23位的整数。每8位一组 2进制的8位 , 只有2的23次方个ip地址。一台机子一般通过ip和MAC地址去找另外一台机子。 IPv6
- 子网掩码:可以判断是不是需要同一个子网。
- DNS是属于应用层的,属于域名,DNS可以定位于ip。
- ARP:地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。
- IP数据包
传输层
有了以上三层就可以建立通信了,可是那些数据究竟如何给电脑里面的应用程序呢?这是就需要端口(port)
TCP/IP 是传输层协议,主要解决数据如何在网络传输;HTTP 是应用层协议,主要解决如何包装数据。
传输层可选择TCP 或UDP协议:
- TCP 是一种面向连接的、可靠的协议,可类比打电话:双方拿起电话互通身份后就建立了连接,然后说话就行了,双方说的话都保证能听到,并且是按说话的顺序听到的,说完话挂机断开连接。即TCP传输的双方需要首先建立连接,之后由TCP协议保证数据收发的可靠性,丢失的数据包自动重发,上层应用程序收到的总是可靠数据流,通讯之后关闭连接。
- UDP 协议不面向连接,也不保证可靠性,可类比寄信:写好信放到邮筒里,既不能保证信件在邮递过程中不会丢失,也不能保证信件是按顺序寄到目的地的。使用UDP协议的应用程序需要自己完成丢包重发、消息排序等工作。
会话层
会话层是建立在传输层之上,利用传输层提供的服务,是应用建立和维持绘画,并能是绘画获得同步。会话层使用检验点可使通信绘画在通信失效时从校验点继续恢复通信。
- 建立会话
- 保持会话
- 断开会话
表示层
应用层
http协议
就是软件与软件之间通信,应用层之间的通信。
http协议的原理
http请求的消息结构
- 客户端请求消息。客户端发送一个http请求消息包含一下格式:请求行,请求头,空行和请求数据四个部分
- 服务端响应消息。HTTP响应也由四个部分组成:状态行,消息报头,空行、响应报文
get请求报文
post请求报文
响应报文
get请求和post请求的区别
- get请求参数拼接在url后面;post请求是放在请求体中
- get请求参数类型不能是二进制流,内容大小1024;post可以,内容大小,2M。
- get请求可以缓存,书签,历史记录,post不可以
- get请求刷新,数据没有变无反应,post会重新发送