您的位置:首页 > 理论基础 > 计算机网络

聊聊iOS中TCP / UDP 协议

2016-04-06 20:06 363 查看
TCP (Transmission Control Protocol)和UDP(User Datagram Protocol)协议属于
传输层协议。
UDP(User Datagram protocol)用户数据报协议,它只提供应用进程寻址和简单的差错检测,并不提供其他功能。
TCP(Transmission Control Protocol,传输控制协议)是面向连接的协议,也就是说,在收发数据前,必须和对方建立可靠的连接。一个TCP连接必须要经过三次“对话”才能建立起来,其中的过程非常复杂,只简单的描述下这三次对话的简单过程:主机A向主机B发出连接请求数据包:“我想给你发数据,可以吗?”,这是第一次对话;主机B向主机A发送同意连接和要求同步(同步就是两台主机一个在发送,一个在接收,协调工作)的数据包:“可以,你什么时候发?”,这是第二次对话;主机A再发出一个数据包确认主机B的要求同步:“我现在就发,你接着吧!”,这是第三次对话。三次“对话”的目的是使数据包的发送和接收同步,经过三次“对话”之后,主机A才向主机B正式发送数据。

1.上传数据是怎么和后台服务器交互的;

后台和前端的交互手段是通过网络接口来实现的.上传数据通过http请求上传,iOS9之后是https请求,需要把数据转换成data类型,然后拼接到POST请求体(body)中,通过请求数据一起发送到服务器上。
对于服务器端的返回的格式,一般使用json格式返回。它有优势,传递数据相对小,ios客户端也容易解析。至于服务器端你可以有多种选择, asp.net ,java, php 均可。

[align=left]二、两种请求方式的区别:[/align]
[align=left]1、GET请求,请求的数据会附加在URL之后,以?分割URL和传输数据,多个参数用&连接。URL的编码格式采用的是ASCII编码,而不是uniclde,即是说所有的非ASCII字符都要编码之后再传输。[/align]
[align=left]POST请求:POST请求会把请求的数据放置在HTTP请求包的包体中。上面的item=bandsaw就是实际的传输数据。[/align]
[align=left]因此,GET请求的数据会暴露在地址栏中,而POST请求则不会。[/align]
[align=left] [/align]
[align=left]2、传输数据的大小[/align]
[align=left]在HTTP规范中,没有对URL的长度和传输的数据大小进行限制。但是在实际开发过程中,对于GET,特定的浏览器和服务器对URL的长度有限制。因此,在使用GET请求时,传输数据会受到URL长度的限制。[/align]
[align=left]对于POST,由于不是URL传值,理论上是不会受限制的,但是实际上各个服务器会规定对POST提交数据大小进行限制,Apache、IIS都有各自的配置。[/align]
[align=left] [/align]
[align=left]3、安全性[/align]
POST的安全性比GET的高。这里的安全是指真正的安全,而不同于上面GET提到的安全方法中的安全,上面提到的安全仅仅是不修改服务器的数据。比如,在进行登录操作,通过GET请求,用户名和密码都会暴露再URL上,因为登录页面有可能被浏览器缓存以及其他人查看浏览器的历史记录的原因,此时的用户名和密码就很容易被他人拿到了。除此之外,GET请求提交的数据还可能会造成Cross-site
request frogery攻击
[align=center] [/align]
9、解释HTTP中Get和Post,它们有什么区别,哪个使用时更加安全?
Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE。URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的查,改,增,删4个操作。到这里,大家应该有个大概的了解了,GET一般用于获取/查询资源信息,而POST一般用于更新资源信息。
一、原理区别
1.根据HTTP规范,GET用于信息获取,而且应该是安全的和幂等的。
2.根据HTTP规范,POST表示可能修改变服务器上的资源的请求。

3、如何处理多个网络请求并发的情况

通过GCD和NSOperationQueue来控制并发
/article/5420157.html
/article/2292383.html

