开发必须懂的网络常识

1、网络常用概念

网络是应用的灵魂,是所有应用的数据来源.离开了网络,我们的应用就是一潭死水,网络是数据交互的媒介,我们通过网络得到服务器上的数据,也是通过网络给服务器传递数据. 也就是说,网络的实质就 是是交互数据,而数据交互的媒介就是在网络中传输二进制数据流(包括html/图片/视频数据)。

互联网开发的常用概念:

客户端(Client):移动设备(手机/iPad等手持设备),客户端一般就是前端/前台等等.iOS,android开发都是前端开发.

服务器(Server):为客户端提供服务(比如数据/资源等)的机器---本质也是一台计算机(+服务器软件),服务器开发就是后端/后台开发.java/php/.net等.

请求(Request):客户端向服务器索取数据.

响应(Response):服务器对客户端请求做出的反应,一般就是返回数据给客户端.

服务器:按开发阶段来分,分为两种:

远程服务器: 外网服务器.应用上线之后供全体用户使用的服务器.速度取决于用户的网速和服务器的性能.

本地服务器: 内网服务器,测试服务器.开发测试阶段使用的服务器.供内部开发测试人员使用.速度飞快.

2.什么是IP地址

静态IP地址:固定不变的IP地址,需要用户自己手动设置.

动态IP地址:打开计算机后,自动生成的IP地址,不用人为设置。动态的IP地址是通过DHCP协议实现自动获取的。

子网掩码:与IP地址配合使用判断两台计算机是否位于同一个子网络.

DNS服务器: 可以将域名(网址)转换成IP地址.

DHCP协议: 每一个子网络中,有一台计算机负责管理本网络的所有IP地址,它叫做“DHCP服务器”.当新的计算机加入网络,必须向“DHCP服务器”发

送一个“DHCP请求”数据包,申请IP地址和相关的网络参数.然后DHCP协议会赋予本机一些参数,如动态IP地址,子网掩码,网关,DNS服务器等.

以太网标头: 设置发出方(本机)的MAC地址和接收方(DHCP服务器)的MAC地址.

IP标头:设置发出方(本机)的IP地址和接收方(DHCP服务器)的IP地址

UDP标头:设置发出方(本机)的端口和接收方(DHCP服务器)的端口.  这一部分是DHCP协议规定好的,发出方是68端口,接收方是67端口.

所以电脑想要上网,都需要确定这四个参数:本机IP地址, 子网掩码, 网关的IP地址, DNS的IP地址。

3.HTTP请求

通俗地说,网络协议就是网络之间沟通、交流的桥梁,只有相同网络协议的计算机才能进行信息的沟通与交流。这就好比人与人之间交流所使用的各种语言一样,只有使用相同语言才能正常、顺利地进行交流。从专业角度定义,网络协议是计算机在网络中实现通信时必须遵守的约定,也就是通信协议。主要是对信息传输的速率、传输代码、代码结构、传输控制步骤、出错控制等作出规定并制定出标准。

3.1. URL(Uniform Resource Locator):

统一资源定位符.URL就是资源的地址,位置.通过一个URL能够找到互联网上唯一的一个资源.

URL的基本格式:  协议://主机地址/路径

协议:不同的协议代表不同的资源查找方式,资源传输方式.

URL中的常见协议:

<1>HTTP:超文本传输协议,在网络开发中最常用的协议.访问的是远程的网络资源.格式:http://...

<2>IP协议:

TCP数据包嵌入IP数据包.IP数据包标头需要设置双方的IP地址.发送方(本机)是:192.168.2.6 ,接收方(百度)是:119.75.218.70

IP数据包的标头长度为20字节.加上嵌入的TCP数据包,现在总长度是5000字节

<3>file:访问的时本地计算机上的资源.格式:file://(不要再加主机地址了)

<4>FTP:访问的是共享主机的文件资源.格式:ftp://

<5> TCP协议:

TCP数据包标头需要设置端口,接收方(Baidu)的HTTP端口默认是80,发送方(本机)的端口是一个随机生成的1024~65535之间的整数.

TCP数据包的标头长度是20字节.加上嵌入的HTTP数据包,现在总长度是4980字节.

