iOS网络协议----HTTP/TCP/IP浅析

一.TCP/IP协议


       话说两台电脑要通讯就必须遵守共同的规则,就好比两个人要沟通就必须使用共同的语言一样。一个只懂英语的人,和一个只懂中文的人由于没有共同的语言(规则)就没办法沟通。两台电脑之间进行通讯所共同遵守的规则,就是网络协议。

那么谁来制定这个网络协议?

       国际标准化组织(ISO)定义了网络协议的基本框架,被称为OSI模型。要制定通讯规则,内容会很多,比如要考虑A电脑如何找到B电脑,A电脑在发送信息 给B电脑时是否需要B电脑进行反馈,A电脑传送给B电脑的数据的格式又是怎样的?内容太多太杂,所以OSI模型将这些通讯标准进行层次划分,每一层次解决 一个类别的问题,这样就使得标准的制定没那么复杂。OSI模型制定的七层标准模型,分别是:应用层,表示层,会话层,传输层,网络层,数据链路层,物理层。

       虽然国际标准化组织制定了这样一个网络协议的模型,但是实际上互联网通讯使用的网络协议是TCP/IP网络协议。

       TCP/IP 是一个协议族,也是按照层次划分。共四层:应用层,传输层,互连网络层,网络接口层。 那么TCP/IP协议和OSI模型有什么区别呢?OSI网络协议模型,是一个参考模型,而TCP/IP协议是事实上的标准。TCP/IP协议参考了OSI 模型,但是并没有严格按照OSI规定的七层去划分标准,而只划分了四层,个人觉得这样会更简单点,当划分太多层次时,你很难区分某个协议是属于哪个层次 的。TCP/IP协议和OSI模型也并不冲突,TCP/IP协议中的应用层协议,就对应于OSI中的应用层,表示层,会话层。就像以前有工业部和信息产业 部,现在实行大部制后只有工业和信息化部一个部门,但是这个部门还是要做以前两个部门一样多的事情,本质上没有多大的差别。TCP/IP中有两个重要的协 议,传输层的TCP协议和互连网络层的IP协议,因此就拿这两个协议做代表,来命名整个协议族了,在说TCP/IP协议时,是指整个协议族。

       TCP/IP协议分为四个层次,但我们并不需要了解所有层次的协议,我觉得主要关注应用层和传输层的协议就可以了。拿寄送邮件举例, A寄邮件给B,A关心的是用什么格式写什么内容给B(应用层内容),是寄挂号信还是寄平信(传输层内容),但是A是不会去关注邮件传送过程中采用了那条路 线,邮递员是如何把信件递送到B手里的(互连网络层,网络接口层)。

       先说传输层,传输层有多个协议,但最主要的是TCP和UDP协议。两则的区别在于TCP协议需要接收方反馈,UDP协议不需要接收方反馈。TCP就像挂号 信,A电脑发信息给B电脑后,需要得到B电脑的反馈,这样A电脑就能知道B电脑是否已经收到信息。UDP就像平信,A电脑发信息给B电脑后,B电脑并不给 A电脑发聩,A电脑发送信息出去后并不知道B电脑是否已经收到。 因此,TCP传输比UDP传送更可靠,但是TCP传输的效率就不如UDP了。至于,在传送过程中具体选择哪种传送方式,需要具体问题具体分析。在不可靠的 网络传送过程中一般选择TCP传送方式。在讲求效率,或者不在乎传送失误的情况下可以选择UDP方式来提高传输速率。

       应用层的协议有很多,每一个协议代表一种类型的服务。HTTP协议,万维网服务。FTP协议,文件传送服务。POP3,邮件服务,SOAP协议webService服务。

在理解TCP/IP协议的过程中,我遇到了三个困惑。

