HTTP、TCP/IP、socket及bluetooth-socket的整理

来源:互联网 发布:怎么查看电脑ip端口 编辑:程序博客网 时间:2024/06/11 05:20

参考:http://www.2cto.com/net/201211/166537.html ,  http://blog.csdn.net/kerlw/article/details/5972079


网络OSI七层模型
1物理层(简单理解网线)-- 2数据链路层(简单理解网卡)-- 3网络层(IP协议)-- 4传输层(TCP协议)-- 5会话层-- 6表示层(HTTP)-- 7应用层(HTTP)。

TCP/IP连接
  电脑/手机能够使用联网功能是因为底层实现了TCP/IP协议,可以使终端通过网络设备(网卡)建立TCP连接。TCP协议可以对上层(传输层)网络提供接口,使上层网络数据的传输建立在“无差别(不管是有线,无线,局域网,广域网等)”的网络之上。
  在建立TCP/IP连接之前,需要进行三次确认后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。断开连接时服务器和客户端均可以主动发起断开TCP连接的请求,断开过程需要经过四次确认以保证数据正确,是正常断开连接。

HTTP连接
HTTP协议即超文本传送协议(Hypertext Transfer Protocol),是应用层的协义,是Web联网的基础,也是电脑/手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用。
HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”,请求-响应方式。
1)在HTTP 1.0中,客户端的每次请求都要求建立一次单独的连接,在处理完本次请求后,就自动释放连接。
2)在HTTP 1.1中则可以在一次连接中处理多个请求,并且多个请求可以重叠进行,不需要等待一个请求结束后再发送下一个请求。
由于HTTP在每次请求结束后都会主动释放连接,因此HTTP连接是一种“短连接”,要保持客户端程序的在线状态,需要不断地向服务器发起连接请求。通常的做法是即时不需要获得任何数据,客户端也保持每隔一段固定的时间向服务器发送一次“保持连接”的请求,服务器在收到该请求后对客户端进行回复,表明知道客户端“在线”。若服务器长时间无法收到客户端的请求,则认为客户端“下线”,若客户端长时间无法收到服务器的回复,则认为网络已经断开。大家知道浏览器是基于HTTP连接的,可以设置参数Keep-Alive使之成“长连接”。
HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTPS通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。

SOCKET套接字
套接字(socket)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息:连接使用的协议(可以是TCP或OBEX等),本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的协议端口。
建立Socket连接至少需要一对套接字,其中一个运行于客户端,称为ClientSocket ,另一个运行于服务器端,称为ServerSocket 。套接字之间的连接过程分为三个步骤:服务器监听,客户端请求,连接确认。服务器监听:服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态,等待客户端的连接请求。客户端请求:指客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。
创建Socket连接时,可以指定使用的传输层协议,Socket可以支持不同的传输层协议(TCP或UDP),当使用TCP协议进行连接时,该Socket连接就是一个TCP连接。此时socket是对TCP/IP协议的封装和应用(程序员层面上)。也可以说,TPC/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据。

BLUETOOTH-SOCKET
AndroidBluetoothSocket和普通的用于网络编程的Socket有些不同,蓝牙SOCKET传输文件是通过OBEX协议来实现的,Android只支持4中mimetype的接收,video/*,audio/*,image/*,text/plain,所以如果你要传输的文件不属于这四种mimetype,你在代码中还是要把它伪装一下,设置mimetype为其中之一,改扩展名等,否则可能传送失败。


以上仅大致理解,实际程序开发时,需更细入的学习研究。



0 0
原创粉丝点击