iOS中的网络构架

(从上层到下层依次为Cocoa\Web Kit\Core Foundation\OS\Hardware)

Cocoa (面向对象的框架集) 包含基于OC的API

Cocoa层是基于Core Foundation实现的

NSURL : 就是我们在浏览器上看到的网站的地址,是一个字符串,这个字符串比较复杂,包括很多请求数据,在请求过程中需要解析出来每个部门,所以封装一个 NSURL

Web Kit : iOS8 之后引入的新的框架,有 WKWebView 可以替换 UIKit 的 UIWebView 和 appKit 的 WebView,而且提供了两个平台可以一致使用的接口。(UIWebView 是基于移动版的 Safari,所以性能有限)

Game Kit : 是 iOS SDK 中一个常用的框架,核心功能有三个:1. 交互游戏平台(Game Center) 2. P2P设备通信功能 3. in-Game Voice

Bonjour(NSNetService) : 是 Apple 推出的零配置网络协议,主要目的是在缺少中心服务器的情况下解决网络设备的IP的获取,名称解析和服务发现等关键问题

IP 地址的获取 : 传统网络环境下,设备的IP地址通过两种方式后去,一种是静态配置,通过手工方式为设备指定一个IP地址,一种是动态配置,设备通过路由器的DHCP服务获得动态的IP地址。

每个IP可以对应多个域名,但是一个域名只能对应一个IP

Core Foundation (核心框架) 包含基于C的API

因为直接使用socket需要更多的编程工作,Apple 对OS层socket进行了简单的封装以简化编程任务

包含 CFNetwork(基于CFStream 和 CFSocket)、CFNetServices
CoreBluetooth

OS (系统)

BSD : BSD socket 提供了与远端设备、与服务器通信的完全控制能力,但是编程工作最多,Apple 建议我们使用 Core Foundation 及上层的 API 进行编程

Hardware (硬件层)

Wi-Fi Celluar(蜂窝网络) Bluetooth(蓝牙)

从上层框架到下层的移动,会获得更为严密和更大程度的控制,但是失去了上层提供的API的易用性与抽象能力。

四种常见的URL模型:文件、HTTP、HTTPS 和 FTP
SMTP : 邮件协议


抓包

(Wireshark)
目前我们主要是抓http类型的包,先过滤http的,然后通过ip进行过滤

抓包基本方法:先把Wireshark打开,然后快速在网页或是app上与服务器连接(进入网页/点击button等等),再等Wireshark有数据回来后快速点击暂停。

在搜索栏输入 http && (ip.dst == 目标ip)&&(ip.src == 源ip)


HTTP协议 (超文本传输协议)

协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则

Tim Berners-Lee于1990年创造了HTTP协议的首个版本,最初的提案中有三个重要的创新:HTML、HTTP 和 URL1. HTML 定义了向 文本添加样式 的一种方式 (传过来是什么样子的)
2. HTTP 定义了在服务端与客户端之间 传输数据 的一种方式 (怎么传)
3. URL 定义了在网络机器中 定位唯一资源 的一种方式 (东西在哪)

URL结构

schema://host[:port]/path/…/[?query-string][#anchor]
协议://主机名[:端口]/绝对路径/[?查询字符串1&查询字符串2][锚]