92.TCP和UDP的区别是什么?
TCP面向连接、传输可靠(保证数据正确性,保证数据顺序)、用于传输大量数据(流模式)、速度慢,建立连接需要开销较多(时间,系统资源)。
UDP面向非连接、传输不可靠、用于传输少量数据(数据包模式)、速度快。

82.网络通信用过哪些方式(100%的人说了AFNetworking...)如何处理多个网络请求并发的情况
1)、直接使用socket的方式
2)、AFNetworking
使用多线程中的并发队列去处理网络的并发请求。

83.在网络请求中如何提高性能
在网络请求中如何保证安全性
iOS 在数据传输过程中有数据泄露的可能,客户端在进行网络请求时一般都采用加密的方式来保证数据的安全性,在iOS9以后,苹果为了保护数据的安全性,使用了Https协议。
11、socket是什么?
(1)socket是一套完成tcp,udp协议的接口。
HTTP协议:简单对象访问协议,对应于应用层 ,HTTP协议是基于TCP连接的
tcp协议: 对应于传输层
ip协议: 对应于网络层
TCP/IP是传输层协议,主要解决数据如何在网络中传输;而HTTP是应用层协议,主要解决如何包装数据。
Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议。Socket的出现只是使得程序员更方便地使用TCP/IP协议栈而已,是对TCP/IP协议的抽象,从而形成了我们知道的一些最基本的函数接口。

http连接:http连接就是所谓的短连接,即客户端向服务器端发送一次请求,服务器端响应后连接即会断掉;
socket连接:socket连接就是所谓的长连接,理论上客户端和服务器端一旦建立起连接将不会主动断掉;但是由于各种环境因素可能会是连接断开,比如说:服务器端或客户端主机down了,网络故障,或者两者之间长时间没有数据传输,网络防火墙可能会断开该连接以释放网络资源。

(2)建立Socket连接至少需要一对套接字,套接字简单来说就是通信的两方的一种约定,用套接字中的相关函数来完成通信过程。其中一个运行于客户端,称为ClientSocket ,另一个运行于服务器端,称为ServerSocket 。
套接字之间的连接过程分为三个步骤:服务器监听,客户端请求,连接确认。
1。服务器监听:服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态,等待客户端的连接请求。
2。客户端请求:指客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。3。连接确认:当服务器端套接字监听到或者说接收到客户端套接字的连接请求时,就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,双方就正式建立连接。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。

AFHTTPRequestOperation 核心代码
与NSURLConnection对象不同,每个共享应用范围的设置如会话管理、缓存策略、Cookie存储以及URL协议等,这些NSURLSession对象都可以单独进行配置。使用特定的配置来初始化会话,它可以发送任务来获取数据,并上传或下载文件。
在AFNetworking 2.0中,使用AFHTTPRequestOperation,有可能创建一个没有额外开销的独立的网络请求来获取数据。NSURLSession则需要更多的开销,为了获得所要请求的数据。
41.AFNetworking新版本和以前版本的区别,NSURLSession使用
(1)NSURLConnection的API已废弃
弃用的类
下面的类已从AFNetworking 3.0中废弃:
• AFURLConnectionOperation
• AFHTTPRequestOperation
• AFHTTPRequestOperationManager
修改的类
下面的类包含基于NSURLConnection的API的内部实现。他们已经被使用NSURLSession重构:
• UIImageView+AFNetworking
• UIWebView+AFNetworking
• UIButton+AFNetworking
(2)AFHTTPRequestOperation 核心代码
与NSURLConnection对象不同,每个共享应用范围的设置如会话管理、缓存策略、Cookie存储以及URL协议等,这些NSURLSession对象都可以单独进行配置。使用特定的配置来初始化会话,它可以发送任务来获取数据,并上传或下载文件。
在AFNetworking 2.0中,使用AFHTTPRequestOperation,有可能创建一个没有额外开销的独立的网络请求来获取数据。NSURLSession则需要更多的开销,为了获得所要请求的数据。

