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

网络协议(Http,TCP/IP Socket)相关知识

2017-12-21 00:47 711 查看

网络协议(Http,TCP/IP Socket)相关知识

Android主要有两种客户端与服务器通信方式,一种是Http方式,该方式是无连接,无状态的,是请求-响应方式 客户端向服务器端主动发送请求,服务器才发送数据给客户端

另一种方式是Socket方式,该方式是通过客户端与服务器端建立连接,就可以实现服务器与客户端直接通信,不需要客户端先发送请求

Http协议:

应用层

无状态 不记忆之前的,因此好处是应答快

缺点是若要处理前面的信息,则要重传,数据量增大

无连接:每次连接只处理一个请求

HTTP两种报文

一、请求报文

1 请求行

包括: 请求方法 Url http 协议版本

请求方法:Get Post

GET请求的数据会附在URL之后,以?分割URL和传输数据,参数之间以&相连

GET一般用于获取/查询资源信息,而POST一般用于更新资源信息

Get是向服务器发索取数据的一种请求,而Post是向服务器提交数据的一种请求,在FORM(表单)中,Method默认为”GET”,实质上,GET和POST只是发送机制不同,并不是一个取一个发

2 请求报头(请求头)

请求数据 post方法才有

3 请求体

可以参考该博客更好理解请求行 请求头 请求体的概念,内容:

http://blog.csdn.net/u010256388/article/details/68491509

二、响应报文

1 状态行:服务器HTTP协议的版本

服务器发回的响应状态代码

100~199:指示信息,表示请求已接收,继续处理

200~299:请求成功,表示请求已被成功接收、理解、接受

300~399:重定向,要完成请求必须进行更进一步的操作

400~499:客户端错误,请求有语法错误或请求无法实现

500~599:服务器端错误,服务器未能实现合法的请求

常见的状态码如下:

200 OK:客户端请求成功

400 Bad Request:客户端请求有语法错误,不能被服务器所理解

401 Unauthorized:请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用

403 Forbidden:服务器收到请求,但是拒绝提供服务

500 Internal Server Error:服务器发生不可预期的错误

503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常

2 消息报头

3 空行

4 响应正文

Socket

socket又称套接字,是建立在端口基础上的通信,因此又是端口通信。在程序内部通过建立端口与外界端口进行通信

Socket通信特点是 数据丢失率低,使用简单 便于移植

根据底层协议的不同,socket可以分为不同类型。这里主要介绍基于TCP/IP协议的Socket通信方式

在这个协议族当中主要的Socket类型为流套接字(streamsocket)

Android Socket编程基本流程

TCP UDP

TCP是面向连接的、可靠的数据流传输 (如金融数据等)

UDP是无连接,尽最大努力交付,无拥塞控制的(如视频语音通话)

TCP/IP协议

TCP连接管理:

主要分为三大步骤:

一 连接建立:(三次握手)

第一次握手:客户端向服务器端发送连接请求(SYN=1 seq=x)

第二次握手:服务器端接受并同意,则返回 SYN=1 ACK=1 确认号 ack=x+1 自己的序号 seq=y 给客户端

第三次握手:客户端接受到后,告诉服务器, ACK=1 ack=y+1 seq=x+1

ACK 确认号 为1有效

SYN 建立一个连接

FIN 释放一个连接

二 数据传输

三 连接释放(四次挥手)

因为TCP是全双工的 需要两方各自释放自己的资源,因此需要两个两次挥手

1 客户端主动请求释放 FIN=1 seq=u

2 服务器端接受 ACK=1 ack=u+1 seq =v

客户端到服务器端的已经释放

3 服务器端若不发送数据给客户端了,则 FIN=1 seq=w ACK=1 ack=u+1

4 客户端接收 则返回 ACK=1 seq=u+1 ack=w+1
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: