计算机网络,基本上可以抽象是端的通信。实际在通讯中会用到不同的设备,不同的硬件中,为了能友好的传输信息,那么建立一套规范就十分必要了。先来了解一些基本概念
了解网络中传输的都是二进制数据流. 2.了解网络编程概念.
认识网络:
// 网络概念
<1> 经常见到的: 网卡/网线/IP地址/子网掩码/路由地址/DNS服务器地址 作用?
// <2> 容易忽略的:MAC地址/数据/数据包
// <3> 网络编程的概念:客户端/服务器/请求/响应/数据流
// 网络是数据交互的媒介,我们通过网络得到服务器上的数据,也是通过网络给服务器传递数据.
// 也就是说,网络的实质,是交互数据.
0.移动网络应用 = 良好的UI + 良好的用户体验 + 实时更新的数据
1.网络是应用的灵魂,是所有应用的数据来源.离开了网络,我们的应用就是一潭死水.
网络编程概念:
<1>客户端(Client):移动设备(手机/iPad等手持设备).
客户端一般就是前端/前台等等.iOS,android开发都是前端开发.
<2>服务器(Server):为客户端提供服务(比如数据/资源等)的机器---本质也是一台计算机(+服务器软件).
服务器开发就是后端/后台开发.java/php/.net等.
<3>请求(Request):客户端向服务器索取数据.
<4>响应(Response):服务器对客户端请求做出的反应,一般就是返回数据给客户端.
服务器:按开发阶段来分,分为两种:
远程服务器: 外网服务器.应用上线之后供全体用户使用的服务器.速度取决于用户的网速和服务器的性能.
本地服务器: 内网服务器,测试服务器.开发测试阶段使用的服务器.供内部开发测试人员使用.速度飞快.
2.网络中传输的都是二进制数据流. html/图片/视频数据...
二进制数据流是如何被分组并传输的呢?
接下来了解一下概念socket(插座/套接字) :通信模型 不属于七层协议.在 unix 系统中 规定: "主机" + "端口" 就叫做 socket.
所有的网络开发,基本都是基于socket来做的.最简单/最常见的 socket ---> TCP/IP
"七层协议"
网络是分层的.
物理层:
两台计算机如何建立通信?
——>1.将计算机连接起来;2.负责传递信息。电信号(高(1)低(0)传输0和1)
定义很多规范:设备传输速率/接口规范
数据链路层
给数据分组(将0和1分组),规定数据的解读方式,规定一组数据就是一帧,——数据包。
以太网协议:(局域网协议,)规定数据的分组方式,(现在几乎大部分的分组)
网路层:主要建立“主机”和”到主机”之间的通信。
如何找到网络中唯一的一台计算机?————>
网络层引入一套地址机制,网络地址/网址/IP地址。
子网掩码分为两个部分:网络部分,主机部分
子网掩码和IP地址配合使用,确定当前计算机所在的子网络。
路由:信息如在不同的子网络传递,就叫做路由。
路由器:寻找一条最佳路径,在两个不同的子网络之间传递信息。
如何确定网络中传输的信息是发送给计算机中的一个应用程序?
网卡:每一个使用网络应用程序,信息都要经过网卡来进行传输。
传输层:主要建立端口到端口之间的通信,应用程序之间的通信
给每一个使用网卡的应用程序分配了一个编号,一般称之为“端口”号。端口号:0…~65535 0~1024系统保留端口号 。80 http
会话层:
建立一套自动的收发信息机制(建立在应用程序和应用程序之间)
表示层:解决不同系统之间通信的语法问题
应用层:规定了我们数据的传输格式
如http:协议 file; 邮件协议:ftp协议等
规定了数据的格式:
数据包:
两个部分:
标头部分:接收方和发送方 的MAc地址 :18字节
数据部分包含传输的信息:1500个字节
网络层;IP数据包 IP数据包的部分恰好能够放下一个,传输层数据包
表头:接收方和发送方的接收地址,数据部分:数据
数据包嵌套:上层数据包嵌套在下层数据包的数据部分,变动上层数据包,不会影响下层数据包的结构
网络在处理数据时候,会先处理IP数据包,再处理以太网数据包。
传输层:
端口号: 0 ~ 65535. 0~1024 保留的端口号. 80
给每一个使用网卡的应用程序分配了一个编号.这个编号,一般称之为 "端口" 号
在传输信息的时候,附件端口号.
传输层:主要建立"端口" 到 "端口"之间的通信.应用程序之间的通信.
TCP:安全协议,三次握手协议 ,传输效率不高
UDP:报文头协议,只负责将信息传递出去,不管接收方是否接收到信息。
应用层:
应用层数据包,就是我们传递的网络数据.将应用层数据包封装在传输层的数据部分.
————————————————————————————————————————————————————————————————————————————
总结起来.:1理解网络 2.理解七层协议/五层模型 3.理解Socket.
{
应用层: 规定"应用程序"的数据格式. http / ftp /email 等. //纸条上写的是啥?
传输层: 建立"端口"到"端口"之间的通信. UDP/TCP 协议."端口". //我们帮你传纸条
网络层: 确定每一台计算机的位置,建立"主机"到"主机"之间的通信.IPv4协议,"IP地址". // 女孩的位置
数据链路层: 确定1和0的分组方式.以太网协议:一组电信号就是一个数据包."MAC地址"/网卡/广播. // 深情告白
物理层: 将电脑连接入网络,传输电信号1和0. // 一张白纸
互联网分层结构的好处:
上层的变动完全不影响下层的结构.
Socket : "主机 + 端口"就是"Socket(套接字/插座)" ----- TCP/IP协议
}
—————————————————————————————————————————————————————————————————————————————
重点:1.理解数据包. 2.理解网络通信实质.
{
网络通信的基础: 知道对方的MAC地址和IP地址.
网络通信的实质: 互相交换数据包.
数据包:
每一个数据包都包含 "标头"和"数据"两个部分."标头"包含本数据包的一些说明."数据"则是本数据包的内容.
以太网数据包: 最基础的数据包.标头部分包含了通信双方的MAC地址,数据类型等. ‘标头‘长度:18字节,‘数据‘部分长度:46~1500字节.
IP数据包: 标头部分包含通信双方的IP地址,协议版本,长度等信息. ‘标头‘长度:20~60字节,"数据包"总长度最大为65535字节.
TCP/UDP数据包:标头部分包含双方的发出端口和接收端口. UDP数据包:‘标头‘长度:8个字节,"数据包"总长度最大为65535字节,正好放进一个IP数据包. TCP数据包:理论上没有长度限制,但是,为了保证网络传输效率,通常不会超过IP数据长度,确保单个包不会被分割.
应用程序数据包: 标头部分规定应用程序的数据格式.数据部分传输具体的数据内容.
嵌套:
数据包层层嵌套,上一层数据包嵌套在下一层数据包的数据部分.最后通通由以太网数据包来进行数据传递.
分包/拆包:
一般传递的数据都比较大,会将数据包分割成很多个部分来传递.
拼包:
将接收到数据包按序号拼接起来,组成完整的数据包.
/*---------------------------------- 网络基础: 4.IP地址 ----------------------------------*/
重点:了解IP地址.
{
静态IP地址:
固定不变的IP地址,需要用户自己手动设置.
动态IP地址:
通过DHCP协议自动生成的IP地址.
DHCP协议:
通过DHCP协议,用户获得本机的动态IP地址,子网掩码,网关,DNS服务器等.
子网掩码:
与IP地址配合使用判断两台计算机是否位于同一个子网络.
DNS服务器:
可以将域名(网址)转换成IP地址.
}
/*---------------------------------- 网络基础: 4.一个HTTP请求 --------------------------------*/
重点:了解一个HTTP请求的完整过程.
{
对之前所学内容的一个系统的演示.
1. URL(Uniform Resource Locator):
统一资源定位符.URL就是资源的地址,位置.通过一个URL能够找到互联网上唯一的一个资源.
URL的基本格式: 协议://主机地址/路径
协议:不同的协议代表不同的资源查找方式,资源传输方式.
{
URL中的常见协议:
<1>HTTP:超文本传输协议,在网络开发中最常用的协议.访问的是远程的网络资源.格式:http://...
<2>file:访问的时本地计算机上的资源.格式:file://(不要再加主机地址了)
<3>FTP:访问的是共享主机的文件资源.格式:ftp://
<4>mailto:访问的是电子邮件地址.格式:mailto:
}
主机地址:存放资源的主机IP地址(域名).
路径:资源在主机中得具体位置.
2. HTTP请求的完整过程:
<1> 请求: 客户端发出请求.向服务器索要数据(操作数据).
<2> 响应: 服务器对客户端的请求做出响应.返回客户端所需要的数据.
3. 包装一个HTTP请求
用 NSURLRequest 来包装一个HTTP请求.可以指定缓存策略和超时时间.
1> 缓存策略的选择:NSURLRequestCachePolicy
{
NSURLRequestUseProtocolCachePolicy = 0,
// 默认的缓存策略,使用协议定义.
NSURLRequestReloadIgnoringLocalCacheData = 1,
// 忽略本地缓存,直接从原始服务器地址下载.
NSURLRequestReturnCacheDataElseLoad = 2,
// 只有在缓存中不存在数据时,才从原始地址下载
NSURLRequestReturnCacheDataDontLoad = 3,
// 只使用缓存数据,如果不存在缓存,则请求失败. 用于没有网络连接的离线模式
NSURLRequestReloadIgnoringLocalAndRemoteCacheData = 4,
// 忽略远程和本地的数据缓存,直接从原始地址下载
NSURLRequestReloadIgnoringCacheData = NSURLRequestReloadIgnoringLocalCacheData = 1,
// 忽略缓存,直接从原始服务器地址下载.
NSURLRequestReloadRevalidatingCacheData = 5,
// 验证本地数据和远程数据是否相同,如果不同则下载远程数据,否则使用本地数据.
}
// 网络数据缓存
网络缓存数据,保存在SQLite的数据库中(NSHomeDirectory()),
//查看缓存的数据命令行:
cd 文件目录 (打开文件目录)
ls 查看当前文件下目录
sqlite3 Cache.db 打开数据库
.tables 查看数据库中的表单
select * from cfurl_cache_response; 查看服务器响应缓存
select * from cfurl_cache_receiver_data; 查看服务器返回的数据缓存
2> 默认的超时时间: timeoutInterval = 60
4. 发送请求
用 NSURLConnection 发送请求.
同步方法:
+ (NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NSURLResponse **)response error:(NSError **)error;
异步方法:
+ (void)sendAsynchronousRequest:(NSURLRequest*) request queue:(NSOperationQueue*) queue
completionHandler:(void (^)(NSURLResponse* response, NSData* data, NSError* connectionError)) handler
"iPhone AppleWebKit" 制定客户端类型
}
客户端:手机/ipad/PC 移动互联网. 前端开发:IOS 安卓 浏览器/网页
后端开发:
服务器:就是一台计算机.
客户端都是通过服务器获得数据的.
线上服务器:app上线之后,访问的服务器.
测试服务器:app开发阶段使用的服务器.
数据库:服务器中的数据都来自于数据库.
请求:客户端向服务器所要数据的过程 -- 发送一个网络请求
响应:服务器接收到客户端的请求之后,返回给客户端所需要的数据.
访问本机的地址:
127.0.0.1 本机的Ip地址.
本机域名:localhost
IP地址:网路管理分配内网IP
MAc系统,自带的Apache2,轻便易用,可以很方便在自己的PC上架设服务器
配置服务器
服务器配置步骤:
1> 打开服务器配置目录
cd /etc/apache2/
2> 查看当前目录下内容
ls
3> 修改服务器根路径
{
sudo vim httpd.conf //进入服务器配置文件
/DocumentRoot 回车 //查找服务器默认根路径
将默认根路径 DocumentRoot "/Library/WebServer/Documents" 注释掉;
在注释掉的根路径下面一行增加新的根路径
DocumentRoot "/Users/自己的用户名/Sites"
将 <Directory "/Library/WebServer/Documents"> 注释掉;
增加新的 <Directory "/Users/l自己的用户名/Sites">
}
4> 保存退出
:wq 回车
"注意":如果感觉修改错误了,想重新进入修改,就做不保存退出的操作
不保存退出
:q! 回车
启动服务器
sudo apachectl -k start 或者 sudo apachectl start
关闭服务器:
sudo apachectl -k stop 或者 sudo apachectl stop
重新启动服务器
sudo apachectl -k restart 或者 $sudo apachectl restart
至此服务器就基本可以使用了,
打开浏输入:lcalhost(127.0.0.1)
如果可以看到Index of,服务器就架设成功了(bd.html,笔者放的测试文件)
也就是个人PC可以作为服务器了。
未完待续...
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/jiahao8915/article/details/47666335