iOS网络基础(1) — TCP、UDP、URL和HTTP

 

一、URL

【概念】NSURL

    URL Uniform Resource Locator 统一资源定位符         是资源在网路上的地址,位置,每个资源都有一个唯一的 URL

【例子】

    百度     http://www.baidu.com/     爱限免     http://iappfree.candou.com:8080/free/applications/limited?currency=rmb&page=3     比较有代表性

URL的组成】

    1.http://(协议)

        协议:规定了资源的查找和传输方式,网络连接要遵循这一协议

    2.iappfree.candou.com

        域名或者ip ,主机的地址         :8080,端口(可有可无,由服务器开端给开通,默认值是 80

    3.free/applications/limited?

        路径,以?结束         资源在主机中的位置

    4.currency=rmb&page=3

        参数,一般是服务器提出来的,规定参数字段,服务器必须认得这些参数         不能想传啥就传啥         字段名 =参数值 &(以 &号分隔多个参数)

二、HTTP

错误简历:“熟练掌握 HTTPTCP/UDPSocket等网络协议”,学完这节课你们来分析出现的问题

【概念】

httphypertext transfer protocol超文本传输协议

访问远程服务器的最常用协议、特点是简单快捷灵活 是基于请求和响应模式,基于 TCP连接的 无状态 应用层协议

HTTP协议请求:

1个完整的由客户端发给服务器的 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 // 客户端支持的数据压缩格式     请求体:客户端发给服务器的具体数据,比如文件数据 ————————————————————————————

HTTP协议响应:

1个完整的 HTTP响应中包含以下内容:     状态行:包含了 HTTP协议版本、状态码、状态英文名称     HTTP/1.1 200 OK     响应头:包含了对服务器的描述、对返回数据的描述     Server: Apache-Coyote/1.1 // 服务器的类型     Content-Type: image/jpeg // 返回数据的类型     Content-Length: 56811 // 返回数据的长度     Date: Mon, 23 Jun 2014 12:54:52 GMT // 响应的时间     实体内容:服务器返回给客户端的具体数据,比如文件数据     【请求(request)】客户端发送给服务器的数据,根据服务器的协议通知给它,让它对数据处理,筛选和分发         请求行:包含了请求方法、请求路径、 HTTP协议的版本         请求头:包含了客户端的环境描述、客户端请求的主机地址等信息         请求体:客户端发给服务端的具体数据     【响应(respond)】:服务器接收到请求后回馈响应,包括建立稳定的 TCP连接,传输数据         状态行:包含 HTTP协议版本、状态码、状态英文描述         响应头:包含了对服务器的描述,返回数据的描述         实体内容:服务器返给客户端的具体数据

其他常见协议

    https: (HTTPS协议是由 SSL(加密协议 )+HTTP协议构建的可进行加密传输、身份认证的网络协议,比 http协议安全。 )     file :(本地计算机)     ftp:(访问共享主机的资源文件)     常见的 HTTP状态码和短语         200 OK:请求成功,信息包含在返回的响应报文中。         301 Moved Permanently:请求的对象已经被永久转移了,新的 URL定义在响应报文的 Location首部行中指定。客户机可自动用新的 URL获取该对象。         400 Bad Repuest:一个通用差错代码,指示该请求不能被服务器所理解。 403  禁止访问         404 Not Found :被请求的文档不在服务器上。 505  网关错误         505 HTTP Version Not Supported :服务器不支持请求报文使用的HTTP 协议版本。         206 RANGE: bytes=2000070-             断点续传     

三、【TCP/IP

    http 是怎样连上的,靠的就是TCP

【概念】

Transmission Control Protocol 传输控制协议, 对应就有UDP  User Data Protocol 用户数据协议 TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接 : 位码即 tcp标志位 ,6种标示 : SYN(synchronous 建立联机)  ACK(acknowledgement 确认)  PSH(push 传送)  FIN(finish 结束)  RST(reset 重置)  URG(urgent 紧急) Sequence number( 顺序号码) Acknowledge number( 确认号码)

【建立连接三次握手】

第一次握手:建立连接时,客户端发送 syn(syn=j)到服务器,并进入 SYN_SEND状态,等待服务器确认;   第二次握手:服务器收到 syn包,必须确认客户的 SYNack=j+1),同时自己也发送一个 SYN包( syn=k),即 SYN+ACK包,此时服务器进入 SYN_RECV状态;   第三次握手:客户端收到服务器的 SYNACK包,向服务器发送确认包 ACK(ack=k+1),此包发送完毕,客户端和服务器进入 ESTABLISHED状态,完成三次握手。   完成三次握手,客户端与服务器开始传送数据 . syn是建立连接的请求, seq是序列号即位码,这是为了连接以后传送数据用的, ack是对收到的数据包的确认,值是等待接收的数据包的序列号。 在第一次消息发送中, A随机选取一个序列号作为自己的初始序号发送给 B;第二次消息 B使用 ackA的数据包进行确认,因为已经收到了序列号为 x的数据包,准备接收序列号为 x+1的包,所以 ack=x+1,同时 B告诉 A自己的初始序列号,就是 seq=y;第三条消息 A告诉 B收到了 B的确认消息并准备建立连接, A自己此条消息的序列号是 x+1,所以 seq=x+1,而 ack=y+1是表示 A正准备接收 B序列号为 y+1的数据包。

