《Android进阶之光》读书笔记(四)

Posted by alonealice on 2017-07-24

网络分层

1.物理层:负责比特流在节点间的传输,即负责物理传输。
2.数据链路层:主要功能是在不可靠的物理线路上进行数据的可靠传输。它将从网络层收到的数据分割成特定的可被物理层传输的帧。
3.网络层:该层决定如何将数据从发生方路由到接收方
4.传输层:该层为两台主机上的应用程序提供端到端的通信,主要有两个传输协议;TCP和UDP。
5.应用层:应用层就是规定应用程序的数据格式的,主要协议有HTTP,FTP,Telnet,SMTP,POP3等。

TCP 3次握手和4次挥手

3次握手

  1. 建立连接。客户端发送连接请求报文端段,将SYN设置为1,Sequence Number(seq)为x,接下来客户端进入SYN_SENT状态,等待服务端的确认
  2. 服务端收到客户端的SYN报文段,对SYN报文进行确认,设置Acknowledgment Number(ACK)为x+1(seq+1);同时自己发送SYN请求信息,将SYN设置为1,seq为y。服务端将上述所有的信息放到SYN+ACK报文段中,一并发送到客户端,此时服务端进入SYN_RCVD状态
  3. 客户端收到服务端SYN+ACK报文段,将ACK设置为y+1,向服务端发送ACK报文段,发送完后,两边都进入连接成功状态
    通俗点说:首先客户端向服务端发送一个消息,服务端收到后,知道客户端可以发送消息,自己可以接受消息;然后无服务向客户端发送一个消息,客户端收到后,知道自己可以发送接受消息,服务端可以发送接受消息;最后客户端再向服务端发送消息,服务端收到后,服务端就知道了自己可以发送消息,这样双方就都知道了双方都可以发送接收消息,连接建立。
    4次挥手
  4. 客户端设置seq和ACK,向服务端发送一个FIN报文段,此时,客户端进入FIN_WAIT_1状态
  5. 服务端收到FIN报文段,向客户端回一个ACK报文段
  6. 服务端收到客户端发送的FIN报文段,请求关闭连接,同时服务端进入LAST_ACK状态
  7. 客户端收到服务端发送的FIN报文段,向服务端发送ACK报文段,然后客户端进入TIME_WAIT状态。服务端收到客户端的ACK报文段后,关闭连接。此时,客户端等待2MSL后没有收到回复,说明服务端已经关闭,这样客户端也关闭。
    通俗点说:客户端向服务端发送一个请求,说明没有内要发送了;服务端收到后,也想客户端发一个消息,双方都进入等待关闭状态;服务端发送消息,请求关闭连接;客户端收到后发送消息,服务端收到后关闭,客户端等待一段时间后,也关闭。

HTTP协议

主要特点:支持客户/服务器模式;简单快速(只需传输请求方法和路径);灵活(允许传输任意类型的数据对象);无连接(每次连接只处理一个请求);无状态:协议无状态协议,后续处理需要前面的信息就必须重传。

请求报文由请求行、请求报头、空行和请求数据构成。
请求行由请求方法、url、Http协议版本组成,其中请求方法有:(GET、POST、HEAD、PUT、DELETE、TRACE、CONNECT、OPTION)
请求报头会有0个或多个,每个请求报头都会包含一个名字和值,并用:分割。典型的请求报头如下:
Host:请求主机名。
User-Agent:发送请求的浏览器类型,操作系统信息等。
Accetp:客户端可识别的内容类型列表
Accept—Encoding:客户端可识别的数据编码
Accept-Language:浏览器所支持的语言类型
Connection:客户端与服务端的连接的有关选项,如keep-Alive
Transfer-Encoding:接收端对报文的编码方式
请求数据:在POST方法中使用。

响应报文由状态行、响应报头、空行、响应正文组成。
状态行:
100-199:指示信息
200-299:请求成功
300-399:重定向
400-499:客户端错误
500-599:服务端错误。
响应报头:
用于服务端传递自身信息的响应,常见的如下:
Location:用于重定向接受者到一个新的位置
Server:包含服务器用来处理请求的系统信息,与User-Agent相对应。

其他报头:
通用报头:既可以在请求报头,也可以在响应报头。如下:
Date:消息产生的日期和时间
Connection:允许发送指定连接的选项
Cache-Control:用于指定缓存指令
实体报头:用来定义传输资源的信息,既可以在请求,也可以在响应。如下:
Content-Type:发送给接受者的实体正文的媒体类型
Content-Lenght:实体正文的长度
Content-Language:描述资源所有的自然语言
Content-Encoding:实体报文被用作媒体类型的修饰符。
Last-Modified:实体报头用于指定资源的最后修改日期和时间
Expires:实体报头给出响应过期的日期和时间。