(3)UIKit的迁移
图片下载已经被重构,以遵循AlamofireImage架构与新的AFImageDownloader类。这个类的图片下载职责的代理人是UIButton与UIImageView的类目,并且提供了一些方法,在必要时可以自定义。类别中,下载远程图片的实际方法没有改变。
UIWebView的类目被重构为使用AFHTTPSessionManager作为其网络请求。
UIAlertView的类目被废弃
从AFNetworking 3.0后UIAlertView的类目因过时而被废弃。并没有提供UIAlertController类目的计划,因为这是应用程序应处理的逻辑,而不是这个库。

NSURLSession使用
NSURLSession是IOS SDK提供的一组相对容易使用的网络API。它包括几个部分NSURLRequest,NSURLCache,NSURLSession,NSURLSessionConfiguration,NSURLSessionTask。

6、无网情况下,从本地数据库sqlite上拉加载时,每次取10条,如何实现?
判断网络情况,在无网络情况下,上拉加载的时候,通过谓词设置从数据库中取出数据10条数据,刷新界面。

20.http与https的区别,https的好处有哪些?
http是超⽂文本传输协议,信息是明⽂文传输,https 则是具有安全性的ssl加密传输 协议。
https相⽐比http更安全。
https协议需要到ca申请证书,⼀一般免费证书很少,需要交费。 http和https使⽤用的是完全不同的连接⽅方式⽤用的端⼜⼝口也不⼀一样,前者是80,后者是 443。
http的连接很简单,是⽆无状态的 HTTPS协议是由SSL+HTTP协议构建的可进⾏行加密传输、⾝身份认证的⽹网络协议 要⽐比http协议安全
[align=left]41.网络通信用过哪些方式(100%的人说了AFNetworking...)如何处理多个网络请求并发的情况[/align]
[align=left] [/align]
[align=left]1)、直接使用socket的方式[/align]
[align=left]2)、AFNetworking[/align]
[align=left]使用多线程中的并发队列去处理网络的并发请求[/align]
[align=left] [/align]
[align=left]42.在网络请求中如何提高性能[/align]
[align=left]在网络请求中如何保证安全性[/align]
iOS
在数据传输过程中有数据泄露的可能,客户端在进行网络请求时一般都采用加密的方式来保证数据的安全性,在iOS9以后,苹果为了保护数据的安全性,使用了Https协议。

2、加载大量图片时,如果网络较差会出现什么情况?如何处理?

可能会出现数据请求缓慢,图像加载不出来的情况 ,严重的会导致程序崩溃
处理方法:
1.做好数据缓存,程序使用时先从缓存读取,如果对应缓存没有,再请求数据。
2.控制请求次数和数据量

3、使用过哪些网络请求方式?用过哪些第三方框架,有哪些区别?
http://m.blog.csdn.net/blog/quanqinayng/22325195

http协议申明了客户端与服务端交互的方式,即请求方式:
get、post、put、delete
这四种方式可以对网络资源(url描述的内容)进行:查、改、增、删

CLLocationManager实现定位,查询并实时显示周边商户;
常用的是下面两种:
1:get方法:下行/从服务端获得数据
(1)get请求一般只是从服务器获得数据,请求时一般会提交服务器一些请求参数,附加在url上的,参数之间以&分割。
(2)url中英文和数字原样识别,而中文或者一些其他字符需要编码。
(3)get请求提交的数据一般放在http协议的头header中

2:post方法:上传/上传数据改变服务端内容
(1)post请求多用于给服务器提交数据。
(2)post请求提交的数据一般放在http的主体数据包body中

用过的第三发框架有3种,ASIHttpRequest,AFNetWorking,MKNetWork.
三种的区别:ASIHttpRequest比较臃肿,MKNetWork和AFNektwork感觉比较轻量级,本人推荐MKNetWork,比较简单

4.APP内部下载和离线下载的实现(像迅雷一样可以离线下载)
内部下载: 1. 创建NSURLSession 并 根据链接创建一个NSURLRequest
2. 开始下载
3. 在代理中接受数据并根据路径写入到文件夹下
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: