android网络编程中的Http、Https、TCP/IP、Socket

前言

在Android中,网络编程是是十分重要的一项,下面就来介绍一下网络编程方面的知识。

简介

HTTP

超文本协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。Http定义了浏览器(即万维网客户进程)怎样向万维网服务器请求万维网文档,以及服务器怎么把文档传给浏览器。Http是万维网可靠的交换文件(包括文本、图像、声音、以及视频等)的基础。 HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。 
HTTP协议的主要特点:

  1. 支持C/S(客户/服务器)模式。
  2. 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST,每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
  3. 灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
  4. 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
  5. 无状态:HTTP协议是无状态协议,无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

Http的请求过程:

  1. 域名解析 
  2. 发起TCP的3次握手 
  3. 建立TCP连接后发起Http请求 
  4. 服务器端响应Http请求,并回传数据 
  5. 客户端获取数据并解析展示在前端界面

作用:

HTTP协议被用于在Web浏览器和服务器之间传递信息。HTTP协议以明文方式发送内容,不提供任何方式的数据加密,因此HTTP协议不适合传输一些敏感信息。

HTTPS 

HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。 
https:URL 表明它使用了HTTP,但HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间)。 
HTTPS使用端口443,而不是像HTTP那样适用端口80来和TCP/IP 进行通信。SSL使用40位关键字作为RC4流加密算法,这对于商业信息的加密是合适的。HTTPS和SSL支持使用X.509数字认证,如果需要的话用户可以确认发送者是谁。 
作用:

建立一个信息安全通道,来保证数据传输的安全。确认网站的真实性,凡是使用https的网站,都可以通过点击浏览器地址栏的锁头标志来查看网站认证之后的真实信息。也可以通过CA 机构颁发的安全签章来查询。

HTTPS 和 HTTP 的区别 

传输信息安全性不同:

  1. http协议:是超文本传输协议,信息是明文传输。如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息。
  2. https协议:是具有安全性的ssl加密传输协议,为浏览器和服务器之间的通信加密,确保数据传输的安全。

 

连接方式不同:

  1. http协议:http的连接很简单,是无状态的。
  2. https协议:是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议。

端口不同:

  1. http协议:使用的端口是80。
  2. https协议:使用的端口是443.

证书申请方式不同:

  1. http协议:免费申请。
  2. https协议:需要到ca申请证书,一般免费证书很少,需要交费。


TCP/IP

利用 IP 进行通信时所必须用到的协议群的统称。具体来说,IP 或 ICMP、TCP 或 UDP、TELNET 或 FTP、以及 HTTP 等都属于 TCP/IP 协议。他们与 TCP 或 IP 的关系紧密,是互联网必不可少的组成部分。TCP/IP 一词泛指这些协议,因此,有时也称 TCP/IP 为网际协议群。互联网进行通信时,需要相应的网络协议,TCP/IP 原本就是为使用互联网而开发制定的协议族。因此,互联网的协议就是 TCP/IP,TCP/IP 就是互联网的协议。
TCP
      TCP是Tranfer Control Protocol的简称,是一种面向连接的保证可靠传输的协议。通过TCP协议传输,得到的是一个顺序的无差错的数据流。发送方和接收方的成对的两个socket之间必须建立连接,需要连接时间,以便在TCP协议的基础上进行通信。 

TCP连接必须进行三次握手:若A要与B进行连接,则必须 

  1. 第一次握手:建立连接。客户端发送连接请求报文段,将SYN位置为1,Sequence Number为x;然后,客户端进入SYN_SEND状态,等待服务器的确认。即A发送信息给B
  2. 第二次握手:服务器收到客户端的SYN报文段,需要对这个SYN报文段进行确认。即B收到连接信息后向A返回确认信息
  3. 第三次握手:客户端收到服务器的(SYN+ACK)报文段,并向服务器发送ACK报文段。即A收到确认信息后再次向B返回确认连接信息 

优点: 

  1. 可靠稳定,传递数据前,会有三次握手建立连接,面向有连接。 
  2. 传递数据时,有确认、窗口(流量控制)、重传、拥塞控制。确认机制保证接收端每收到一个正确包都会回应给发送端,超时或者数据包不完整的话发送端会重传。 

缺点: 

  1. 整体来说传输慢,效率低,占用系统资源高。 
  2. 传递数据前,建立连接需要耗时,传递数据时,确认、重传、拥塞等会消耗大量时间以及CPU和内存等硬件资源。 
  3. 因为有确认机制、三次握手等机制,容易被人利用,实现DOS 、DDOS攻击。 

应用场景:

当对网络通讯质量有要求的时候,比如:整个数据要准确无误的传递给对方,这往往用于一些要求可靠的应用,比如HTTP、HTTPS、FTP等传输文件的协议,POP、SMTP等邮件传输的协议。

UDP

是User Datagram Protocol的简称,是一种无连接的协议,每个数据报都是一个独立的信息,包括完整的源地址或目的地址,因此无需建立发送方和接收方的连接,它在网络上以任何可能的路径传往目的地,因此能否到达目的地,到达目的地的时间以及内容的正确性、次序性都是不能被保证的。而且被传输数据报必须限定在64k以内。

TCP和UDP的区别

  1. TCP:面向连接,可靠的,速度慢效率低,适用于需要传输可靠的数据时使用。
  2. UDP:无连接,不可靠,速度快、效率高,适用于需搞笑传输数据,忽略可靠性时使用。

Socket

即套接字,是一个对 TCP / IP协议进行封装 的编程调用接口(API)

  1. 即通过Socket,我们才能在Andorid平台上通过 TCP/IP协议进行开发
  2. Socket不是一种协议,而是一个编程调用接口(API),属于传输层(主要解决数据如何在网络中传输)

利用Socket建立连接的过程分为三个步骤:服务器监听,客户端请求,连接确认。 

  1. 服务器监听:服务器端套接字处于等待连接的状态,实时监控网络状态,等待客户端的连接请求。 
  2. 客户端请求:指客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。 
  3. 连接确认:当服务器端套接字监听到或者说接收到客户端套接字的连接请求时,就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,双方就正式建立连接。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。

Socket 与 Http 对比

Socket:属于传输层,因为 TCP / IP协议属于传输层,解决的是数据如何在网络中传输的问题,采用 服务器主动发送数据 的方式。

  1. 即建立网络连接后,服务器可主动发送消息给客户端,而不需要由客户端向服务器发送请求
  2. 可理解为:是服务器端有需要才进行通信

HTTP协议: 属于 应用层,解决的是如何包装数据,采用 请求—响应 方式。

  1. 即建立网络连接后,当 客户端 向 服务器 发送请求后,服务器端才能向客户端返回数据。
  2. 可理解为:是客户端有需要才进行通信

 

你可能感兴趣的:(android)