网络

作者: 学而不思则罔思而不学则殆 | 来源:发表于2016-10-18 14:27 被阅读27次

    http 请求方式

    • 通常, http 请求的方式有三分钟, GET, POST, HEAD. POST 和 GET 方法是用于数据发送的.
      PSOT: 它将发送的数据单独放在一个流中进行, 这样的好处是是数据不会出现在 URL, 相对安全.
      GET: 他将要发送的数据直添加在网址后面, 例如: www.licheng.com.cn?username="liCheng"&passWord="123456", 优点操作较为简单, 但是数据信息也暴露出来了.
      HEAD: 这个是请求资源的元数据的方法. 具体使用没有遇到过, 不做详解.

    HTTP和服务器交互的不同方法

    • URL (Uniform Resoure Locator) 全球资源定位器, 我们可以理解为描述一个网络上面的资源, 通过 GET, POST, PUT, DELETE 就是对应着对这个资源, 查, 改, 增, 删. 四个操作.
    • GET 一般用于查询/获取资源信息, POST 一般用于更新用户信息.

    socket 编程简述

    • 它是基于TCP/IP, 这个是可以连通网络上不同计算机之间通讯的管道, 把一个数据从 管道 A端口 扔出来, 那么可以从 B 端口出来 (也可以是 C, D, F...... 这些端口冒出来).管道的端口的唯一性通过俩个因素可以确定, 机器的 IP 地址和程序使用的端口号.
    • socket 可以支持数据的发送和接收, 它会定义一种称为套接字的变量, 发动数据时首先创建套接字, 然后使用该套接字的sendto等方法对准某个 IP /端口进行数据发送: 接收端也会首先创建套接字, 然后将套接字和 IP /端口号绑定在一起, 所有发向此端口的数据会被该套接字的recv等函数读出. 就像读取文件中的数据一样.
    • TCP / IP 的socket 提供三种类型的套接字:流式套接字, 数据报式套接字, 原始套接字.
      客户端编程步骤:
      1: 价值套接字库, 创建套接字 (WSASrartup()/socket)
      2: 向服务器发出链接请求 (connect())
      3: 和服务器端进行通信 (send()/recv())
      4: 关闭套接字, 关闭加载的套接字库(closeSocket()/WSACleanup)
    • 常用第三方库: Asyncsoket
      ASIHTTO代码原理, 异步请求的原理, 异步请求最大数目, 为什么只能这么多?
      ASIHTTPRequest 是一个简易使用的类库, 通过包装 CFNetwork API 来简化和服务器端的通讯, 他编写的语言是 Objective-C 能够应用于Mac OS X and iPhone 平台的应用程序.
      异步: 请求通过实践触发 -> 服务器处理 (这是浏览器仍然可以做其他事情) -> 处理完毕这个数量是可以跟 cpu 有关的, 并发性取决于cpu 的核数, 每个核只能只能同时处理一个任务, 如果按照 http 来算就是四个请求, 但是cup 是抢占式的资源, 所以一般来说并发量是要根据任务的耗时和cpu的繁忙度来计算, 4个左右只是经验值,你开10个耗时短的任务和4个耗时长的任务效率是不一样的.

    JSONKit, SBJSON, TouchJSON 和原生的区别?

    • JSONKit, SDJSON, TouchJSON (性能从左往右,越来越差)

    App需要加载大量的数据, 但是服务器卡住了怎么办.

    • 设置请求超时
    • 给用户提示请求超时
    • 根据用户操作再次请求数据

    HTTP的通信, 发送请求, 接收响应, 包含了哪些内容. OC 是怎么实现的.

    • 请求行: 包含了请求方法, 请求资源路径, HTTP协议版本
      GET/XXServer/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 // 客户端支持的数据压缩格式
      请求体:客户端发给服务器的具体数据,比如文件数据
      ◦ OC中请求NSURLRequest
    • 发送给服务器的请求包含:
      ◦ 请求行: 包含了请求方法、请求资源路径、HTTP协议版本
      ◦ 请求头: 对客户端的环境描述、客户端请求的主机地址等信息
      ◦ 请求体: 客户端发给服务器的具体数据
      ◦ 默认超时时常:60s
    • 响应:
      ◦ 状态行:包含了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 // 响应的时间
      ◦ 实体内容:服务器返回给客户端的具体数据,比如文件数据
      ◦ OC中响应用NSURLRespose:返回给客户端的回应包含:
      ▪ 状态行 : 包含了HTTP协议版本、状态码、状态英文名称
      ▪ 响应头 : 包含了对服务器的描述、对返回数据的描述
      ▪ 实体内容:服务器返回给客户端的具体二进制数据
      ▪ 常用属性: expectedContentLength (下载时返回文件的长度) , suggestedFilename(建议保存的文件名)

    http 的 post 和 get 区别联系, 实践中如何选择他们

    区别联系图

    知道 TCP / UDP 吗, 二者的区别联系,

    TCP / UDP 区别联系
    • UDP: 是用户数据报协议: 主要用在实时性要求高对质量相对较弱的地方, 当时面对高质量的路线是不容易丢包除非是一些拥堵条件, 如流媒体
    • TCP: 是传输控制协议: 是面连接的, 那么运行环境必然要求其可靠性不可丢包有良好的拥塞控制机制, 如 http ftp telnet 等

    三次握手和四次挥手

    • 三次握手的实现
      ◦ 第一次握手: 建立连接时, 客户端发送同步序列号到服务器,等待服务器确认.
      ◦ 第二次握手: 服务器收手同步序列号编号,确认也发送一个同步序列号编号+确认标示, 服务器进入接受状态.
      ◦ 第三次握手:客户端接收服务器发送的包,并像服务端发送确认标示, 随后链接成功.
      注意: 是在链接成功之后在进行数据的传输的.
    • 四次挥手
      ◦ 第一次: 客户端给服务器发送一个结束标志的报文.
      ◦ 服务器手到报文后, 像客户端发送一个确认的序列号, 同事通知自己响应的程序: 对方要求关闭程序.
      ◦ 第三次:服务器向客户端发送一个带有结束标记的报文.
      ◦ 第四次: 客户端收到报文后, 像服务器发送一个确认序号, 链接关闭.

    分析 JSON, XML 的区别, JSON, XML 解析方式的底层是怎么处理的.

    • JSON 和 XML 的区别
      ◦ 可读性: 相差不大, XML 的可读性较好
      ◦ 可扩展性: 都有比较良好的扩展性
      ◦ 编码难易程度: JSON 的要简单一些
      ◦ 解码难以成都: JSON 难度几乎没有, XML 需要考虑子节点和父节点.
      ◦ 数据体积: JSON 体积小, 速度快
      ◦ 数据交互: JSON 和 javeScript 更加方便, 更容易解析处理, 有更好的数据交互.
      ◦ 数据描述: XML 描述性比较好
      ◦ 传输的速度: JSON 的比较快.
    • JSON底层原理
      ◦ 遍历字符串中的字符串, 根据特殊的字符进行区分. 比如:"[]","{}",":".最后把字符串变成字典, 字典里面有,字典,数组,或者就是键值对.
    • XML底层的原理
      ◦ XML 解析的方式有两种: DOM 解析和 SAX 解析.
      ◦ DOM 采用建立树形结构的方式访问 XML 文档, SAX 采用的时间模型.
      ◦ DOM 把 XML 文档转化问一个包含其内容的树, 并可以对树进行遍历.
      ◦ 使用 DOM 解析器的时候需要处理整个 XML 文档, 所以对性能和内存的要求比较高.
      ◦ SAX 在解析 XML 文档的时候可以出发乙烯利的时间, 当发现给定的 tag 的时候, 他可以激活一个回调方法, 告诉该方法制定的标签已经找到.
      ◦ SAX 对内存的要求通常比较低, 因为他让开发人员来决定自己处理的 tag. 特别是当开发人员只需要处理文档中所包含的部分数据时, SAX 这种扩展能力得到了更好的提现.
      补充: 其他解析方式还有自定义二进制解析, 就是按照字节去解析, 电话会谈就是这样, 还可以是字符串之间特殊符号来接的数据, 将此数据用特殊符号可以分割成所用的数据.

    HTTP 和 SCOKET 通信的区别, SCOKET 连接相关库, TCP, UDP 的连接方法, HTTP 的几种常用方式.

    • http 是客户端用 http 协议进行请求, 发送请求时需要封装 http 请求头, 并绑定请求数据, 服务器一般有web服务器配合. http 请求方式为客户端主动发起请求, 服务端才能给响应, 一次请求完毕后就断开连接, 节省资源. 服务器不能主动给客户端响应 (除非采取 http 长连接技术). iPhone 中主要使用的类是 NSUrlConnection.
      ◦ socket 是客户端跟服务器直接使用 socket "套接字" 进行来接, 并没有规定连接之后断开, 所以客户端和服务器保持通道连接, 双方都可以主动发送数据. 一般在游戏开发中或者股票开发这种要求及时性很强嫔妾保持发送数据量比较大的场合使用. 主要使用的类是 CFSocketRef

    通信底层原理 (OSI, Open System Interconnectio, 七层模型)

    • OSI简介: OSI 采用了分层的结构化技术, 共分为七层, 物理层, 数据粘结层, 网络层, 传输层, 会话层, 表示层和应用层,
      物理层: 主要是定义物理设备标准, 比如: 网线的接口类型, 光纤的接口类型, 各种传输介质的传输速率等. 它的主要作用是传输比特流 (就是由 1, 0 转化成电流的强弱来进行传输,到达目的后再转化成 1, 0 , 也就是我们经常说的数模转换和莫属转换). 这一层的数据叫做比特.
      数据链路层: 定义了如何让格式化数据进行传输, 以及如何控制对物理介质的访问. 这一层通常还提供检测和纠正, 确保数据的可靠传输.
      网络层: 不用地理位置的网络中的俩个主机系统之间提供链接和路径选择. Internet 的发展使得从世界各个站点访问的用户大大增大, 而网络层真实管理这种链接的层.
      传输层: 定义了一些传输数据的协议和端口号 (WWW端口80等), 比如: TCP (传输控制协议, 传输效率低, 可靠性强, 用在传输可靠性要求高, 数据量大的数据), UDP (用户数据报协议, 和 TCP 恰恰相反, 用于传输可靠性要求不高, 数据量小, QQ 两天就是采用这种方式传输的). 主要是件从下层接受的数据进行分段和传输, 到达目的地址之后在进行重组. 常常吧这一层数据叫做段.
      会话层: 通过传输层 (端口号: 传输端口和接受端口) 建立数据传输的通路. 主要在你的系统之间发起会话或者接受会话请求.(设备之间相互认识可以使IP也可以是 MAC 或者是主机名)
      ◦ 表示层: 可确保一个系统的应用层发送的信息可以被另一个系统的应用层读取. 例如, PC 程序与另一台计算机进行通讯, 其中一台计算机使用扩展二一时进制交换吗 (EBCDIC), 而另一台这是用美国信息交换标准码 (ASCII) 来标示相同的字符. 如果有必要的话.表示层会通过使用一种通格式来实现多种数据格式之间的转换.
      ◦ 应用层: 是最靠近用户的OSI层. 这一层为用户的应用程序 (例如电子邮件, 文件传输和终端仿真) 提供网络服务.

    设计一套大文件(比如三百兆的视频)的下载方案

    • NSURLSession
    • 支持断点下载, 自动记录停止下载时断点的位置
    • 遵守使用NSURLSessionDownloadDelegate协议
    • 使用 NSURLSession 下载大文件, 被下载文件会被自动写入沙盒临时文件夹 tmo 中
    • 下载完毕, 通常需要将已下载文件移动其他位置 (tmp文件夹中的数据被定时删除), 通常是cache文件夹中.
    • 下载步骤
    设置下载任务task的为成员变量
    
     @property (nonatomic, strong) NSURLSessionDownloadTask *task;
    
    获取NSURLSession对象
    
    NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[[NSOperationQueue alloc] init]];
    
    初始化下载任务任务
    
    self.task = [session downloadTaskWithURL:(此处为下载文件路径URL)];
    
    实现代理方法
    
    /*每当写入数据到临时文件的时候,就会调用一次该方法,通常在该方法中获取下载进度/
    -(void)URLSession:(NSURLSession )session downloadTask: (NSURLSessionDownloadTask )downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite
    {
    
     // 计算下载进度
     CGFloat progress = 1.0 * totalBytesWritten / totalBytesExpectedToWrite;
    }
    
    /*任务终止时调用的方法,通常用于断点下载/
    -(void)URLSession:(NSURLSession )session downloadTask:(NSURLSessionDownloadTask )downloadTask didResumeAtOffset:(int64_t)fileOffset expectedTotalBytes:(int64_t)expectedTotalBytes
    {
    
     //fileOffset:下载任务中止时的偏移量
    }
    
    /*遇到错误的时候调用,error参数只能传递客户端的错误/
    -(void)URLSession:(NSURLSession )session task:(NSURLSessionTask )task didCompleteWithError:(NSError *)error
    { }
    
    /*下载完成的时候调用,需要将文件剪切到可以长期保存的文件夹中/
    -(void)URLSession:(NSURLSession )session downloadTask:(NSURLSessionDownloadTask )downloadTask didFinishDownloadingToURL:(NSURL *)location
    {
    
     //生成文件长期保存的路径
     NSString *file = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:downloadTask.response.suggestedFilename];
     //获取文件句柄
     NSFileManager *fileManager = [NSFileManager defaultManager];
     //通过文件句柄,将文件剪切到文件长期保存的路径
     [fileManager moveItemAtURL:location toURL:[NSURL fileURLWithPath:file] error:nil];
    }
    
    操作任务状态
    
    /*开始/继续下载任务/
    [self.task resume];
    
    /*暂停下载任务/
    [self.task suspend];
    

    HTTP协议的特点, 关于 HTTP 请求 GET 和 POST 的区别?

    • HTTP 协议的特点
      -HTTP 超文本传输协议, 是短连接, 是客户端主动发送请求, 服务器做出响应, 服务器响应之后断开链接.
    • HTTP是一个属于应用层面向对象的协议, HTTP有两类报文, 请求报文和响应报文.
      -HTTP请求报文: 一个 HTTP 请求报文有请求头行, 请求头, 空行和请求数据
      -HTTP响应报文: 有三个部分组成: 状态行, 消息报头, 响应正文.

    几十聊天 App 不会采用的网络传输方式

    A, UDP
    B, TCP
    C, HTTP
    D, FTP

    参考答案: D
    理由: FTP是文件传输协议, 是 File Transfer Protocol 的简称, 他的作用是用来控制互联网上面的文件的双向传输,所以不是. UDP 是面向无连接的传输层协议, 只管发, 不管收到没收到: TCP 是面向连接的, 可靠的传输层协议: HTTP 是超文本传输协议, 对于应用层. HTTP 就是基于 TCP 的.

    XMPP介绍以及优缺点

    • XMPP (Extensible Messaging and Presence Protocol), 是一种以 XML 为基础的开放式试试几十通讯协议, 是由互联网工程工作小组(IETF)通过的互联网标准. 简单的说, XMPP 就是一种协议, 一种规定. 就是说, 在网络上传东西, 要简历链接, TCP/ IP 连接, 建立后再传东西, 而 XMPP 就是规定你穿的东西的格式. XMPP 是基于XML的协议. 优点开放:
      XMPP 协议是自由, 开放, 公开的, 并且易于了解. 而且在客户端, 服务器, 组件, 源码库等方面, 都已经各自有多种实现. 标准:
      互联网工程工作小组(IETE)已经将 JAbber 的核心 XML 流协议以 XMPP 之名, 真实列为认可的试试通信及 Presence 技术. 而 XMPP 的技术规格已被定义在RFC 3920 及 RFC 3921. 任何 IM 供应商在遵循 XMPP 协议下, 都可与Google Talk 实现连接. 证实可用: 第一个 Jabber(现在XMPP)技术是Jeremie Miller 在1998 年开发的, 现在已经相当稳定: 数以百计的开发者为 XMPP 技术努力着. 今日的互联网上有数以万计的 XMPP 服务器讯做, 数百万计的冷门使用XMPP事实传讯软件.
      分散式:
      XMPP 网络的架构和点子邮件十分相似: XMPP 核心协议通信方式是先创建一个 stream, XMPP 以 TCP 传递 XML 数据流, 没有中央服务器. 任何人都可以运行自己的 XMPP 服务器, 四个人及组织能掌控他们的实时传讯体验.
      安全:
      任何 XMPP 协议的服务器可以独立与公共的 XMPP网络(列如在企业内部网), 而使用 SASL 及 TLS 等技术的可靠安全性, 已自带于核心 XMPP 技术规格中.
      可扩展:
      XML 命名空间的威力可使任何人在核心协议的基础上的定制化的功能: 为了维护通透性, 参加你的扩展由 XMPP标准基金会.
      弹性佳:XMPP除了可用在实时通讯的应用程序, 还能用在网络管理, 内容供稿, 协同工具, 文件共享, 游戏, 学那层系统监控等.
      多样性:
      用 XMPP 协议来建造以及部署时应用程序及服务的公司及开源代码计划分布在各种领域: 用 XMPP 技术开发软件, 资源及支持的来源是多样,使得你不会限于"绑架"的困境.
    • 缺点
      数据负荷太重:
      随着通常超过70%的 XMPP 协议的服务器的数据流量的存在和近 60% 的被重复转发, XMPP 协议目前拥有一个大型架空中的存在的数据提供给多个收件人. 新的议定书正在研究, 以减轻这个问题.
      没有二进制数据:
      XMPP 协议传输的方式被编码为一个单一的长的XML文件, 因此无法提供修改二进制数据. 因此, 文件传输协议一样使用外部的 HTTP. 如果不可避免, XMPP 协议还提供了带编码的文件传输的所有数据使用的Base64. 至于其他二进制数据加密会话 (encrypted conversation) 或者图形图标 (grapic icons) 以嵌入式使用相同的方法.

    相关文章

      网友评论

        本文标题:网络

        本文链接:https://www.haomeiwen.com/subject/xlxhyttx.html