zoukankan      html  css  js  c++  java
  • 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

      

  • 相关阅读:
    1026 Table Tennis (30)
    1029 Median
    1025 PAT Ranking (25)
    1017 Queueing at Bank (25)
    1014 Waiting in Line (30)
    1057 Stack (30)
    1010 Radix (25)
    1008 Elevator (20)
    字母大小写转换
    Nmap的基础知识
  • 原文地址:https://www.cnblogs.com/guochaoboke/p/4639059.html
Copyright © 2011-2022 走看看