您的位置:首页 > 理论基础 > 计算机网络

网络编程基础

2015-10-29 23:55 274 查看
一、网络编程

网络编程是一种实时更新应用数据的常用手段,是开发优秀网络应用的前提和基础。

二、基本概念
客户端(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> 响应:

服务器对客户端的请求做出响应,返回客户端所需要的数据。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息