Http与Socket


Http与Socket

过去一直对这两种协议的概念不太清晰,刚刚就着午休起来的困顿劲儿搜索了一下相关的概念以及两种协议之间的联系

下面对两种协议的概念、联系进行简单的阐述,以便自己以后复习、回忆

Http (Https)

hyper text transfer protocol (secure?)

超文本传输协议

其定义了该协议数据包格式的请求行、请求头、请求体、响应头....

响应码

这里顺带一提另外两种协议(格式)

XMLJSON

协议其都是将数据封装、约定成规定好的一种信息格式,发送端按照这样的格式发送信息,那么接收端就要按照这样的格式解析数据


	 milksalt 
     male 

{
    "name" : "milksalt"
    "age" : 20
}

Socket

socket是基于tcp/ip协议封装的一套实现tcp\udp连接的接口,或者说是工具。

是操作系统提供的、用来调用、实现tcp\udp连接的接口、工具

具体的格式是:**ip **: port

即ip地址:端口号

tip: 对http还不是很了解的很透彻,但只是猜测,一个url链接,是通过dns服务器解析成ip:port?然后通过socket发送给服务端? 这个dns解析器先在本地寻找解析映射、没有的话再去远程dns服务器解析。

Socket传输图解

img

其组成要素与作用:

  • 在网络传输中用于唯一标识两个端点的链接。
  • 端点:包括(ip+port)
  • 4个要素:客户端的地址、客户端的端口、服务器的地址、服务器端口。

Socket之TCP:

  • tcp是面向连接的通讯协议
  • 通过三次握手建立连接,通讯完成时要拆除连接
  • 由于TCP是面向连接的,所以只能用于端到端的通信

img

Socket之UDP:

  • UDP是面向无连接进行通讯的
  • UDP数据包括目的端口号和源端口号信息
  • 由于通讯时是不需要连接,所以可以是实现广播发送,并不局限于端到端

img

至于TCP、UDP和IP协议在传输过程中的过程(三次握手、四次挥手,报文段,数据包等各种概念、过程)需要单独的看专题文章去记忆、掌握

总结

总结一下,简单的就是下面四点

  1. 在一般的开发中,调用的各种实现所谓的http连接的api(包括java自带的httpurlconnection)其底层基本上都是调用的jdk的socket接口。
  2. socket是基于tcp/ip协议封装的一套实现tcp/udp连接的接口,或者说是工具。
  3. 基于以上两点,可以解释为什么有人会说其实http也是通过socket来实现的这种看似没有问题但又含糊不清的说法。
  4. http只是一种协议,什么请求头,请求题,响应头都是根据固定的格式制定的报文,然后,然后最终(因为可能不直接调用socket的api接口而是用的其他第三方工具,比如volley,okhttp等)都会通过socket接口将这些报文发给服务器或者客户端。