1.什么是socket?

       以前有听说过socket编程这种说法,也有的说套接字编程。我在搜索关于socket的资料时,发现有的说socket是指一个连接,有的说 socket是一指一个端点。拿打电话做比喻,A电话机和B电话机正在通话,那么socket是指的A和B之间的连接线呢,还是指电话机(端点)?

我现在的理解是,socket就是一个连接中的一个端点,一次通讯(连接)a,b端都会有一个socket。一个socket对应一个连接。

2.http协议属于应用层还是传输层?

       http 超文本传送协议,听上去像是传输层的协议一样。但事实上大家都知道http和ftp一样都是属于应用层的协议,我先前很纳闷的是,既然是应用层的协议,怎 么就取这样一个误导人的名称啊。在对TCP/IP协议还不熟悉的时候,这很容易让人误解和纳闷的。后来,我在wiki上发现这么一段话:

http中文译名问题
       HTTP 在中国大陆被翻译为“超文本传输协议”,因为“transfer”在中文里有“传输”的含意。但依据 HTTP 定制者之一的 Roy Fielding博士的论文[1](6.5.3节),作者专门强调“transfer”表示的是“(表述状态的)转移” (Representational State Transfer),而不是“传输”(transport)。故其中文译名“超文本传输协议”恰恰引种反映了这种误解。更符合原义的译名应该为“超文本转 移协议”。

       这段话解除了我的疑惑。那么http协议当然是应用层的协议。

3.SOAP可以使用HTTP协议进行传输吗?

       在了解SOAP协议的过程中,看到介绍说soap可以通过tcp,udp,http协议来传送。这也是让人困惑的描述。一看这句话,就会感觉http怎么 和tcp,udp协议并列了呢?难道http还是属于传输层的协议?再加上http中文译名的问题,名字听上去像传输层,初学者又要开始头大了。

       事实上,http是应用层的协议,这一点可以毫无怀疑。那么现在新的问题来了。soap和http都是应用层协议,怎么说soap能用http协议来传输呢?应用层的协议可以用应用层的协议传送吗?

       我查阅了资料,是这样一回事情,soap将信息进行XML的序列化后,再用http协议的方式再打包进行传送,传送的方式还是tcp或者udp。做个比喻 就好理解了。tcp 和 udp 都是公路,暂且把tcp认为是一般公路,udp高速公路,soap和http就都是汽车,那么soap和http都可以在tcp和udp上跑。说soap 可以通过http来传送,实际就是说soap是小轿车,http是装轿车的卡车,把soap的信息装到http里面,然后再运输,当然走的道路还是tcp 或udp。

       说soap可以通过http协议来传输,这句话不太准确,比较准确第说法是:soap信息可以通过http协议包装后通过tcp或udp传输。

二.HTTP协议

1.基本介绍

  URl的全称是Uniform Resource Locator (统一资源定位符)

  通过1个URL,能找到互联网上的唯一一个资源

  URL就是资源的地址/位置,互联网上的每一个资源都有一个唯一的URL

  URL的基本格式 = 协议://主机地址/路径

  http://202.108.22.5/img/不对;ogo.gif

  协议:不同的协议,代表着不同的资源查找方式/资源传输方式

  主机地址:存放资源的主机的IP地址(域名)

  路径:资源在主机中的具体位置

2.URL中常见的协议

  (1)HTTP

  超文本传输协议,访问的是远程的网络资源,格式是http://

  http协议是在网络开发中常用的协议

  (2) file

  访问的是本地计算机上的资源,格式是file://(不用加主机地址)

  (3)mailto

  访问的是电子邮件地址,格式是mailto

  (4)FTP

  访问的是共享朱记得文件资源,格式是ftp://

二.HTTP协议

1.HTTP协议简介

  不管是移动客户端还是PC端,访问远程的网络资源经常使用HTTP协议

  访问百度主页:http://baidu.com

  获取新浪微博数据

  获得大众点评团购数据

2.HTTP协议的作用

  THHP的全称是Hypertext Transfer Protocol,超文本传输协议

  (1)规定客户端和服务器之间数据传输格式

  (2)让客户端和服务器能有效的进行数据沟通

