网络协议TCP、IP、UDP、Socket、HTTP协议关系整理

写在前面:刚开始搞wifi通信没多长时间,基本上路子都通了,由于前期对网络的知识实在匮乏,所以看代码的时候很多地方知其然,不知其所以然,所以想学习、研究、梳理一下几个协议的关系,对网络通信加深下印象,中间理解不到位的地方还请大家及时指出,QQ:993650814。

正文:

一、先贴一张网络OSI(开放式通信系统互联参考模型Open System Interconnectio)七层模型图:

   

其中:物理层、数据链路层、网络层通常称为媒体层,是网络工程师所研究的对象。

传输层、会话层、表示层和应用层称为主机层,是用户所关心的内容。

TCP和UDP属于传输层,HTTP属于应用层,IP属于网络层。

而Socket本身并不是什么协议,而是一些列调用接口(API),通过Socket,我们才能使用TCP/IP协议。

二、对标题中的协议先从概念阐述一遍,以及部分协议之间的关系理顺一下

1、IP协议(Internet Protocol):又称互联网协议,是支持网间互联的数据报(数据报是通过网络传输的数据的基本单元)协议,通过IP协议,网络层向传输层提供的是统一的IP分组,传输层不需要考虑互联网在数据链路层、物理层协议与实现技术上的差异,IP协议主要是告诉数据链路层,数据中转的方向。数据链路层只管把数据送到特定的目标地址。IP协议提供网间连接的完善功能,包括IP地址格式, IP地址不因数据链路层的改变而发生改变。一个IP包除了包含要传输的数据外,还包含源IP地址和目标IP地址,源端口和目标端口

2、TCP协议(Transmission Control Protocol,传输控制协议):是面向连接的协议,即在收发数据前,必须要和对方建立可靠的连接。一个TCP连接必须要经过三次握手才能建立起来,而断开要进行四次挥手,这里断开和连接的过程不再阐述。

3、UDP协议(User Data Protocol,用户数据报协议):UDP是一个非连接的协议,传输数据之前源端和终端不需要建立连接。使用“ping”命令来测试两台主机之间TCP/IP通信是否正常,其实“ping”命令的原理就是向对方主机发送UDP数据包,然后对方主机确认收到数据包,如果数据包是否到达的消息及时反馈回来,那么网络就是通的。

4、HTTP协议(Hypertext Transfer Protocol ,超文本传输协议):协议是建立在TCP协议之上的一种应用,HTTP连接使用的是“请求—响应”的方式,不仅在请求时需要先建立TCP连接,而且需要客户端向服务器发出请求请求中包含请求方法、URI(URL的概念和解释参考这里)、协议版本以及相关的MIME样式的消息,服务器端才能回复数据。服务器响应包含消息的协议版本、一个成功和失败码以及相关的MIME式样的消息。在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。由于HTTP在每次请求结束后都会主动释放连接,因此HTTP连接是一种“短连接”,要保持客户端程序的在线状态,需要不断地向服务器发起连接请求。通常的做法是即使不需要获得任何数据,客户端也保持每隔一段固定的时间向服务器发送一次“保持连接”的请求,服务器在收到该请求后对客户端进行回复,表明知道客户端“在线”。若服务器长时间无法收到客户端的请求,则认为客户端“下线”,若客户端长时间无法收到服务器的回复,则认为网络已经断开。

  http是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用。

5、Socket(套接字):前面说过了,Socket不属于通信协议。

Socket是应用层TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Scoket去组织数据,以符合指定的协议。

6、TCP跟UDP的比较:

(1)、双方都是一种网络传输协议;

(2)、TCP需要建立连接,而UDP不需要建立连接(无连接传输)。广播场景就依赖于UDP协议,因为UDP是无连接的;而打电话场景就依赖于TCP协议。

(3)、 TCP属于可靠的传输协议:因为传输前双方建立好了连接,相当于买卖双方建立好了交易合同,传输中一般不会出现意外,直到连接终止; 
   UDP属于不可靠的传输协议:UDP的所谓连接相当于一种映射,UDP单方面的认为目标地址(端口)是可用的,从而进行收发数据,而实际上目标地址(端口)未必可用,所以传输数据不可靠。

(4)、由于TCP需要建立真实的连接,所以需要消耗服务器的负载要大于UDP。

三、对应关系

1、从上面可以看出,TCP/IP协议族、HTTP、Socket 本质上没有可比性, 何况HTTP协议是基于TCP连接的。

     TCP/IP是传输层协议,主要解决数据如何在网络中传输;而HTTP是应用层协议,主要解决如何包装数据。

     我 们在传输数据时,可以只使用传输层(TCP/IP),但是那样的话,由于没有应用层,便无法识别数据内容,如果想要使   传  输的数据有意义,则必须使用应用层 协议,应用层协议很多,有HTTP、FTP、TELNET等等,也可以自己定义应用层协议。 WEB使用HTTP作传输层协议,以封装HTTP文本信息,然 后使用TCP/IP做传输层协议将它发送到网络上。Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议。

2、Socket与TCP:

创建Socket连接时,可以指定使用的传输层协议,Socket可以支持不同的传输层协议(TCP或UDP),当使用TCP协议进行连接时,该Socket连接就是一个TCP连接。 

3、Socket与HTTP:

由 于通常情况下Socket连接就是TCP连接,因此Socket连接一旦建立,通信双方即可开始相互发送数据内容,直到双方连接断开。

很 多情况下,需要服务器端主动向客户端推送数据,保持客户端与服务器数据的实时与同步。此时若双方建立的是Socket连接,服务器就可以直接将数据传送给 客户端;若双方建立的是HTTP连接,则服务器需要等到客户端发送一次请求后才能将数据传回给客户端,因此,客户端定时向服务器端发送连接请求,不仅可以 保持在线,同时也是在“询问”服务器是否有新的数据,如果有就将数据传给客户端。 

猜你喜欢

转载自blog.csdn.net/weixin_40204595/article/details/81806671