今天读计算机网络自顶向下方法这本书的应用层协议Http时结合曾经做过的一个Android的项目,对Http通信有了更深入的了解,记录如下:
什么是Socket。
Socket是套接字这大家都知道,那么这个东西具体是干吗用的呢,他存在的目的是什么呢,我读完计算机网络书中的应用层协议Http后有了自己的理解,首先Http是建立在运输层TCP协议上的一个协议,Http可以通过某种手段对TCP协议进行一些参数的设置,以达到对TCP协议的不完全控制,这里说的某种手段就是Socket,其实Socket的相当于TCP对上层服务提供的一个API(程序编程接口),上层服务通过调用这个Socket接口里的函数对下层的TCP协议进行一小部分的设置,如设置TCP是否为持久链接,超时等等这些东西,由于Socket并没有提供对TCP如何进行数据传输的控制,所以Http也不可能控制TCP具体的数据传输机制。
总结:Socket是TCP提供给上层服务的一个可调用的API,上层服务通过Socket对TCP进行部分控制和设置。
什么是一个TCP连接,以及什么是持久连接什么是非持久连接
其实这一点相对来说比较简单,但是他的主要作用是承接上面的心得一,以及过度到下面的心得三
一个TCP连接对应了一对socket套接字,也可以说是对应了一个主机上的某个端口号,以发送Http请求为例,当客户定义一个HttpClient的对象httpClient时候,并执行httpClient.execute(URL url)方法时,底层的实现是Java编程中的Socket编程,也就是说底层会为这个HttpClient分配一个端口号来建立一个socket连接(也就是TCP连接),如果你对这个HttpClient进行相应的设置使得为他提供服务的下层TCP协议不是一个持久连接的话,那么当获取到HttpResponse的时候,这个TCP连接就会断开,如果你设置为持久连接,那么当你用httpClient再次执行execute方法向服务器发送请求的时候,底层使用的是同一个TCP连接,而不需要重新进行三次握手进行连接,这就是TCP持久连接和非持久连接的区别。