通信协议(communications protocol)是指双方实体完成通信或服务所必须遵循的规则和约定。通过通信信道和设备互连起来的多个不同地理位置的数据通信系统,要使其能协同工作实现信息交换和资源共享,它们之间必须具有共同的语言。交流什么、怎样交流及何时交流,都必须遵循某种互相都能接受的规则。这个规则就是通信协议。
https://segmentfault.com/a/1190000023565467
传输控制协议,Transmission Control Protocol。它是一种面向连接的、可靠的、基于字节流的**[传输层]通信协议**。主要解决数据如何在网络中如何传输的,是一种长连接。建立一个TCP连接需要有三次握手,而终止一个TCP连接需要有4次握手,这是由TCP的半关闭(half-close)造成的。TCP包头的最小长度为20字节。
长连接 HTTP/1.1起,默认使用长连接,在一个连接上可以连续发送多个数据包,在连接保持期间,如果没有数据包发送,需要双方发链路检测包。
连接->传输数据->保持连接 -> 传输数据-> …->直到一方关闭连接,多是客户端关闭连接。
长连接指建立SOCKET连接后不管是否使用都保持连接,但安全性较差。
短链接:连接->传输数据->关闭连接。具体就是 浏览器client发起并建立TCP连接 -> client发送HttpRequest报文 -> server接收到报文->server handle并发送HttpResponse报文给前端,发送完毕之后立即调用socket.close方法。HTTP是无状态的的短链接,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。
浏览器client -> client: httpRequest -> server -> serverHandler -> HttpResponse -> socket.close
长连接多用于操作频繁,点对点的通讯,而且连接数不能太多情况。每个TCP连接都需要三步握手,这需要时间,如果每个操作都是先连接,再操作的话那么处理速度会降低很多,所以每个操作完后都不断开,次处理时直接发送数据包就OK了,不用建立TCP连接。例如:数据库的连接用长连接, 如果用短连接频繁的通信会造成socket错误,而且频繁的socket 创建也是对资源的浪费。
像WEB网站的http服务一般都用短链接,因为长连接对于服务端来说会耗费一定的资源,而像WEB网站这么频繁的成千上万甚至上亿客户端的连接用短连接会更省一些资源,如果用长连接,而且同时有成千上万的用户,如果每个用户都占用一个连接的话,那可想而知吧。所以并发量大,但每个用户无需频繁操作情况下需用短连好。
HTTP协议的长连接和短连接,实质上是TCP协议的长连接和短连接
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DvwtOa63-1648364525742)(C:\Users\86159\AppData\Roaming\Typora\typora-user-images\image-20220313162951019.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ytBnJhFj-1648364525743)(C:\Users\86159\AppData\Roaming\Typora\typora-user-images\image-20220313163013092.png)]
UDP是User Datagram Protocol的缩写,也就是用户数据报协议。它与TCP相对应,是一种面向无连接的、不可靠的数据报传输协议,即不与对方建立连接,就直接就把数据包发送过去,因此缺乏可靠性。由于缺乏可靠性,UDP应用一般必须允许一定量的丢包、出错和复制。
UDP简单总结起来就是下面的几点:
(1) UDP是一个非连接的协议,传输数据之前源端和终端不建立连接,当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。在发送端,UDP传送数据的速度仅仅是受应用程序生成数据的速度、计算机的能力和传输带宽的限制;在接收端,UDP把每个消息段放在队列中,应用程序每次从队列中读一个消息段。
(2) 由于传输数据不建立连接,因此也就不需要维护连接状态,包括收发状态等,因此一台服务机可同时向多个客户机传输相同的消息。
(3) UDP信息包的标题很短,只有8个字节,相对于TCP的20个字节信息包的额外开销很小。
(4) 吞吐量不受拥挤控制算法的调节,只受应用软件生成数据的速率、传输带宽、源端和终端主机性能的限制。
(5)UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的链接状态表(这里面有许多参数)。
(6)UDP是面向报文的。发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付给IP层。既不拆分,也不合并,而是保留这些报文的边界,因此,应用程序需要选择合适的报文大小。
我们经常使用“ping”命令来测试两台主机之间TCP/IP通信是否正常,其实“ping”命令的原理就是向对方主机发送UDP数据包,然后对方主机确认收到数据包,如果数据包是否到达的消息及时反馈回来,那么网络就是通的。
HTTP是HyperText Transfer Protocol的缩写,也就是超文本传输协议。HTTP是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用。HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。即HTTP协议是建立在请求/响应模型上的。
HTTP协议的主要特点可概括如下:
1.支持客户/服务器模式。
2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
3.灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
4.无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
5.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
Socket是什么呢?Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,**它把复杂的TCP/IP协议族隐藏在Socket接口后面,**对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。
ICMP: 网际控制报文协议,更有效地转发IP数据报呵提高交付成功的机会
IGMP:网际组管理协议,多播路由器
TCP和UDP:传输层协议;
HTTP:应用层协议;
**SOCKET:TCP/IP网络的API。**Socket本身并不是协议,而是一个调用接口(API Socket接口定义了许多函数或例程,用以开发TCP/IP网络上的应用程序。比如create、 listen、connect、accept、send、read和write等等
TCP/IP代表传输控制协议/网际协议,指的是一系列协议。
网络由下往上分为物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。 IP 协议对应于网络层,TCP协议对应于传输层,HTTP协议对应于应用层,三者从本质上来说没有可比性,socket则是对TCP/IP协议的封装和应用。 可以说,TPC/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据
HTTPS(超文本传输安全协议)是一种互联网通信协议,可保护用户计算机与网站之间传输的数据的完整性和机密性。
使用 HTTPS 发送的数据可通过 TLS(传输层安全协议)得到保护,该协议可提供三重关键保护:
加密 - 对所交换的数据进行加密,使其免受窥探。这意味着,当用户浏览某个网站时,没有人能够“听到”其会话内容,也无法跟踪其在多个网页上的活动,或窃取其信息
数据完整性 - 只要数据在传输期间被修改或损坏(无论有意或无意),都会被检测出来。
身份验证 - 证明用户是在与目标网站进行通信,从而保护用户免遭中间人攻击并建立用户信任,进而带来其他商业效益。