<6>以太网协议

IP数据包嵌入以太网数据包的数据部分.以太网数据包的标头需要设置双方的MAC地址.发送方为本机的网卡MAC地址,接收方为网关192.168.2.1的MAC地址(通过ARP协议得到), 以太网数据包的数据部分,最大长度为1500字节,而现在的IP数据包长度为5000字节.因此,IP数据包必须分割成四个包,因为每个包都有自己的IP标头(20字节),所以四个包的IP数据包的长度分别为1500 ,1500, 1500,560 字节.

<7>mailto:访问的是电子邮件地址.格式:mailto:

主机地址:存放资源的主机IP地址(域名).

路径:资源在主机中得具体位置.

3.2. HTTP请求的完整过程:

<1> 请求: 客户端发出请求.向服务器索要数据(操作数据).

<2> 响应: 服务器对客户端的请求做出响应.返回客户端所需要的数据.

3.3. 包装一个HTTP请求

用 NSURLRequest 来包装一个HTTP请求.可以指定缓存策略和超时时间,缓存策略的选择:NSURLRequestCachePolicy

        NSURLRequestUseProtocolCachePolicy = 0,

        // 默认的缓存策略,使用协议定义.   

        NSURLRequestReloadIgnoringLocalCacheData = 1,

        // 忽略本地缓存,直接从原始服务器地址下载.  

        NSURLRequestReturnCacheDataElseLoad = 2,

        // 只有在缓存中不存在数据时,才从原始地址下载 

        NSURLRequestReturnCacheDataDontLoad = 3,

        // 只使用缓存数据,如果不存在缓存,则请求失败. 用于没有网络连接的离线模式

        NSURLRequestReloadIgnoringLocalAndRemoteCacheData = 4,

        // 忽略远程和本地的数据缓存,直接从原始地址下载

        NSURLRequestReloadIgnoringCacheData = NSURLRequestReloadIgnoringLocalCacheData = 1,

        // 忽略缓存,直接从原始服务器地址下载.

        NSURLRequestReloadRevalidatingCacheData = 5,

        // 验证本地数据和远程数据是否相同,如果不同则下载远程数据,否则使用本地数据

网络缓存数据,保存在SQLite的数据库中(NSHomeDirectory()),

3.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

4.Socket介绍

网络上的两个程序通过一个双向的通信连接实现数据的交换,根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认。

(1)服务器监听:是服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。

(2)客户端请求:是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。

(3)连接确认:是指当服务器端套接字监听到或者说接收到客户端套接字的连接请求,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,连接就建立好了。而服务器端套接字继续处于监听,继续接收其他客户端套接字的连接请求。

分步骤创建Socket

