Socket详解(二)
2019-04-17 本文已影响1人
羞涩的老湿鸡
上一篇文章介绍了TCP/IP四层中的传输层,本篇文章介绍网络层。
何为网络层?(互联网层)
网络层实现数据包的选路和转发,网络层位于传输层的下一层,传输层的数据会交由网络层来处理,网络层会对数据进一步进行处理。会在传输层数据包的外层再套一层,加入源IP与目标IP。结构大概如下:
{IP包{TCP或UDP包{Data}}}
上文已经讲到传输层有TCP/UDP两大协议,而在网络层中主要有IP,ICMP,RIP,OSPF,BGP,IGMP等协议,本文中主要讲解IP协议。
网络层-IP协议
网络层最核心的协议就是IP协议(Internet Protocol)IP协议根据数据包的目标IP,将数据传输给目标主机。如果数据包不能直接发送给目标主机,那么IP协议会查找合适路由器进行转发,最终将数据包交付给目标主机。传输流程可参考之前文章以太网简单介绍。
IP包的数据长度为64kb(65535)这是因为一个IP包头用2个字节来表示报文长度,而2个字节能表示的最大长度为1111 1111 1111 1111 = 0XFF = 65535
IP协议本身是为上层协议提供分割与重组报文功能的。因此在传输过程中,原则上讲我们没有必要去关心一个包的大小。但是实际上因为分割的IP包要使用标识字段来进行区分,而IP包的标识字段不可能无限长。
在我们的数据传输过程中,为了加快传输速度和浪费不必要的流量。我们可以在开发过程中将报文信息控制在一个包内。使用64KB-IP包头长度-TCP/UDP包头长度,便是我们一个包最大可传输的报文长度。根据业务场景我们可以假设将这个报文长度控制在40KB。这样即可以准确的将一个信令控制在一个包内,又可以方便后期的一个报文扩展。(具体是否需要控制要看实际业务场景)