3.为什么选择使用HTTP?

  (1)因为简单快速 因为HTTP协议金丹,所以HTTP服务器的程序规模小,因而通信速度很快

  (2)灵活 HTTP允许传输任何类型的数据

  (3)HTTP 0.9和1.0使用非持续性传输 限制每次连接至处理一个请求,服务器对客户端的请求做出响应后,马上断开连接,这种方式可以节省传输时间

4.HTTP的通信过程

  想要使用HTTP协议向服务器传输数据,得先了解HTTP通信的完整过程

  主要分为两步骤

  (1)请求:客户端向服务器发送请求

  (2)响应:服务器返回客户端相应的数据请求

三.HTTP通信过程-请求和响应

1.HTTP通信过程-请求

  HTTP协议规定:一个完整的有客户端发送给服务器HTTP请求中包含以下内容

  请求行:包含了请求方法/请求资源路径/HTTP协议版本

  GET /MJServer/resources/images/1.jpg HTTP/1.1

  请求头:包含了对客户端的环境描述/客户端请求主机地址等信息

  Host: 192.168.1.105:8080 // 客户端想访问的服务器主机地址

  User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9) Firefox/30.0// 客户端的类型,客户端的软件环境

  Accept: text/html, */*// 客户端所能接收的数据类型

  Accept-Language: zh-cn // 客户端的语言环境

  Accept-Encoding: gzip // 客户端支持的数据压缩格式
  请求体:客户端发给服务器的具体数据,比如文件数据

  2.HTTP通信过程 - 响应

  客户端向服务器发送请求,服务器响应当做出响应,即返回数据给客户端

  HTTP协议规定:一个完整的HTTP响应中包含以下内容:

  状态行:包括了HTTP协议版本,状态吗,状态英文名称

  HTTP/1.1200 OK

  响应头:包含了对服务器的描述/对返回数据的描述

  Server: Apache-Coyote/1.1 // 服务器的类型

  Content-Type: image/jpeg // 返回数据的类型

  Content-Length: 56811 // 返回数据的长度

  Date: Mon, 23 Jun 2014 12:54:52 GMT // 响应的时间

  实体内容:服务器返回给客户端具体数据,比如文件数据

  3.补充:推荐工具firebug-1.12.5-fx.xpi

  虫子的作用:拦截所有的http请求  

  4.常见的响应状态码

  200:OK:请求成功

  400:Bad Request:客户端请求语法错误 服务器无法解析

  404:NotFound 服务器无法根据客户端的请求找到资源

  500:Internal Server Error :服务器内部错误,无法完成请求

四.发送HTTP请求的方法

1.简单说明

  在HTTP/1.1协议中,定义了巴中发送http请求的方法

  GET/POST/OPIONS/HEAD/PUT/DELETE/TRACE/CONNECT/PATCH

  根据HTTP协议的设计初衷,不同的放大对资源又不提欧诺个的操作方式

  PUT:增

  DEKETE:删

  POST:改

  GET:查

提示:最常用的GET和POST(市级上GET合POST都能办到增删改查)

  GET 和 POST请求

  GET请求,将参数直接写在访问路径上。操作简单,不过容易被外界看到,安全性不高,地址最多255字节;

  POST请求,将参数放到body里面。POST请求操作相对复杂,需要将参数和地址分开,不过安全性高,参数放在body里面,不易被捕获。

2.get和post请求

  要想使用GET和POST请求跟服务器进行交互,得先了解一个概念:参数就是传递给服务器的具体数据,比如登陆时的账号/密码

  GET和POST对比:GET和POST的主要区别表现在数据传递上

  

  http://blog.csdn.net/heyddo/article/details/37561005

  

posted @ 2015-07-14 20:18  应有梦  阅读(1892)  评论(0编辑  收藏  举报