HTTP,TCP,UDP,Socket,WebSocket - 日理万妓 2022-06-10 08:37 210阅读 0赞 <table> <thead> <tr> <th style="text-align:center">七层模型</th> <th style="text-align:center">五层模型</th> <th style="text-align:center">四层模型</th> </tr> </thead> <tbody> <tr> <td style="text-align:center">应用层</td> <td style="text-align:center"> </td> <td style="text-align:center"> </td> </tr> <tr> <td style="text-align:center">表示层</td> <td style="text-align:center">应用层</td> <td style="text-align:center">应用层</td> </tr> <tr> <td style="text-align:center">会话层</td> <td style="text-align:center"> </td> <td style="text-align:center"> </td> </tr> <tr> <td style="text-align:center">传输层</td> <td style="text-align:center">传输层</td> <td style="text-align:center">传输层</td> </tr> <tr> <td style="text-align:center">网络层</td> <td style="text-align:center">网络层</td> <td style="text-align:center">网络层</td> </tr> <tr> <td style="text-align:center">数据链路层</td> <td style="text-align:center">数据链路层</td> <td style="text-align:center">链接层/实体层</td> </tr> <tr> <td style="text-align:center">物理层</td> <td style="text-align:center">物理层</td> <td style="text-align:center"> </td> </tr> </tbody> </table> > > ### 二、这些关键词之间具体有什么联系? ### #### 1.TCP和UDP #### > TCP是面向连接的一种传输控制协议。TCP连接之后,客户端和服务器可以互相发送和接收消息,在客户端或者服务器没有主动断开之前,连接一直存在,故称为长连接。特点:连接有耗时,传输数据无大小限制,准确可靠,先发先至。 > UDP是无连接的用户数据报协议,所谓的无连接就是在传输数据之前不需要交换信息,没有握手建立连接的过程,只需要直接将对应的数据发送到指定的地址和端口就行。故UDP的特点是不稳定,速度快,可广播,一般数据包限定64KB之内,先发未必先至。 #### 2.HTTP #### > HTTP是基于TCP协议的应用,请求时需建立TCP连接,而且请求包中需要包含请求方法,URI,协议版本等信息,请求结束后断开连接,完成一次请求/响应操作。故称为短连接。 > 而HTTP/1.1中的keep-alive所保持的长连接则是为了优化每次HTTP请求中TCP连接三次握手的麻烦和资源开销,只建立一次TCP连接,多次的在这个通道上完成请求/响应操作。 > 值得一提的是,服务器无法主动给客户端推送消息。 #### 3.WebSocket #### > WebSocket也是一种协议,并且也是基于TCP协议的。具体流程是WebSocket通过HTTP先发送一个标记了 Upgrade 的请求,服务端解析后开始建立TCP连接,省去了HTTP长连接每次请求都要上传header的冗余,可以理解为WebSocket是HTTP的优化,但WebSocket不仅仅在Web应用程序上得到支持。 #### 4.Socket连接和TCP连接 #### > 其实这就是一个文字游戏而已,建立Socket连接需要至少一对Socket(套接字),而创建Socket连接可以指定不同的传输层协议,即TCP或UDP,所以当采用TCP建立连接时,该Socket连接就视为一个TCP连接。而采用UDP则是无连接的。 #### 5.Socket和WebSocket #### > 这两个虽然名字差不多,但却是两个完全不同的概念,就好比Java和JavaScript一样毫无关系。Socket是一套协议封装后的接口,用于建立Socket连接,而WebSocket虽然是Html5的产物,但也不仅仅局限于浏览器的应用程序,许多语言都提供了WebSocket的支持,比如C,C++,Python等。 #### 6.HTTP、WebSocket与TCP的关系 #### > HTTP通信过程属于“你推一下,我走一下”的方式,客户端不发请求则服务器永远无法发送数据给客户端,而WebSocket则在进行第一次HTTP请求之后,其他全部采用TCP通道进行双向通讯。所以,HTTP和WebSocket虽都是基于TCP协议,但是两者属于完全不同的两种通讯方式。 作者:Poker\_Facer 链接:http://www.jianshu.com/p/42260a2575f8 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接,连接的建立是需要 三次握手的,而释放则需要 4次挥手,所以说每个连接的建立都是需要资源消耗和时间消耗的 **长连接**: 所谓长连接,指在一个TCP连接上可以连续发送多个数据包,在TCP连接保持期间,如果没有数据包发送,需要双方发检测包以维持此连接,一般需要自己做在线维持(不发生RST包和四次挥手)。 * * 连接→数据传输→保持连接(心跳)→数据传输→保持连接(心跳)→……→关闭连接(一个TCP连接通道多个读写通信);* * 这就要求长连接在没有数据通信时,定时发送数据包(心跳),以维持连接状态; TCP保活功能,保活功能主要为服务器应用提供,服务器应用希望知道客户主机是否崩溃,从而可以代表客户使用资源。如果客户已经消失,使得服务器上保留一个半开放的连接,而服务器又在等待来自客户端的数据,则服务器将应远等待客户端的数据,保活功能就是试图在服务器端检测到这种半开放的连接。 如果一个给定的连接在两小时内没有任何的动作,则服务器就向客户发一个探测报文段,客户主机必须处于以下4个状态之一: 1. 客户主机依然正常运行,并从服务器可达。客户的TCP响应正常,而服务器也知道对方是正常的,服务器在两小时后将保活定时器复位。 2. 客户主机已经崩溃,并且关闭或者正在重新启动。在任何一种情况下,客户的TCP都没有响应。服务端将不能收到对探测的响应,并在75秒后超时。服务器总共发送10个这样的探测 ,每个间隔75秒。如果服务器没有收到一个响应,它就认为客户主机已经关闭并终止连接。 3. 客户主机崩溃并已经重新启动。服务器将收到一个对其保活探测的响应,这个响应是一个复位,使得服务器终止这个连接。 4. 客户机正常运行,但是服务器不可达,这种情况与2类似,TCP能发现的就是没有收到探查的响应。 **短连接**: 短连接是指通信双方有数据交互时,就建立一个TCP连接,数据发送完成后,则断开此TCP连接(管理起来比较简单,存在的连接都是有用的连接,不需要额外的控制手段); 连接→数据传输→关闭连接; 应用场景: 长连接多用于操作频繁(读写),点对点的通讯,而且连接数不能太多情况,。每个TCP连接都需要三步握手,这需要时间,如果每个操作都是先连接,再操作的话那么处理速度会降低很多,所以每个操作完后都不断开,次处理时直接发送数据包就OK了,不用建立TCP连接。例如:数据库的连接用长连接, 如果用短连接频繁的通信会造成socket错误,而且频繁的socket 创建也是对资源的浪费。 而像WEB网站的http服务一般都用短链接(http1.0只支持短连接,1.1keep alive 带时间,操作次数限制的长连接),因为长连接对于服务端来说会耗费一定的资源,而像WEB网站这么频繁的成千上万甚至上亿客户端的连接用短连接会更省一些资源,如果用长连接,而且同时有成千上万的用户,如果每个用户都占用一个连接的话,那可想而知吧。所以并发量大,但每个用户无需频繁操作情况下需用短连好; 在长连接中一般是没有条件能够判断读写什么时候结束,所以必须要加长度报文头。读函数先是读取报文头的长度,再根据这个长度去读相应长度的报文。 tcp协议和udp协议的差别 TCP UDP 是否连接 面向连接 面向非连接 传输可靠性 可靠 不可靠 应用场合 传输大量数据 少量数据 速度 慢 快
还没有评论,来说两句吧...