一、网络编程
网络编程是一种实时更新应用数据的常用手段,是开发优秀网络应用的前提和基础。
二、基本概念
客户端(Client):一般就是前端/前台,移动应用(iOS、android等应用)开发都是前端开发。
服务器(Server):为客户端提供服务、提供数据、提供资源的机器,负责处理网络请求,本质也是一台计算机(+服务器软件),服务器开发就是后端/后台开发(java/php/.net/node.js)等。
服务器集群: 将多台服务器组合在一起,每一台服务器上跑的都是相同的代码。
请求(Request):客户端向服务器索取数据的一种行为。
响应(Response):服务器对客户端的请求做出的反应,一般指返回数据给客户端。
网络请求所需要的数据
,
不会存储在服务器中
!
一般数据都存储在数据库中。
数据库
:
服务器接收到客户端的请求之后
,
会做一些逻辑处理
,
然后从数据库中取到数据之后
,
返回给客户端
!
// MySQL sqlite3 CoreData
三、服务器
1.服务器按开发阶段来分有两种:
(1)远程服务器:
外网服务器。应用上线之后供全体用户使用的服务器,速度取决于用户的网速和服务器的性能。
(2)本地服务器
内网服务器、测试服务器。开发测试阶段使用的服务器,供内部开发测试人员使用,
由于是局域网,所以速度飞快,有助于提高开发测试效率。
2.本地服务器的选择
在要想在Mac上方便地启动Java服务器,大致有以下步骤
1)安装JDK (Java Development Kit)
2)安装Java的开发工具:eclipse
3)利用Java编写一套服务器程序
4)配置服务器的容器:Apache Tomcat
5)启动Apache Tomcat
3.本地服务器的主机地址
本地服务器的主机地址一般有3种写法:
(1)127.0.0.1 :每台机器内置的IP地址,指的就是机器本身。
(2)localhost :等价于第1种情况的127.0.0.1
(3)交换机/路由器分配的IP地址 :真机测试一定要用这个,且真机和服务器得在同一个局域网内。
四、网络七层协议
1.
物理层
:
通过物理手段(
光缆/电缆/无线电波
)
将电脑连接入网络,
传输
‘0’和‘1’的电信号
。
主要定义了物理设备的标准,如网线/光纤的接口类型,各种传输介质的传输速率等。
2.
数据链路层
:
单纯的
0和1
没有意义,
为了解读0和1,
将物理层的数据分组并且规定解读方式,
这样就产生了数据链路层。
一组电信号就是一个数据包。
如
"MAC
地址
"
/
网卡
/
广播等。
3.
网络层
:
作用是确定每一台计算机的位置,
建立
"
主机
"
到
"
主机
"
之间的通信
。
在网络中,有很多台计算机,我们如何通过一条最佳的路径将数据传递给另一台计算机?
为了解决这个问题,就有了网络层,在网络层引入了一套地址机制:网络地址,简称网址,又叫做Ip地址。通过Ip地址,可以找到唯一的一台计算机。
通过路由器、交换机等具有寻址功能的设备帮助我们找到Ip地址对应的计算机,所以产生了Ip协议,如
IPv4、
IPv6协议
。
每一台计算机都是通过网卡连入网络,最终都会通过网卡来收发信息,每一块网卡都有一个唯一的地址:MAC地址,
我们通过MAC地址来接收和发送信息。
IP地址按照协议版本: IPv4 IPv6
IP地址: 用来确定网络中唯一的一台计算机!
子网掩码
:
用来确定计算机所在的子网络
!
路由器
/
网关
:
路由器地址
/
管理员地址
DHCP 协议: 自动获取IP地址的协议!
路由器/交换机: 这些设备具有网络寻址功能!
4.
传输层
:
建立
'
应用程序
'
到
'
应用程序
'
之间的通信,
或者说
建立
"
端口
"
到
"
端口
"
之间的通信,
使不同的应用程序能够接收到自己所需要的的数据。
给每一个使用网卡的应用程序一个编号
:
比如
QQ: 3000
微信
:2999
比邻
:58888 ,
利用这个编号来确定信息是给哪一个应用程序的。
在聊天信息中,
必须附带这个编号。
这个编号称之为
"
端口
”
,
就是应用程序使用网卡的编号
!
传输层有两个重要的协议:TCP协议 和 UDP协议。
TCP协议/三次握手协议:
建立连接需要三次
!
能够保证数据不丢失,是安全的,但是非常复杂,实现困难。
UDP协议/报文头协议:非常简单,但是可靠性差,一旦数据发出,无法知道对方是否收到。
Socket编程:
在Unix系统中,所谓的Socket编程,指的就是 主机 + 端口 的编程。也就是说,Socket编程涵盖了网络层和传输层。
Socket(套接字/插座) == 主机 + 端口,最常见的Socket编程就是 TCP/IP 编程。
特别注意:Socket 只是一个通讯模型,不属于网络(七层)协议。
5. 会话层:
为了实现自动收发数据,自动寻址功能;我们引入了会话层.会话层的作用,就是
自动的管理应用程序之间的通信。
6. 表示层:
不同的系统语法肯定不同,用以解决不同系统之间的通信问题。
7.
应用层
:
规定
"
应用程序
"
的数据格式。
最常见的应用层协议:HTTP协议/超文本传输协议!
五、网络通信
网络通信的基础: 知道对方的MAC地址和IP地址.
网络通信的实质: 互相交换数据包。
数据中必须包含很多信息: 接收方和发送方的 MAC 地址 / IP 地址/ 端口号!
1.
在同一个子网络中
,
数据以广播的方式传递
!
MAC
地址
/
网卡地址
:
信息在传递过程中
,
会附带接收方和发送方的
MAC
地址
.
2.
在不同的子网络中
,
数据以路由的方式传递
!
路由
:
信息在不同的子网络中传递
!(
以一种最佳
(
最短
/
最快
)
的路径来传递信息
!)
六、
数据包
数据包是从数据链路层引入的!每一个数据包都包含 "标头"和"数据"两个部分。"标头"包含本数据包的一些说明,"数据"则是本数据包的内容。
以太网数据包:
最基础的数据包。标头部分包含了通信双方的MAC地址,数据类型等;'标头'长度:18字节,'数据'部分长度:46~1500字节。
IP数据包:
标头部分包含通信双方的IP地址,协议版本,长度等信息。'标头'长度:20~60字节,"数据包"总长度最大为65535字节。
TCP/UDP数据包:
标头部分包含双方的发出端口和接收端口。
UDP数据包:
'标头'长度:8个字节,"数据包"总长度最大为65535字节,正好放进一个IP数据包。
TCP数据包:
理论上没有长度限制,但是,为了保证网络传输效率,通常不会超过IP数据长度,确保单个包不会被分割。
应用程序数据包:
标头部分规定应用程序的数据格式,数据部分传输具体的数据内容。
嵌套:
数据包层层嵌套,
上层协议的数据包嵌套在下层协议数据包的数据部分
,
上层变动完全不影响下层结构,
最后通通由以太网数据包来进行数据传递。
分包/拆包:
一般传递的数据都比较大,会将数据包分割成很多个部分来传递。
拼包:
将接收到数据包按序号拼接起来,组成完整的数据包。
数据包的结构如图:
七、IP地址
静态IP地址:
固定不变的IP地址,需要用户自己手动设置。
动态IP地址:
通过DHCP协议自动生成的IP地址。
DHCP协议:
通过DHCP协议,用户获得本机的动态IP地址,子网掩码,网关,DNS服务器等。
子网掩码:
与IP地址配合使用判断两台计算机是否位于同一个子网络。
DNS服务器:
可以将域名(网址)转换成IP地址。
八、HTTP请求
http:// 超文本传输协议;开发中使用最多的一个协议!
https:// 安全协议; https == http + ssl(安全通道)!需要服务器支持!
file:// 访问本地文件协议
mailto: 邮件协议!
1. URL(Uniform Resource Locator):
统一资源定位符。URL就是资源的地址、位置,通过一个URL能够找到互联网上唯一的一个资源。
URL的基本格式: 协议://主机地址/路径
协议:不同的协议代表不同的资源查找方式,资源传输方式。
URL中的常见协议:
<1>HTTP: 超文本传输协议,在网络开发中最常用的协议,访问的是远程的网络资源。格式:http://...
<2>https: 安全协议。https == http + ssl(安全通道),需要服务器支持!
<3>file: 访问的时本地计算机上的资源。格式:file://(不要再加主机地址了)
<4>FTP: 访问的是共享主机的文件资源。格式:ftp://
<5>mailto: 访问的是电子邮件地址。格式:mailto:
主机地址:
存放资源的主机IP地址(域名)。
路径:
资源在主机中得具体位置。
2. HTTP请求的完整过程:
<1> 请求:
客户端发出请求,向服务器索要数据(操作数据)。
<2> 响应:
服务器对客户端的请求做出响应,返回客户端所需要的数据。