从websocket协议出发,了解应用层协议,传输层协议,网络的7层协议
其他关联连接 :TCP的三次握手(建立连接)和四次挥手(关闭连接)
1、websocket是全双工,不同于传统半双工通信
传统的Web应用中,浏览器与服务器交互都是半双工通信(但并不完全是半双工通信,服务器无法主动向浏览器推送)。
ps:什么是单攻,半双工,全双工
根据信息的传送方向,【串行通信】可以进一步分为单工、半双工和全双工三种。
信息只能单向传送为"单工";
信息能双向传送但不能同时双向传送称为"半双工";
信息能够同时双向传送则称为"全双工"。
ps:什么是串行通讯、并行通讯
串口通信指串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。
在串口通信中,常用的协议包括RS-、RS-422和RS-。
2、传统与websocket的连接步骤(都需要tcp三次握手)
传统Web应用中浏览器与服务器进行数据交互通常需要经过以下几个步骤:
- DNS查询
- TCP三次握手
- 传送HTTP请求头
- 传送HTTP请求体(如果有)
- 服务器处理后传送响应头
- 服务器传送响应体
- 断开TCP连接
在WebSocket中进行交互通常为以下几个步骤:
- DNS查询
- TCP三次握手
- WebSocket握手
- 浏览器发送请求
- 服务器发送响应
- 断开TCP连接
如果仅是一次通信,二者差异并不是很大,甚至WebSocket比普通方式还要多一次握手。但在需要频繁交互数据时,WebSocket的优势就显露出来了。
例如,当有10次数据交互时,前者要建立10个TCP连接(HTTP 1.0需要建立10次,HTTP 1.1可以通过长连接keep-alive复用TCP连接),然后要发送10次请求头(包含Cookie等信息,可能会达到K级别),接收的响应信息可能才几个字节(如某些心跳包),这样会极大的浪费带宽等资源。试想,如果你在做一个聊天应用,想要获取当前在线人数,你需要向服务器发送你的全部cookie(至少要几百个字节),除此之外HTTP头中还要包含其他信息,如URL、host等,这些都是必不可少的。最后服务器返回了几百个字节,但其中真正需要用到的只有不到10字节(只需要知道在线人数,其他信息都是无用的)。通过WebSocket,浏览器可以向服务器发送1~2字节的请求(不需要带上cookie验证身份,可以在握手时进行认证,一旦TCP连接建立,则在连接上的通信都是认证过身份的数据,这也是它的好处之一:便于服务端识别客户端的状态),这个请求仅包含一个特定的控制码(由开发者实现的应用层协议指定),服务器只需返回特定的返回码及数据即可,一切无用的字节都被省去。
3、websocket和http一样都是传输层协议、都是基于tcp应用层协议,ps:进阶了解网络的7层协议 OSI
原文:https://blog.csdn.net/ch1406285246/article/details/55504330
OSI(网络七层协议模型),想要联网必须遵循这个协议模型,我们的手机和电脑才可以联网通信
OSI是一个开放性的通信系统互连参考模型,他是一个定义得非常好的协议规范。OSI模型有7层结构,每层都可以有几个子层。
应用层
示例:TELNET,HTTP,FTP,NFS,SMTP等。
表示层
示例:加密,ASCII等。
会话层
示例:RPC,SQL等。
传输层
示例:TCP,UDP,SPX。
网络层
示例:IP,IPX等。
数据链路层
示例:ATM,FDDI等。
物理层
示例:Rj45,802.3等。
从websocket协议出发,了解应用层协议,传输层协议,网络的7层协议的更多相关文章
- ****** 四十二 ******、软设笔记【网络基础】-IPv6协议、常用的网络协议
一.IPv6协议 IPv6协议,全称"互联网协议第6版",即下一代的网际协议. 相对于IPv4来说,IPv6协议主要改进: *扩展的地址.IPv6地址长度为128位. *IPv6使 ...
- C#实现http协议下的多线程文件传输
用C#实现HTTP协议下的多线程文件传输转自 http://developer.51cto.com/art/201105/263066_all.htm C#(C Sharp)是微软(Microsof ...
- IC卡的传输协议(1)-字符传输协议T=0【转】
转自:http://bbs.ednchina.com/BLOG_ARTICLE_172022.HTM 在异步半双工传输协议中,主要定义了终端为实现传输控制和特殊需要发出的命令及这些命令的处理过程. 在 ...
- TCP/IP协议(5):传输层之TCP
一.TCP报文 上图为TCP报文的格式,可以看到TCP头部占20个字节,其中红色圆圈中每一项占一位,表示TCP报文的类型,置1表示该项有效. SYN表示建立连接. FIN表示关闭连接. A ...
- TCP协议是如何保证可靠传输的【经典】
参考:http://blog.csdn.net/cmm0401/article/details/77878998 从特点上我们已经知道,TCP 是可靠的但传输速度慢 ,UDP 是不可靠的但传输速度快. ...
- OSI七层模型详解 TCP/IP协议
总结 OSI中的层 功能 TCP/IP协议族 应用层 文件传输,电子邮件,文件服务,虚拟终端 TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 等等 表示层 数据格式化,代码转 ...
- 误人子弟的网络,谈谈HTTP协议中的短轮询、长轮询、长连接和短连接
引言 最近刚到公司不到一个月,正处于熟悉项目和源码的阶段,因此最近经常会看一些源码.在研究一个项目的时候,源码里面用到了HTTP的长轮询.由于之前没太接触过,因此LZ便趁着这个机会,好好了解了一下HT ...
- JAVA基础知识之网络编程——-TCP/IP协议,socket通信,服务器客户端通信demo
OSI模型分层 OSI模型是指国际标准化组织(ISO)提出的开放系统互连参考模型(Open System Interconnection Reference Model,OSI/RM),它将网络分为七 ...
- [网络技术][转]PPTP协议解析
PPTP协议大体上可以分为两部分:控制层连接和隧道,下面简要介绍两部分的功能.如果要详细了解PPTP协议请阅读RFC文档. 一. Control Connection Protol 控制层连接是基于T ...
随机推荐
- js 为url字符串添加、修改参数
//为url字符串添加.修改参数 String.prototype.EditUrlParam = function (paramName, replaceWith) { var url = this; ...
- lombok的使用以及其中的坑
1.lombok踩坑与思考 https://www.cnblogs.com/heyonggang/p/8638374.html 2.Lombok介绍.使用方法和总结 https://www.cnblo ...
- python面试题第一份
阅读目录 1 Python的函数参数传递 2 Python中的元类(metaclass) 3 @staticmethod和@classmethod 4 类变量和实例变量 5 Python自省 6 字典 ...
- TCP连接的建立(三次握手和四次挥手)
写到最后发现我描述的挺水的,这个老哥的用语比较专业一点https://blog.csdn.net/qq_38950316/article/details/81087809 (老哥这篇有些许错别字 大 ...
- CopyOnWriteArraySet 源码分析
CopyOnWriteArraySet 源码分析: 1:数据结构: private final CopyOnWriteArrayList<E> al; 内部维护的是一个CopyOnWri ...
- javascript的对象与字符串相互转换
因为对象不利于网络传输,因此要转换成字符串,转换成字符串之后又要考虑怎么将这个字符串转换回对象,以便取得对象中的属性. 常用的做法是将对象转换为JSON字符串,这里的转换方法也是用的JSON官方提供的 ...
- sql server获取格式化的当前日期
在SQL Server中获取格式化成yyyy-MM-dd的当前日期: ), ); -- 2019-06-17 首先我们知道getdate()函数是用来获取当前日期的,它返回的类型是datetime类型 ...
- FGPA异步信号问题
FPGA在处理异步信号时,尽量打1~2拍寄存器,否则在线调试会发现各种奇怪问题. 下面是verilog代码 在线调试发现,计数器在跳变 原因是cmd_start由ARM输出,与FPGA时钟异步,需要打 ...
- 利用kibana学习 elasticsearch restful api (DSL)
利用kibana学习 elasticsearch restful api (DSL) 1.了解elasticsearch基本概念Index: databaseType: tableDocument: ...
- C#4.0的十种语法糖
https://www.cnblogs.com/dotnet261010/p/6055092.html