我们假设发送方为hosta,接收方为hostb
hosta向hostb发送一组信息,假设hosta只需要一个TCP报文分组即可将数据推向internet,
而接收方hostb则有可能会需要接收很多次,才能将数据接收完,然后将分片的数据排序好,再通过插口上传到对应的应用层。
现在我们以极端的例子说明接收的实质:
hosta发送一个无符号长整型的数据 x 给hostb:
X=2147549442 D =1000 0000 0000 0001 0000 0001 0000 0010 B
那么hostb在接收时是以下面方式接收的:
如图所示
如果第一个片中只有前十六个bit的数据(1000 0000 0000 0001 ),那么下一个片中将会得到后十六bit的数据( 0000 0001 0000 0010),按照图中所示的放在接收buffer中,注意传输过程中是以byte为单位传输的(就是说一个字节的数据是不会出现在两个分片当中的,这一点很重要)。
由于我们需要的是无符号长整型数据,而我们得到的是存储在char型的数组里的信息,所以呢,来个强制转化那是必须的了,这样我们就获得了hosta传个hostb的数据X=2147549442
以上是我自己的心得,如有错误之处,大家一起讨论哈。。
对于网络字节与主机字节间的转换参看我的上篇文章哈,这里不是重点。