绝对路径和查询字符串不可以包含空格、回车与换行符,因此,URL通常使用百分号进行编码,RFC 3986(http://tools.ietf.org/html/rfc3986)规定了URL百分号编码的详细信息

HTTP请求与响应

http://www.cnblogs.com/yin-jingyu/archive/2011/08/01/2123548.html

HTTP的规范是IETF FRF 2616 http://www.ietf.org/rfc/rfc2616.txt

端口号默认是 80
中括号扩起来的东西是可选的(可写可不写)

在终端中输入 “dig + 网址” 可以查看网址的信息

Web服务器,浏览器,代理服务器

  1. 当我们打开浏览器,在地址栏中输入URL,我们的浏览器给Web服务器发送了一个Request
  2. Web服务器接到Request后进行处理,生成相应的Response,然后发送给浏览器,浏览器解析Response中的HTML,然后我们就看到了网页

代理服务器就是网络信息的中转站,它的功能:提高访问速度,大多数的代理服务器都有缓存功能;突破限制,也就是翻墙了;隐藏身份

请求内容

HTTP请求包含3部分:请求行、请求头与请求体,请求头和请求体之间有个空行

HTTP协议是无状态的

同一个客户端的这次请求和上次请求是没有对应关系,对http服务器来说,它并不知道这两个请求来自同一个客户端,当前网页和上一个网页没有联系。为了解决这个问题,Web程序引入了Cookie机制来维护状态

请求内容Request

第一行中的Method表示请求方法,比如“POST”和”GET”,创建一个请求的时候,默认的是GET请求,当使用”GET”方法的时候,body是空的,我们平时上网时使用的是”GET”,是明文传输,所有的内容都会显示,如果需要输入账号和密码等加密传输的东西时,应该使用”POST”传输。
Path-to-resource表示请求资源,Http/version-number 表示http协议的版本号,请求体必须遵循客户端与服务器之间预先确定的数据编码,对于web浏览器来说,通常是表单编码数据,对于移动数据来说,通常是 XML 或 JSON 数据
Get是向服务器发索取数据的一种请求;而Post是向服务器提交数据的一种请求,要提交的数据位于信息头后面的实体中

大多数请求头并不是必需的,但Content-Length除外。对于POST请求来说Content-Length必须出现。

响应内容Response
与请求内容的格式相同,HTTP/version-number表示HTTP协议的版本号,status code 和 message 分别是状态码和状态消息,状态码用来告诉HTTP客户端,HTTP服务器是否产生了预期的Response

TCP:传输层 IP:网络层 (需要了解TCP/IP协议站)

TCP三次握手

报文:网络传输数据的一个单元(数据块)

抓包的时候src代表数据的发送者,dst表示接收者


Cocoa层iOS HTTP API

在URL加载系统中,有3个主要方式可以执行HTTP请求和接收响应1. 同步 (线程会被阻塞)
2. 队列式异步 (创建一个队列并放入后台线程执行)
3. 异步 (调用委托方法)

所有的URL加载请求方式都会用到这4类对象
NSURL、NSURLRequest、NSURLConnection 与 NSURLResponse 对象

iOS网络构架 与 web服务器 (三次握手)相关推荐

  1. Socket网络编程--简单Web服务器(6)

    本来是想实现ssl连接的,但是弄了好久都不成功,就索性不做了,等以后有能力再做了.所以这一小节就是本次的最后一节了.就简单的说几个注意点. 1.加个配置文件 使用单例模式,使用一个类,该类保存一些信息 ...

  2. ESP8266/ESP32 网络温控器监控 Web服务器-基于温度控制输出

    ESP8266/ESP32 网络温控器监控 Web服务器-基于温度控制输出 示意图 接线图 实例代码 #ifdef ESP32#include <WiFi.h>#include & ...

  3. 网络编程知识预备(2) —— 三次握手与四次挥手、半连接状态、2MSL

    参考:网络编程知识预备(2) --三次握手与四次挥手.流量控制(滑动窗口).拥塞控制.半连接状态.2MSL_行稳方能走远的博客-CSDN博客 目录 一.三次握手 什么是三次握手? 三次握手图解 三次握 ...

  4. TinyWS —— 一个C++写的简易WEB服务器(三)

    写在前面 代码已经托管在 https://git.oschina.net/augustus/TinyWS.git 可以用git clone下来.由于我可能会偶尔做一些修改,不能保证git 库上的代码与 ...

  5. Socket网络编程--简单Web服务器(2)

    上一小节通过阅读开源的Web服务器--tinyhttpd.大概知道了一次交互的请求信息和应答信息的具体过程.接下来我就自己简单的实现一个Web服务器. 下面这个程序只是实现一个简单的框架出来.这次先实 ...

  6. Socket网络编程--简单Web服务器(3)

    上一小节已经实现了浏览器发送请求,然后服务器给出应答信息,然后浏览器显示出服务器发送过来的网页.一切看起来都是那么的美好.这一小节就准备实现可以根据地址栏url的不同来返回指定的网页.目前还不考虑带参 ...

  7. 服务器 搭建虚拟主机,server2016下搭建web服务器三种虚拟主机实验文档

    一.实验任务 网站家目录--路径 :c/inetpub/wwwroot 默认文档格式 : 查看默认文档,最常用index.html 更改文档要打开后缀显示 将唐诗网站加到自己的网站中运行 二. ...

  8. 面试必会系列 - 5.2 详解OSI模型与七层协议,网络TCP/IP基础,三次握手、四次挥手等

    本文已收录至 Github(MD-Notes),若博客中图片模糊或打不开,可以来我的 Github 仓库,包含了完整图文:https://github.com/HanquanHq/MD-Notes,涵 ...

  9. 超硬核!!!一篇文章搞定TCP、UDP、Socket、HTTP(详细网络编程内容+现实解释三次握手四次挥手+代码示例)【网络编程 1】

    TCP.UDP.Socket 一天面试的经验: 什么是网络编程 网络编程中两个主要的问题 网络协议是什么 为什么要对网络协议分层 计算机网络体系结构 1 TCP / UDP 1.1 什么是TCP/IP ...

最新文章

  1. Java和Spring中线程池创建方法
  2. Linux进程的诞生和消亡
  3. android动画放大后缩小,Android 补间动画 scale(缩放)
  4. SpringMVC 实例 --非注解【过时的,留作回忆】
  5. List对象集合的遍历、对象赋值和向前台传递
  6. java 抽象类与接口的区别及其在jdk中的应用
  7. PHP的图片等比缩放
  8. 微软官方Power Query M语言规范参考手册(Power Query M function reference)
  9. 市面主流的Web大前端框架以及特性
  10. python12306抢票_GitHub - versionzhang/python_12306: python 12306 抢票工具
  11. Delta RPMs disabled because /usr/bin/applydeltarpm not installed
  12. linux下的键盘检测
  13. 数据分析怎么学?我画了一个导图,又找到22本书
  14. An End-to-End Steel Surface Defect Detection Approach via Fusing Multiple Hierarchical Features
  15. Google Map 开发笔记——基础篇(Javascript )
  16. Linux 2.6 CFS 调度算法内幕
  17. Java开发谈:java如何开发安卓软件
  18. 保留申请的 Google Voice 号码
  19. python语言是一个优秀的面向对象语言_Python语言是面向对象的
  20. 2023学习Linux云计算可以做什么岗位的工作?

热门文章

  1. VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-SCALE IMAGE RECOGNITION-2014
  2. html input 禁止输入中文
  3. 计算机考研836科目,2017年中南财经政法大学836计算机学科基础考研初试自命题考试科目大纲...
  4. 如何让自己时刻冷静的方法_某件事让你情绪激动无法控制自己时,应该如何快速冷静下来?...
  5. 阿里云华为云七牛云 对象存储横向简单对比
  6. 计算光学成像(COI)实验室技能——matlab控制thorlabs位移平台(ActiveX控件)
  7. Java复习第11天---11.4---Java8新特性---Stream流常用方法3和综合案例
  8. [ 物联网篇 ] - MQTT协议是如何工作的 ?
  9. 简单弄得表单提示功能
  10. JVM--堆内存调优