网络知识点

来源:互联网 发布:java this super 编辑:程序博客网 时间:2024/05/16 04:45



NSUrlConnection  Xcode7.0 以后过期.  NSUrlSession   ----->第三方: AFNetworking {3.0之前的. }

1.网络常识/基础  -------> 认识网络:七层协议/"Socket"通信模型(本地网络地址/MAC地址/IP地址/子网掩码/路由...)

2.数据解析(网络数据---> OC数据)

3.HTTP协议

4.文件上传

5.文件下载(NSUrlConnection框架)

6.NSUrlSession/AFNetworking

7.综合实战(数据时怎么来的)

8.HTML/CSS/JS...

问题:网络中传递的都是二进制数据!为什么?

网络协议:因为网络协议的"物理层"只能传递电信号:(01)

从上往下:(用户-->设备发送数据:我喜欢你!

发送信息:从上往下 接收信息:从下往上.

应用层:
{
   
规定应用程序的数据传输格式:
    {
        HTTP
协议:超文本传输协议.
       
        ftp
协议:本地文件的传输协议.
       
       
本地文件传输协议: file://
       
       
邮件协议: mailto://...
    }
}

表示层:
{
   
不同系统之间通信的问题? MAC的语法结构windows电脑的语法结构一样吗?
   
   
表示层解决了不同系统之间通信的语法问题.
}

会话层:
{
   
谁帮你接收信息?谁帮你自动寻找IP地址...
   
   
建立一套 自动的 收发信息,自动网络寻址,自动匹配端口号...
}

传输层:
{
    {
端口号:5001 信息内容:我喜欢你}
   
   
1. 信息从计算机流出或者流入计算机的最后一条路口(关口)是什么? ------- 网卡!
   
   
2. QQ ,微信,陌陌三个聊天软件,有一条聊天信息从网络中传递过来了,这个聊天信息是发送给哪一个软件(app)?
   
   
给每一个使用网卡的应用程序一个编号:---这个编号就是"端口".
    {
        QQ:
5001
       
微信:6004
       
陌陌:7005
    }
   
    {
端口号:5001 信息内容:我很喜欢你}
   
   
端口号:0 ~655350~1024是系统占用的1024~65535:自己设置端口号.(即时通信)
   
    TCP
协议:安全连接协议/三次握手协议.---应用最广泛的传输层协议.效率相比于UDP.一定能够保证接收方接受到数据.
   
    UDP
协议:报文头协议,是不安全的.只负责发送信息,不管接收方是否能够接收到.
   
   
传输层数据包
    {
        TCP
数据包:标头部分除了端口号,还有一些安全确认机制.
       
        UDP
数据包:只有端口号.
       
       
两者都包含标头(都包含双方的"端口")数据两个部分
    }
}

网络层:
{
    {
双方:IP地址{端口号:5001 信息内容:我喜欢你}}

   
网络层就是建立 "主机""主机"之间的通信.找到网络中唯一的一台计算机.
   
   
如何找到网络中唯一的一台计算机呢? IP地址.
   
   
引入一套新的地址机制:网络地址/网址/IP地址.每一台计算机都有自己唯一的IP地址.
   
    IP
地址是一个大地址:国家/城市/县区/小区
    MAC
地址:你家的门牌号
   
   
网络拓扑结构:
   
    IP
地址:IP地址来确定唯一的一台计算机
   
   
子网掩码:用来确定计算机所在的子网络.IP地址与子网掩码做""运算,得到的值就是这台计算机所在的子网络!
   
   
61.135.169.121 :百度服务器地址{百度/阿里/腾讯:服务器集群}
   
   
路由:信息在不同的子网络之间传递.
   
   
路由器/交换机:具有网络寻址功能.会帮我们寻找一条最佳的网络路径发送信息.
   
    DNS
服务器:域名解析服务器.(将域名解析成IP地址,域名是方便记忆IP地址的符号.)
   
    {
       
本机的IP地址:127.0.0.1
       
       
本机的域名: localhost (没有手动配置hosts)
       
        IP
地址:通过DHCP 协议获取的动态IP地址.
       
       
通过上面三种方式,都可以访问到自己的计算机.
       
       
每一台计算机都可以是一个服务器.(MAC系统下,自带了apache服务器)
    }
   
    IP
数据包:
    {
       
标头:包含了双方的IP地址.
       
       
数据:就是需要传递的数据.
    }
}

数据链路层:
{
    {
双方的MAC 地址 {双方:IP地址{端口号:5001 信息内容:我喜欢你}}}
   
   
0101010101011111100000101010101001----乱写的
   
   
单纯地 0 1 没有实际意思.必须将0 1 分组,并且规定解读方式.
   
   
以太网协议:规定了0 1 的解读方式,规定了"数据包"的概念:一帧数据就是一个数据包.
   
   
以太网协议是一个局域网协议.
   
   
最原始的通信依靠 MAC 地址(网卡地址).
   
以太网数据包会将数据封装
   
   
以太网数据包
    {
       
标头:通信双方的MAC 地址.
       
       
数据:需要传递的数据内容.
    }
}

物理层:两台电脑如何连接在一起?
{
    {
双方的MAC 地址 {双方:IP地址{端口号:5001 信息内容:我喜欢你}}}
    {
0101010100100010100010100010101}
   
网线/WIFI(有线/无线---> 电信号((1)(0)电平)) ,规定了网络接口类型
   
   
// 1. 物理层负责将电脑连接起来.
   
// 2. 物理层负责传递数据 0 1.
}

信息在网络中是如何传递的?
{
   
广播:在同一个子网络内,信息以广播的形式发送.
   
   
路由:信息在不同的子网络之间传递,就是路由.
}



{
   配置服务器:可以上传、分享、测试自己写的app主要的!
   
   1. 终端.control+空格键搜索
    cd /etc/apache2/ 进入apache2所在的文件目录;
   
    ls  
查看当前文件夹下的文件目录.
   
    sudo vim httpd.conf         sudo
以管理员的权限打开. vim (编辑器打开)
   
    /DocumentRoot   /
vim的查找命令. /DocumentRoot  查找DocumentRoot (Web服务器的)根路径
   
    shift + v (
选中这一行)
    y 
复制这一行
    p 
在当前行下面粘贴复制那一行.
   
    # vim 中是 注释的意思.
   
    i 
vim编辑器由命令行模式进入编辑模式
   
    esc(电脑键盘上的esc) vim 编辑器由 编辑模式 进入 命令行模式
   
   
2.
    /Options Follow 
查找这一行
   
   
Options Follow中间插入Indexes 让服务器以列表的形式呈现内容.
   
    (
配置完毕之后的样子'Options Indexes FollowSymLinks Multiviews')
   
   
   
3.
    /php 
查找php所在的那一行.
   
   
删除行首的 # .
   
    esc 
退出编辑模式.
   
    :wq 
保存并退出 vim 编辑器.
   
   
   
4. 启动服务器.
   
    {
       
1. 启动服务器
       
        sudo apachectl -k restart
       
        sudo apachectl restart
       
       
2. 关闭服务器
       
        sudo apachectl -k stop
       
        sudo apachectl stop

       
如果出现下面的提示,说明服务器配置成功:
       
    AH00558: httpd: Could not reliably determine the server
's fully qualified domain name, usingteacherdeiMac.local. Set the 'ServerName' directive globally to suppress this message
       
        httpd not running, trying to start
       
    }
   
}






学习点:
{
   
// mrc 的代码中,没有 weak,只有assign
   
// assign 修饰符号,对对象不做任何操作,只是简单的记录地址
   
// weak ARC 专有的,如果对象没有其他任何对象做强引用,会被立即释放!
   
// weak 的效率非常差!
   
// assign 会记录住地址,对象释放后,地址仍然保留,在 MRC 开发中,野指针错误非常频繁
   
// weak 安全性很好!一旦没有强引用,自动将地址设置为 nilOC中可以向nil 发送任何消息都不会报错
}




第三天:getpost区别
//网络数据缓存
网络缓存数据,保存在SQLite的数据库中(NSHomeDirectory()),

//查看缓存的数据命令行:
cd
文件目录 (打开文件目录)
ls
查看当前文件下目录
sqlite3 Cache.db
打开数据库
.tables
查看数据库中的表单
select * from cfurl_cache_response;
查看服务器响应缓存
select * from cfurl_cache_receiver_data;
查看服务器返回的数据缓存


URL:
使用注意
<
1>URL,所有的字符都必须是ASCII ;
<
2>URL中不能出现中文和特殊符号(如空格);
所以,如果URL 中出现了中文,需要添加百分号转译.

// GET/POST登陆 UI界面的搭建注意:
iphone6+
防边缘触摸
移动端应用默认应该记住密码
<
1>保存到用户偏好设置

版本管理
git

偏好设置保存用户信息

用户密码不能以明文的形式保存,需要对用户密码加密之后再保存.

加密:
<
1> base64 :iOS7.0 以后,苹果提供base64的编码解码支持.

<
2> MD5
<
1>加盐:加盐要足够长,足够复杂.
<
2>HMAC:一个结合了散列函数的加密算法;给定一个秘钥,分别作两次加密和散列.
<
3>用户密码是动态变化的. --- 时间戳密码
给定相同的加密算法和相同的密码明文,要求每次登陆的时候,密码都不一样.两个密码只要有一个相同就可以了
IP
辅助/手机绑定

<
3>钥匙串访问iOS 7.0.3以后支持AES 256 加密 是安全的.
SSKeyChain
是对底层 C语言的封装.
如果没有钥匙串访问,本地密码的保存会相当的繁琐,需要使用RSA(秘钥) & AES(加密&解密)
BundleID -------
应用程序的唯一的标识,每一个上架的应用程序,都有唯一的BundleID
获取BundleID: [NSBundle mainBundle].bundleIdentifier;

<
4>指纹识别
指纹识别:功能是5s之后推出的, SDK iOS8.0之后推出的.同时推出ApplePay
推出的目的是简化支付.移动支付环节越简单越好.

使用:
<
1>导入头文件
#import<LocalAuthentication/LocalAuthentication.h>
<2>使用

<
3>判断系统版本
当前系统版本: [UIDevice currentDevice].systemVersion.floatValue


第四天POST 增强

上传单个/多个文件

RESTfull
风格设计

JSON
序列化

模型转字典KVC,注意跟字典转模型相比较

快捷键知识点
核心动画

归档解档KVO

青花瓷加载网易新闻数据

网络模型数据,字典转模型

用运行时,字典转模型

第五天:下载文件

HEAD
方法;
指向指针的指针用法;
NULLnil 的区别.
NSNull
为了能够是数组和字典中使用空值

下载文件
NSFileHandle
// 文件句柄
NSOutputStream
// 数据流 注意删除存在的文件,防止多次下载文件越来越大

断点续传

子线程下载,运行循环.

下载回调(Block)

核心绘图,百分比显示进度条(圆圈).

下载缓存池

NSOperation







0 0
原创粉丝点击