zoukankan      html  css  js  c++  java
  • 聊聊iOS中TCP / UDP 协议

    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.上传数据是怎么和后台server交互的。
     
    后台和前端的交互手段是通过网络接口来实现的.上传数据通过http请求上传,iOS9之后是https请求,须要把数据转换成data类型,然后拼接到POST请求体(body)中。通过请求数据一起发送到server上。
    对于server端的返回的格式,一般使用json格式返回。它有优势,传递数据相对小,iosclient也easy解析。

    至于server端你能够有多种选择, asp.net ,java, php 均可。

     
    二、两种请求方式的差别:
    1GET请求,请求的数据会附加在URL之后,以?

    切割URL和数据传输,多个參数用&连接。URL的编码格式採用的是ASCII编码,而不是uniclde。即是说全部的非ASCII字符都要编码之后再传输。

    POST请求:POST请求会把请求的数据放置在HTTP请求包的包体中。上面的item=bandsaw就是实际的数据传输。
    因此,GET请求的数据会暴露在地址栏中,而POST请求则不会。
     
    2、数据传输的大小
    HTTP规范中,没有对URL的长度和传输的数据大小进行限制。可是在实际开发过程中,对于GET,特定的浏览器和server对URL的长度有限制。

    因此,在使用GET请求时。数据传输会受到URL长度的限制。

    对于POST,因为不是URL传值,理论上是不会受限制的,可是实际上各个server会规定对POST提交数据大小进行限制。ApacheIIS都有各自的配置。
     
    3、安全性
    POST的安全性比GET的高。这里的安全是指真正的安全,而不同于上面GET提到的安全方法中的安全。上面提到的安全不过不改动server的数据。

    比方,在进行登录操作,通过GET请求,username和password都会暴露再URL上。由于登录页面有可能被浏览器缓存以及其它人查看浏览器的历史记录的原因。此时的username和password就非常easy被他人拿到了。除此之外,GET请求提交的数据还可能会造成Cross-site request frogery攻击

     
    9、解释HTTP中Get和Post,它们有什么差别,哪个使用时更加安全?
    Http定义了与server交互的不同方法。最主要的方法有4种,各自是GET,POST,PUT。DELETE。URL全称是资源描写叙述符。我们能够这样觉得:一个URL地址。它用于描写叙述一个网络上的资源,而HTTP中的GET。POST,PUT,DELETE就相应着对这个资源的查,改。增,删4个操作。到这里,大家应该有个大概的了解了,GET一般用于获取/查询资源信息。而POST一般用于更新资源信息。
    一、原理差别
    1.依据HTTP规范。GET用于信息获取,并且应该是安全的和幂等的。
    2.依据HTTP规范。POST表示可能改动变server上的资源的请求。

     
    3、怎样处理多个网络请求并发的情况
     
    通过GCD和NSOperationQueue来控制并发

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

    UDP面向非连接、传输不可靠、用于传输少量数据(数据包模式)、速度快。

     
    82.网络通信用过哪些方式(100%的人说了AFNetworking...)怎样处理多个网络请求并发的情况
    1)、直接使用socket的方式
    2)、AFNetworking
    使用多线程中的并发队列去处理网络的并发请求。
     
    83.在网络请求中怎样提高性能
    在网络请求中怎样保证安全性
     iOS  在传输数据过程中有数据泄露的可能。client在进行网络请求时一般都採用加密的方式来保证数据的安全性,在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连接就是所谓的短连接,即client向server端发送一次请求,server端响应后连接即会断掉;
    socket连接:socket连接就是所谓的长连接。理论上client和server端一旦建立起连接将不会主动断掉。可是因为各种环境因素可能会是连接断开,比方说:server端或client主机down了,网络故障,或者两者之间长时间没有传输数据,网络防火墙可能会断开该连接以释放网络资源。
     
    (2)建立Socket连接至少须要一对套接字,套接字简单来说就是通信的双方的一种约定,用套接字中的相关函数来完毕通信过程。当中一个执行于client。称为ClientSocket 。还有一个执行于server端,称为ServerSocket 。
    套接字之间的连接过程分为三个步骤:server监听。client请求,连接确认。
    1。

    server监听:server端套接字并不定位详细的client套接字。而是处于等待连接的状态。实时监控网络状态,等待client的连接请求。

    2。client请求:指client的套接字提出连接请求。要连接的目标是server端的套接字。

    为此,client的套接字必须首先描写叙述它要连接的server的套接字。指出server端套接字的地址和port号,然后就向server端套接字提出连接请求。

    3。

    连接确认:当server端套接字监听到或者说接收到client套接字的连接请求时。就响应client套接字的请求。建立一个新的线程,把server端套接字的描写叙述发给client,一旦client确认了此描写叙述,两方就正式建立连接。

    而server端套接字继续处于监听状态,继续接收其它client套接字的连接请求。

     
    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提供的一组相对easy使用的网络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的连接非常easy,是⽆无状态的 HTTPS协议是由SSL+HTTP协议构建的可进⾏行加密传输、⾝身份认证的⽹网络协议 要⽐比http协议安全
    41.网络通信用过哪些方式(100%的人说了AFNetworking...)怎样处理多个网络请求并发的情况
     
    1)、直接使用socket的方式
    2)AFNetworking
    使用多线程中的并发队列去处理网络的并发请求
     
    42.在网络请求中怎样提高性能
    在网络请求中怎样保证安全性
     iOS  在传输数据过程中有数据泄露的可能,client在进行网络请求时一般都採用加密的方式来保证数据的安全性,在iOS9以后,苹果为了保护数据的安全性,使用了Https协议。
     
     
    2、载入大量图片时。假设网络较差会出现什么情况?怎样处理?
     
    可能会出现数据请求缓慢。图像载入不出来的情况 ,严重的会导致程序崩溃
    处理方法:
    1.做好数据缓存。程序使用时先从缓存读取,假设相应缓存没有。再请求数据。
    2.控制请求次数和数据量
     
    3、使用过哪些网络请求方式?用过哪些第三方框架。有哪些差别?
     
    http协议申明了client与服务端交互的方式,即请求方式:
    get、post、put、delete
    这四种方式能够对网络资源(url描写叙述的内容)进行:查、改、增、删
     
    CLLocationManager实现定位,查询并实时显示周边商户;
    经常使用的是以下两种:
    1:get方法:下行/从服务端获得数据
        (1)get请求一般仅仅是从server获得数据。请求时通常会提交server一些请求參数。附加在url上的,參数之间以&切割。
        (2)url中英文和数字原样识别,而中文或者一些其它字符须要编码。

        (3)get请求提交的数据一般放在http协议的头header中
     
    2:post方法:上传/上传数据改变服务端内容
        (1)post请求多用于给server提交数据。
        (2)post请求提交的数据一般放在http的主体数据包body中
     
     
    用过的第三发框架有3种,ASIHttpRequest,AFNetWorking,MKNetWork.
    三种的差别:ASIHttpRequest比較臃肿,MKNetWork和AFNektwork感觉比較轻量级,本人推荐MKNetWork,比較简单
     
    4.APP内部下载和离线下载的实现(像迅雷一样能够离线下载)
    内部下载: 1. 创建NSURLSession 并 依据链接创建一个NSURLRequest
                2. 開始下载
                3. 在代理中接受数据并依据路径写入到目录下
  • 相关阅读:
    关于html5的一些知识。
    常见的http状态码总结。
    踩坑记录-安装node-sass运行报错TypeError: this.getResolve is not a function at Object.loader
    踩坑记录-!!vue-style-loader!css-loader错误
    koa-passport做登录注册验证
    nuxt项目里使用vuex状态树
    node(koa、nuxt等项目)中使用import报错问题
    koa+nodemailer实现邮箱验证注册功能
    踩坑记录-nuxt引入vuex报错store/index.js should export a method that returns a Vuex instance.
    常用shell命令积累
  • 原文地址:https://www.cnblogs.com/lxjshuju/p/7347251.html
Copyright © 2011-2022 走看看