1.创建客户端Socket            socket(<#int#>, <#int#>, <#int#>);

2.创建服务器Socket            struct sockaddr_in serverAddress;

3.连接到服务器(Socket编程)     connect(<#int#>, <#const struct sockaddr *#>, <#socklen_t#>);

4.发送数据给服务器             send(<#int#>, <#const void *#>, <#size_t#>, <#int#>)

5.接收服务器返回的数据          recv(<#int#>, <#void *#>, <#size_t#>, <#int#>)

6.关闭 Socket                close(socketNumber)

时间: 2024-10-12 22:37:31

开发必须懂的网络常识的相关文章

Android开发学习之路--网络编程之xml、json

一般网络数据通过http来get,post,那么其中的数据不可能杂乱无章,比如我要post一段数据,肯定是要有一定的格式,协议的.常用的就是xml和json了.在此先要搭建个简单的服务器吧,首先呢下载xampp,然后安装之类的就不再多讲了,参考http://cnbin.github.io/blog/2015/06/05/mac-an-zhuang-he-shi-yong-xampp/.安装好后,启动xampp,之后在浏览器输入localhost或者127.0.0.1就可以看到如下所示了: 这个就

Python服务器开发二:Python网络基础

Python服务器开发二:Python网络基础 网络由下往上分为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. HTTP是高层协议,而TCP/IP是个协议集,包过许多的子协议.包括:传输层的 FTP,UDP,TCP协议等,网络层的ip协议等,高层协议如HTTP,telnet协议等,HTTP是TCP/IP的一个子协议. socket是对TCP/IP协议的封装和应用(程序员层面上).也可以说,TPC/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如

开发人员必读openstack网络基础

云计算中的网络非常复杂,需要对网络的基础理论有一定的认识和了解,转载网上针对openstack中涉及到网络概念的文章 开发人员必读openstack网络基础1:什么是L2.L3 开发人员必读openstack网络基础2:交换机.路由器.DHCP 开发人员必读openstack网络基础3: iptables详解 开发人员必读openstack网络基础4:Dnsmasq.网络混杂模式 开发人员必读openstack网络基础5:网络叠加模式VLAN.VxLAN.GRE 开发人员必读openstack网

从零开始学android开发-通过WebService进行网络编程,使用工具类轻松实现

相信大家在平常的开发中,对网络的操作用到HTTP协议比较多,通过我们使用Get或者Post的方法调用一个数据接口,然后服务器给我们返回JSON格式的数据,我们解析JSON数据然后展现给用户,相信很多人很喜欢服务器给我们返回JSON数据格式,因为他解析方便,也有一些JSON的解析库,例如Google提供的GSON,阿里巴巴的FastJson,不过还是推荐大家使用FastJson来解析,我自己开发中也是用FastJson来解析,FastJson的介绍http://code.alibabatech.c

支点网贷系统开发走进新的网络时代

具有信用标.担保标.净值标.秒标.天标.抵押标.功能.整套系统与2010年5月份上线.经过系统不断进行升级更新,本版本已经非常成熟.安全.稳定.业务流程清晰! 系统功能介绍: 系统采用主流编程语言php,mysql数据库,Think php框架开发制作 支点网贷系统开发走进新的网络时代

花生壳为软件开发行业搭建跨网络交互平台

当前公网IP地址日益减少,ISP提供商开始对大量宽带用户做出IP分配的调整,很多公司会出现从原来能获取到公网IP地址改为被分配到内网IP地址的现象,导致异地连接成为软件开发市场最大的难题.花生壳为管理软件开发行业搭建跨网络交互平台,解决开发行业受限于网络环境的问题. 管理软件开发行业异地连接网络限制 企业管理软件已在各行各业普遍适用,顺应了企业信息化发展的趋势,也有利于形成更科学的企业管理模式.然而现在许多宽带运营商(如长城宽带)分配给用户的都是内网IP地址,甚至还有原来是公网IP的,被改为了内

区块链开发:以太坊网络

区块链开发:以太坊网络 一.geth Geth 又名Go Ethereum. 是以太坊协议的三种实现之一,由Go语言开发,完全开源的项目.Geth 可以被安装在很多操作系统上,包括Windows.Linux.Mac的OSX.Android或者IOS系统 Geth官网:https://geth.ethereum.org/ Geth的Github地址:https://github.com/ethereum/go-ethereum Ubuntu安装geth客户端: 官方教程:https://githu

Qemu搭建ARM vexpress开发环境(三)----NFS网络根文件系统

Qemu搭建ARM vexpress开发环境(三)----NFS网络根文件系统 标签(空格分隔): Qemu ARM Linux 经过上一篇<Qemu搭建ARM vexpress开发环境(二)----通过u-boot启动Linux内核>,已经实现了通过u-boot加载Kernel启动开发板,并且挂载根文件系统,本文讲述通过NFS网络挂载根文件系统. 通过NFS网络根文件系统,可以实现开发板在通过u-boot启动内核后,通过NFS网络在别的PC主机上挂载根文件系统.对于开发调试阶段的工作学习提供

unity3d游戏开发之多人网络翻译

About this tutorial 我一直认为unity需要一个好一点的多人网络的教程.当我开始用unity网络功能的时候,我感觉unity自带的例子太混乱了:一个好的网络功能的例子应该包括源文件,这样你可以迅速找到你需要的资料.由于这个想法,我决定参加UniKnowledge比赛并且终于完成了一个网络功能的教程,我希望这个教程包括了你所需要的所有的内容. 这个教程介绍了很多案例:从最小的细节一直到真正的FPS游戏.我建议你从头到尾看一遍这个教程,不过如果你学东西很快的话,也可以自己看一下这