区块链技术博客
www.b2bchain.cn

Linux C/C++面试之《网络编程系列》(8) tcp粘包、拆包问题(数据无边界性)及其解决办法求职学习资料

本文介绍了Linux C/C++面试之《网络编程系列》(8) tcp粘包、拆包问题(数据无边界性)及其解决办法求职学习资料,有助于帮助完成毕业设计以及求职,是一篇很好的资料。

对技术面试,学习经验等有一些体会,在此分享。

tcp粘包问题是实际开发时会遇到的问题,面试官可以用该问题测试应聘者是否真的动手做过网络开发,如果没有实际开发经验,可能不知道这个问题。
[toc]

一、tcp粘包问题

1、什么是tcp粘包

TCP粘包是指发送方发送的多个数据包被当做一个数据包接收,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾。

  • 粘包可能由发送方造成,也可能由接收方造成。
  • 只有TCP有粘包现象,UDP永远不会粘包
  • 粘包不一定会发生

也称数据的无边界性,read()/recv() 函数不知道数据包的开始或结束标志(实际上也没有任何开始或结束标志),只把它们当做连续的数据流来处理。

2、粘包原因

出现粘包现象的原因是多方面的,它既可能由发送方造成,也可能由接收方造成。所谓粘包问题主要还是因为接收方不知道消息之间的界限,不知道一次性提取多少字节的数据所造成的。

  • TCP为提高传输效率,一次发送的数据量太少时,发送端需要等缓冲区满才发送出去,造成粘包(Nagle算法)。
  • 接收方不及时接收缓冲区的包,造成多个包接收。
  • 拆包也会引起粘包(关于拆包见下面)

二、tcp拆包问题

1、什么是tcp拆包

发送方将一个数据包拆分成了多个数据包进行传送

2、拆包原因

  • 应用程序写入的数据大于套接字缓冲区大小,这将会发生拆包。
  • 链路层所发送的数据有一个最大传输单元(MTU)的限制(以太网的MTU是1500bytes),如果我们所传输的信息超过了限制,那么会在IP层进行分组,或者分片。 >解释:假设发送者的协议高层向IP层发送了长度为3008 bytes的数据报文,则该报文在添加20 bytes的IP包头后IP包的总 长度是 3028 bytes,因为3028 > 1500,所以该数据报文将被分片

tcp粘包问题是实际开发时会遇到的问题,面试官可以用该问题测试应聘者是否真的动手做过网络开发,如果没有实际开发经验,可能不知道这个问题。
[toc]

一、tcp粘包问题

1、什么是tcp粘包

TCP粘包是指发送方发送的多个数据包被当做一个数据包接收,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾。

  • 粘包可能由发送方造成,也可能由接收方造成。
  • 只有TCP有粘包现象,UDP永远不会粘包
  • 粘包不一定会发生

也称数据的无边界性,read()/recv() 函数不知道数据包的开始或结束标志(实际上也没有任何开始或结束标志),只把它们当做连续的数据流来处理。

2、粘包原因

出现粘包现象的原因是多方面的,它既可能由发送方造成,也可能由接收方造成。所谓粘包问题主要还是因为接收方不知道消息之间的界限,不知道一次性提取多少字节的数据所造成的。

  • TCP为提高传输效率,一次发送的数据量太少时,发送端需要等缓冲区满才发送出去,造成粘包(Nagle算法)。
  • 接收方不及时接收缓冲区的包,造成多个包接收。
  • 拆包也会引起粘包(关于拆包见下面)

二、tcp拆包问题

1、什么是tcp拆包

发送方将一个数据包拆分成了多个数据包进行传送

2、拆包原因

  • 应用程序写入的数据大于套接字缓冲区大小,这将会发生拆包。
  • 链路层所发送的数据有一个最大传输单元(MTU)的限制(以太网的MTU是1500bytes),如果我们所传输的信息超过了限制,那么会在IP层进行分组,或者分片。 >解释:假设发送者的协议高层向IP层发送了长度为3008 bytes的数据报文,则该报文在添加20 bytes的IP包头后IP包的总 长度是 3028 bytes,因为3028 > 1500,所以该数据报文将被分片

tcp粘包问题是实际开发时会遇到的问题,面试官可以用该问题测试应聘者是否真的动手做过网络开发,如果没有实际开发经验,可能不知道这个问题。
[toc]

一、tcp粘包问题

1、什么是tcp粘包

TCP粘包是指发送方发送的多个数据包被当做一个数据包接收,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾。

  • 粘包可能由发送方造成,也可能由接收方造成。
  • 只有TCP有粘包现象,UDP永远不会粘包
  • 粘包不一定会发生

也称数据的无边界性,read()/recv() 函数不知道数据包的开始或结束标志(实际上也没有任何开始或结束标志),只把它们当做连续的数据流来处理。

2、粘包原因

出现粘包现象的原因是多方面的,它既可能由发送方造成,也可能由接收方造成。所谓粘包问题主要还是因为接收方不知道消息之间的界限,不知道一次性提取多少字节的数据所造成的。

  • TCP为提高传输效率,一次发送的数据量太少时,发送端需要等缓冲区满才发送出去,造成粘包(Nagle算法)。
  • 接收方不及时接收缓冲区的包,造成多个包接收。
  • 拆包也会引起粘包(关于拆包见下面)

二、tcp拆包问题

1、什么是tcp拆包

发送方将一个数据包拆分成了多个数据包进行传送

2、拆包原因

  • 应用程序写入的数据大于套接字缓冲区大小,这将会发生拆包。
  • 链路层所发送的数据有一个最大传输单元(MTU)的限制(以太网的MTU是1500bytes),如果我们所传输的信息超过了限制,那么会在IP层进行分组,或者分片。 >解释:假设发送者的协议高层向IP层发送了长度为3008 bytes的数据报文,则该报文在添加20 bytes的IP包头后IP包的总 长度是 3028 bytes,因为3028 > 1500,所以该数据报文将被分片

部分转自互联网,侵权删除联系

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » Linux C/C++面试之《网络编程系列》(8) tcp粘包、拆包问题(数据无边界性)及其解决办法求职学习资料
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们