计算机中的协议是什么?人类科学的发展基于的就是类比和学习,这里也可以参考类比的方式,计算机类似人,协议类似语言,而不同的场景可能需要使用不同的语言,比如暗语,手语,人类语言,动物语言等等,不同的场景采用不同的语言,同样的协议也需要这样做,因地制宜是人类的光荣传统嘛。所以呼之欲出的就是TCP/IP协议族,这是一系列协议的统称。
首先需要明白的是TCP/IP协议族是分层的,不同的层有这个层对应的协议,这个层就是实际创造协议时的一种构造思路,一大堆牛人辛苦的结晶,不必疑惑,该懂时自然懂,不该懂讲给你听你也不懂:
为什么要分层?因地制宜和化整为零永远是解决问题最好的办法,上面的四层是粗浅的划分和七层更加细致的划分,想表达的内容是一样的,大致上看就大概知道其中的缘由,这里就不细说了,下面是TCP/IP通信数据流:
通过调用不同的协议完成不同的分工,进而完成不同的计算机间的通信任务,这就是TCP/IP协议族的意义所在。从上图中就可以看出,每个层就代表了一种功能,如应用层的HTTP协议就是在应用层解析的协议,计算机中的应用只用去解析HTTP协议就可以完成通信的任务,而IP协议就是网络寻址的协议,这一部分协议就交给路由器来解析,而路由器也只需要解析IP协议就可以完成通信的任务,以此类推每个协议都自己的解析人,然后将HTTP协议最终交到应用的手里,应用解析HTTP协议再把最终的数据交给程序员的手里,程序员进行CRUD,然后就是呈现在我们面前美妙的互联网世界。
所以你知道为什么HTTP协议那么重要了吗,作为一个程序员长打交道的就是HTTP协议,所以深刻明白HTTP协议的内在刻不容缓啊兄弟们。
HyperText Transfer Protocol,缩写:HTTP
HTTP是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。HTTP是一个客户端终端(用户)和服务器端(网站)请求和应答的标准(TCP),注意HTTP协议的底层就是通过TCP来实现的。
HTTP工作的原理:HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行作为响应,响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。
HTTP协议是无状态,无连接的协议,即HTTP协议本身对请求响应不做记录,且每次只能处理一个请求。
HTTP协议采用TCP协议作为维持连接的协议,TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接,所以HTTP协议需要完成三次握手才能进行正常通信:
那为什么要四次挥手呢?还是因为TCP协议,TCP协议的通信方式规定是基于tcp协议的双方是全双工的,也就是说通信双方都可以向对方发送消息,也都可以独立关闭自己一方的通信通道,所以TCP协议决定了HTPP协议必须完成四次挥手才能保证数据完整的传输完成。你知道了吗?
参考文章:https://blog.csdn.net/zeqi1991/article/details/81582675
ok,明白了TCP/IP协议就不得不了解下Sokcet编程,我们都知道无论是BS还是CS都是通过Socket进行数据沟通的。Socket被称为套接字,起源于Linux,Socket的连接需要一对套接字。
那Socket是什么?为什么叫Socket编程?Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议。
******************划重点
TCP/IP是传输层协议,主要解决数据如何在网络中传输;而Http是应用层协议,主要解决如何包装数据。
Http连接:http连接就是所谓的短连接,及客户端向服务器发送一次请求,服务器端相应后连接即会断掉。
socket连接:socket连接及时所谓的长连接,理论上客户端和服务端一旦建立连接,则不会主动断掉;但是由于各种环境因素可能会是连接断开,比如说:服务器端或客户端主机down了,网络故障,或者两者之间长时间没有数据传输,网络防火墙可能会断开该链接已释放网络资源。所以当一个socket连接中没有数据的传输,那么为了位置连续的连接需要发送心跳消息,具体心跳消息格式是开发者自己定义的。
******************
从上面的三个知识点可以看出,TCP才是稳定数据连接的最终劳动者,而HTTP和Socket只不过是在之上又封装了一层,当然Socket也可以封装UDP:
a、SOCK_STREAM:表示面向连接的数据传输方式。数据可以准确无误地到达另一台计算机,如果损坏或丢失,可以重新发送,但效率相对较慢。常见的 http 协议就使用 SOCK_STREAM 传输数据,因为要确保数据的正确性,否则网页不能正常解析。
b、SOCK_DGRAM:表示无连接的数据传输方式。计算机只管传输数据,不作数据校验,如果数据在传输中损坏,或者没有到达另一台计算机,是没有办法补救的。也就是说,数据错了就错了,无法重传。因为 SOCK_DGRAM 所做的校验工作少,所以效率比 SOCK_STREAM 高。
参考文章:https://blog.csdn.net/weixin_41648325/article/details/79412158