如果IP层分片了, 那么谁来指这个分片重新组装好?

femalelover 2009-12-23 11:56:02
加精
我假设发送端IP报文的DF位置0, 允许分片. 在路径上某个路由器限于MTU, 将该IP报文分成了3片才发送出去.

那么有几个问题:
1, 由谁来将这个分片重新组装好? 接收端的IP协议吗?
2, 如果是IP协议, 那么IP协议是不是也要像TCP协议一样, 启动一个定时器, 等到3片都到齐?
3, 如果有1片丢了怎么办?

另外再附带问一个:
4, 一个TCP连接启动一个定时器, 每发出一个包, 收到对端确认之前不发第二个包, 这样效率应该很低吧? 为什么使用TCP的FTP传文件有时还挺快的呢?

每个问题50分哈, 多谢多谢.
...全文
1242 78 打赏 收藏 转发到动态 举报
写回复
用AI写文章
78 条回复
切换为时间正序
请发表友善的回复…
发表回复
捧剑者 2010-01-14
  • 打赏
  • 举报
回复
发送端tcp在定时的时间内没有收到对方tcp发回的确认信号,就会重发。
lipech1987 2009-12-28
  • 打赏
  • 举报
回复
你们都是高手啊
sjx_100 2009-12-28
  • 打赏
  • 举报
回复
[Quote=引用 63 楼 vincent_1011 的回复:]
引用 55 楼 wangmu7206 的回复:
引用 53 楼 vincent_1011 的回复:
引用 50 楼 wangmu7206 的回复:
  补充:这里负责重传的上层是指TCP或者使用了UDP的自行实现超时重传的应用层。


  网上转载的。
  如果60-120秒后(IP_FRAG_TIME常量指定。(30*HZ))重组队列内包未到齐, 则重组过程失败, 重组队列被释放, 同时向发送方以ICMP协议通知失败信息.

只是通知失败,但是对方的IP层并不因此而重发。
而且,这个通知按照标准也是可发可不发。

那IP层是怎么通知TCP让他重发的,例如接到1,3片,丢了第2片,那IP层也不管也重组丢上去,然后让TCP层校验数据???

如果是这样,那就有一点说不通,IP层有一个定时器等待片到齐啊。超时还没齐的话,会怎么样呢?
[/Quote]

超时还没到齐的话IP层就将之前收到的所有分片丢弃,除此以外不做任何动作。

至于重传,是因为TCP层的定时器超时了仍然没有收到预想中的TCP报文,因此TCP主动发起重传请求。
chenyanhongjiayou 2009-12-28
  • 打赏
  • 举报
回复
好好
VCkid 2009-12-27
  • 打赏
  • 举报
回复
学习学习
yongnicheng 2009-12-27
  • 打赏
  • 举报
回复
jie fen
wstzlq 2009-12-27
  • 打赏
  • 举报
回复
学习中!
zhongpingjun 2009-12-27
  • 打赏
  • 举报
回复
我来光看
J20082020 2009-12-27
  • 打赏
  • 举报
回复
路过接分
zhhalpha 2009-12-27
  • 打赏
  • 举报
回复
真的吗
fatmind 2009-12-27
  • 打赏
  • 举报
回复
[Quote=引用 38 楼 xsnbzj 的回复:]
这些东西还是不要这么讨论了,会误导各位朋友。需要了解TCP/IP的协议以及通信机制,请参考TCP/IP协议卷1、2、3,其实搜索几篇文章也就了解各大概了。这么讨论,按照自己的理解进行讨论,只会弄得云里雾里。数据网络通信协议还是挺复杂的,如果感兴趣,可以访问这么几个网站。此外,自己安装个wireshark捕获下自己上网的数据包也有助于理解数据通信协议的学习理解。

www.cnpaf.net
www.netexpert.cn

[/Quote]

同意。觉得根本没有人说清楚。
crazy_jun 2009-12-27
  • 打赏
  • 举报
回复
[Quote=引用楼主 femalelover 的回复:]
我假设发送端IP报文的DF位置0, 允许分片. 在路径上某个路由器限于MTU, 将该IP报文分成了3片才发送出去.

那么有几个问题:
1, 由谁来将这个分片重新组装好? 接收端的IP协议吗?
2, 如果是IP协议, 那么IP协议是不是也要像TCP协议一样, 启动一个定时器, 等到3片都到齐?
3, 如果有1片丢了怎么办?

另外再附带问一个:
4, 一个TCP连接启动一个定时器, 每发出一个包, 收到对端确认之前不发第二个包, 这样效率应该很低吧? 为什么使用TCP的FTP传文件有时还挺快的呢?

每个问题50分哈, 多谢多谢.

[/Quote]
重组是目的主机MAC地址做的、
xiejhzwrgcky 2009-12-27
  • 打赏
  • 举报
回复
up
捧剑者 2009-12-26
  • 打赏
  • 举报
回复
[Quote=引用 53 楼 vincent_1011 的回复:]
引用 50 楼 wangmu7206 的回复:
补充:这里负责重传的上层是指TCP或者使用了UDP的自行实现超时重传的应用层。


网上转载的。
如果60-120秒后(IP_FRAG_TIME常量指定。(30*HZ))重组队列内包未到齐, 则重组过程失败, 重组队列被释放, 同时向发送方以ICMP协议通知失败信息.
[/Quote]
只是通知失败,但是对方的IP层并不因此而重发。
而且,这个通知按照标准也是可发可不发。
qq2220qq 2009-12-26
  • 打赏
  • 举报
回复
很强大
xyzdelphi 2009-12-26
  • 打赏
  • 举报
回复
它提高了效率,并不是你发的每一个包它都要确认
findee 2009-12-26
  • 打赏
  • 举报
回复
学习一下。
vincent_1011 2009-12-26
  • 打赏
  • 举报
回复
[Quote=引用 55 楼 wangmu7206 的回复:]
引用 53 楼 vincent_1011 的回复:
引用 50 楼 wangmu7206 的回复:
补充:这里负责重传的上层是指TCP或者使用了UDP的自行实现超时重传的应用层。


网上转载的。
如果60-120秒后(IP_FRAG_TIME常量指定。(30*HZ))重组队列内包未到齐, 则重组过程失败, 重组队列被释放, 同时向发送方以ICMP协议通知失败信息.

只是通知失败,但是对方的IP层并不因此而重发。
而且,这个通知按照标准也是可发可不发。
[/Quote]
那IP层是怎么通知TCP让他重发的,例如接到1,3片,丢了第2片,那IP层也不管也重组丢上去,然后让TCP层校验数据???

如果是这样,那就有一点说不通,IP层有一个定时器等待片到齐啊。超时还没齐的话,会怎么样呢?
捧剑者 2009-12-26
  • 打赏
  • 举报
回复
靠,我最后的回复怎么给删了?!
piaoyituohaizyf 2009-12-26
  • 打赏
  • 举报
回复
IP这块儿我喷不是很懂哦、、、
加载更多回复(53)

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