网络基础一、计算机网络体系结构计算机网络的各层 + 其协议的集合。它定义了该计算机网络所能完成的功能。计算机网络体系结构分为3种:OSI体系结构、TCP / IP体系结构、五层体系结构OSI体系结构:纯理论的框架性的概念。概念清楚完整,但复杂不实用;TCP / IP体系结构:不只是划分了功能层,还有具体的实现协议(TCP,IP协议),是Internet的核心协议;五层体系结构:融合了OSI 与 TCP / IP的体系结构,目的是为了学习和讲解计算机原理。二、IP地址 & 端口号IP 地址是用于标识网络中的唯一的一个通信实体,这个通信实体既可以是一台主机,也可以是一台打印机,或者是路由器的某一个端口。IP 地址分为公网 IP 地址和私有 IP 地址。公网 IP 是在 Internet 使用的 IP 地址,而私有 IP 地址则是在局域网中使用的 IP 地址。IP 地址用于标识网络上的一个通信实体,但是一个通信实体可以有多个通信程序同时提供网络服务,此时需要使用端口号,用于表示数据交给哪个通信程序处理。因此,端口就是应用程序与外界交流的出入口。简单讲,IP 地址就是家庭住址,具体到街道和门牌号,端口就相当于房间号码。当一个程序需要发送数据的时候,需要指定目的地的 IP 地址和端口号。Android 网络编程基础Android 与服务器的通信方式主要有两种,一种是 Http 通信,一种是 Socket 通信。Http 通信:属于应用层,解决的是如何包装数据。工作方式为“请求—响应”,即当客户端向服务器发送请求时才建立连接通道,服务器端才能向客户端返回数据。Socket 通信:属于传输层,解决的是数据如何在网络中传输的问题。工作方式为“服务器主动发送数据”,即建立网络连接后,服务器可主动发送消息给客户端,不需等待接收。一、Socket通讯Socket 即套接字,是应用层 与 TCP/IP 协议族(传输层)的中间软件抽象层,表现为一个封装了 TCP / IP协议族 的编程接口(API)。Socket 的使用类型有两种:1.流套接字(streamsocket):基于 TCP协议,采用 流的方式 提供可靠的字节流服务;2.数据报套接字(datagramsocket):基于 UDP协议,采用 数据报文 提供数据打包发送的服务。1. TCP 传输控制协议通讯模型(流的方式):通讯机制(三次握手,四次挥手) : TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。2. UDP 用户数据报协议通讯模型(包的方式):特点:3. TCP 与 UDP 区别流模式与数据报模式;对系统资源的要求(TCP较多,UDP少);TCP 基于连接,保证数据正确性和数据顺序(可靠)。UDP 无连接,可能丢包,不保证数据顺序(不可靠)。所以,TCP 效率慢,UDP 速度快。4.使用Socket可基于TCP或者UDP协议,但TCP更加常用。例子是基于 TCP 的:******* 步骤1:创建客户端 & 服务器的连接 *// 创建Socket对象 & 指定服务端的IP及端口号 Socket socket = new Socket(“192.168.1.32”, 1989); // 判断客户端和服务器是否连接成功 socket.isConnected(); ******* 接收服务器的数据 ******** // 步骤1:创建输入流对象InputStreamInputStream is = socket.getInputStream() // 步骤2:创建输入流读取器对象 并传入输入流对象InputStreamReader isr = new InputStreamReader(is);BufferedReader br = new BufferedReader(isr);// 步骤3:通过输入流读取器对象 接收服务器发送过来的数据br.readLine(); 发送数据 到 服务器 ******** // 步骤1:从Socket 获得输出流对象OutputStream。该对象作用:发送数据OutputStream outputStream = socket.getOutputStream(); // 步骤2:写入需要发送的数据到输出流对象中outputStream.write((“Carson_Ho”+"\n").getBytes(“utf-8”));// 特别注意:数据的结尾加上换行符才可让服务器端的readline()停止阻塞// 步骤3:发送数据到服务端 outputStream.flush(); ******* 断开客户端 & 服务器 连接 ******** // 断开 客户端发送到服务器 的连接,即关闭输出流对象OutputStreamos.close();// 断开 服务器发送到客户端 的连接,即关闭输入流读取器对象BufferedReader br.close();// 最终关闭整个Socket连接 socket.close(); 二、HTTP 通讯HTTP 协议即超文本传送协议,HTTP 协议是建立在TCP协议之上的一种应用。HTTPS 是 HTTP 的安全版,即 HTTP 下加入SSL层。1. Http 请求 & 响应请求报文:响应报文:部分详解:2.请求方法Get & Postget参数通过url传递,post放在request body中;浏览器中Get传递数据上限;因为get请求参数是写在url里的,而浏览器中url长度是有限制的,所以在浏览器中使用get传递数据是有限制的。但是,Http协议本身是不限制的,所以移动端请求无影响。Http服务器部分有限制的设置一下即可。Post请求无限制。Post比Get更安全后退与刷新。Get 无害,Post 数据会被重新提交。因为,Get 是从服务器上获取,查询数据,对服务器没有改变;Post 是向服务器传送数据,会对服务器数据造成改变。缓存与历史Get能被缓存,参数保留在浏览器历史中。Post不能缓存,参数不会保存在浏览器历史中。三、移动端网络优化不用域名,直连用IP,省去 DNS 解析过程;预取;连接复用;节省连接建立时间,如开启 keep-alive。默认情况下HttpURLConnection和 HttpClient都开启了keep-alive。只是2.2之前HttpURLConnection存在影响连接池的Bug。用捆绑批量访问的方式来减少访问的频率;即将多个请求合并为一个进行请求, 如果某个页面内请求过多,也可以考虑做一定的请求合并。减少请求数据的大小对于post请求,body可以做Gzip压缩,如日志。减少返回数据的大小做好网络数据的缓存参考文章:这是一份详细 & 清晰的计算机网络基础 学习指南