【断开连接要四次握手】

由于 TCP连接是全双工的,因此每个方向都必须单独进行关闭。这个原则是当一方完成它的数据发送任务后就能发送一个 FIN来终止这个方向的连接。收到一个  FIN只意味着这一方向上没有数据流动,一个 TCP连接在收到一个 FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。   ( 1)客户端 A发送一个 FIN,用来关闭客户 A到服务器 B的数据传送。 ( 2)服务器 B收到这个 FIN,它发回一个 ACK,确认序号为收到的序号加 1。和 SYN一样,一个 FIN将占用一个序号。 ( 3)服务器 B关闭与客户端 A的连接,发送一个 FIN给客户端 A。 ( 4)客户端 A发回 ACK报文确认,并将确认序号设置为收到序号加 1。 为什么建立连接协议是三次握手,而关闭连接却是四次握手呢?   这是因为服务端的 LISTEN状态下的 SOCKET当收到 SYN报文的建连请求后,它可以把 ACKSYNACK起应答作用,而 SYN起同步作用)放在一个报文里来发送。但关闭连接时,当收到对方的 FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,所以你可以未必会马上会关闭 SOCKET,也即你可能还需要发送一些数据给对方之后,再发送 FIN报文给对方来表示你同意现在可以关闭连接了,所以它这里的 ACK报文和 FIN报文多数情况下都是分开发送的 .

TCPUDP的区别】

        TCP 1.面向连接(要进行三次通信才能连上)             2. 占系统资源较多,结构稍复杂             3. 流模式             4.保证数据准确,保证数据顺序,不丢包         UDP 1.面向非连接(不需要连接,直接发, pingQQ即时通讯)             2. 占系统资源较少,结构简单             3. 数据报模式             4. 有可能数据不准、丢包

四、请求方法【GET/POST

    http使用的默认是用的是GET     (1)GET: 参数是写在 URL地址上的 ,明文传送 ,安全性低 ,而且有长度限制 (8000个字节左右 ),浏览器决定了明文 URL的长度 ,所以 get 求的长度也就受限制了     (2)POST: 参数一般是以二进制 (NSData/NSMutableData)的方式将参数传递给服务器 ,能够上传很大的数据 ,那么具体能够上传多大的数据 (后台服务器决定 ),如果在开发中发现上传数据经常失败 ,就需要确认服务器是否做了上传大小限制     建议:     (1)GET方式的安全性较 POST方式要差些,包含机密信息的话,建议用 POST数据提交方式 ;     (2)在做数据查询时,建议用 GET方式;而在做数据添加、修改或删除时,建议用 POST方式 ;     【其他常见方法】     HEAD PUT DELETE     HEAD请求 :get请求类似,但是会得到报文头的回馈,便于检测数据的传输方式和数据是损坏等信息。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值