在介绍NIO之前有必要了解下TCP协议,因为目前多数应用都是给予应用层进行操作,导致隐藏了大量的网路细节,知道这些细节以及原理对我们的问题排查很有益处。
一、TCP 特性
TCP 是一种面向连接的协议,它给用户进程提供可靠的全双工的字节流。确保数据包的可靠,有序,以及支持流量控制。关于TCP 为何要做这些,我们从以下几个方面入手:
IP网络层为何不保证数据包的可靠性
TCP协议如何保证包可达、有序
TCP协议如何支持流量控制
TCP几种状态以及应用
二、IP网络层为何不保证数据包的可靠性
我们先看下OSI的网络分层,在以下分层中,TCP 位于传输层,它保证的是协议的可靠性和连续性。具体的收发报是有底层的链路层以及物理层所决定的,所以TCP 所做的工作,也是基于底层的优化和改进。
客户端与服务器之间的通信使用应用协议,传输层的通信采用TCP协议,而TCP 协议又采用了更低的一层IP协议,IP则使用某种形式的数据链路层通信。
我们知道网络的中的数据,最终通过多个路由器连接传送的。最底层的以太网协议规定了电子信号如何组成数据包,解决了局域网的点对点通信问题,但无法解决多个局域网的的互通问题。
而网络层采用的IP协议,就是定义了一套自己的地址规则,主要解决寻址和路由的功能,根据对方的IP地址,寻找最佳路径传输信息。局域网通过路由器连接,路由器基于IP协议,指导数据包向某个路由借口转发。但IP协议不保证包一定到达以及完整性,特别是网络拥堵的时候,会丢弃一些数据包,保证数据的传送效率。
而保证数据包的完整、有序以及可靠,这就是TCP 协议要来做的事情了。
三、TCP 协议
1、TCP 包组成
很多网络有一个最大传送单元,它是链路层中的网络对数据帧的一个限制,以以太网为例,MTU为1500个字节。一个IP数据报在以太网中 传输,如果它的长度大于该MTU值,就要进行分片传输,使得每片数据报的长度小于MTU。
<