android 底层网络协议栈 安卓网络协议_android 底层网络协议栈


TCP/IP 分层网络

1. 应用层

应用层决定了向用户提供应用服务时通信的活动。
TCP/IP 协议族内预存了各类通用的应用服务。例如:HTTP、SSH、FTP 等。

2. 传输层

应用层的下一层就是传输层,提供处于网络连接中的两台计算机之间的数据传输
常见的传输层协议有 TCP、UDP 等。

3. 网络层

网络层又称网络互连层。
网络层用来处理在网络上流动的数据包,数据包是网络传输的最小数据单位。该层规定了通过怎样的路径到达对方的计算机,并把数据包传送给对方。
网络层的作用就是在众多选项内选择一条合适的传输路径。

4. 链路层

链路层又称数据链路层,网络接口层
用来处理连接网络的硬件部分,控制操作系统、硬件的设备驱动。
我们能够看到的交换机、网线、光纤等也属于物理层

TCP 是什么

TCP 的全称是传输控制协议(Transmission Control Protocol)位于传输层,它是一种有连接的协议,提供可靠的字节流服务[注1]。而可靠的传输服务是指,能够将数据准确可靠的传递给对方。数据为何能准确无误的送达目标处,就是因为 TCP 协议采用了三次握手策略,当然除了三次握手,TCP 协议还有其他手段来保证通信的可靠性

TCP 三次握手

  1. 发送端首先发送一个带 SYN 标志的数据包给对方


android 底层网络协议栈 安卓网络协议_操作系统_02


  1. 接收端收到标有 SYN 的数据包后回传一个带有 SYN/ACK 标志的数据包表示确认信息


android 底层网络协议栈 安卓网络协议_android 底层网络协议栈_03


  1. 发送端在发送一个带有 ACK 标志的数据包给接收端表示握手成功


android 底层网络协议栈 安卓网络协议_移动开发_04


如果握手成功后连接断开,再次连接还需要重新握手

TCP 四次挥手

由于TCP连接时全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送一个FIN来终止这一方向的连接,收到一个FIN只是意味着这一方向上没有数据流动了,即不会再收到数据了,但是在这个TCP连接上仍然能够发送数据,直到这一方向也发送了FIN。首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭。

第一次挥手:
Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。
第二次挥手:
Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。
第三次挥手:
Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。
第四次挥手:
Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。


android 底层网络协议栈 安卓网络协议_android 底层网络协议栈_05


时序图


UDP 是什么

UDP 的全称是用户数据报协议(User Datagram Protocol)同样位于传输层,它是一种无连接的协议,提供面向事务的简单不可靠信息传送服务



android 底层网络协议栈 安卓网络协议_移动开发_06


UDP 报头


TCP 与 UDP 的差异

  1. TCP 是有连接的而 UDP 是无连接的
  2. TCP 是可靠的连接而 UDP 是不可靠的
  3. UDP 不需要各种可靠性策略所以相比 TCP 性能要高不少
  4. 因为 UDP 的连接步骤少,报头内容少所以相比 TCP 更加的省流量
  5. TCP 只能一对一连接传递消息而 UDP 可以一对一、一对多、多对一和多对多

注1:字节流服务是指,为了方便传输,将大块数据分割成报文段为单位的数据包进行管理的服务