Chinaunix

标题: tcp 分成segment后,请问收方需要应答几次? [打印本页]

作者: chouxiaoya8100    时间: 2016-02-16 16:53
标题: tcp 分成segment后,请问收方需要应答几次?
比如,某个报文过大,所以发方分成多个segment,然后发给收方,收方手打后,需要应答几次给发方?

问题2 : 如果中间有个segment发送在网络中出错,但是其 前驱 和 后继 都对,那么协议栈如何处理?

只是单纯的发送 出错的? 如果只发送出错的,其后继的segment不发的话,收方收到后,岂不是粘包了!!!!!(协议栈就出现吧粘包)
作者: chouxiaoya8100    时间: 2016-02-17 08:58

作者: Godbach    时间: 2016-02-17 11:24
回复 1# chouxiaoya8100
你指的是分片吗?


   
作者: Godbach    时间: 2016-02-17 11:35
回复 1# chouxiaoya8100

TCP 协议栈是按照 seq 进行 ACK 的。

对于 tcp segment,肯定可以逐一 ACK,或者合并 ACK。

对于 ip  fragment,那应该是需要等报文凑齐才能 ACK 的。


   
作者: chouxiaoya8100    时间: 2016-02-17 15:44
回复 4# Godbach





TCP 协议栈是按照 seq 进行 ACK 的。

对于 tcp segment,肯定可以逐一 ACK,或者合并 ACK。


逐一我理解,但合并ack,能否举例?

为什么问这个问题,因为我有次抓包,遇到个操蛋问题, 服务器再应用层分片(因为数据太多),结果,客户端少了给服务器1次ack。
所以我才来问,是不是每个段,都有ack应答该段?



对于 ip  fragment,那应该是需要等报文凑齐才能 ACK 的。 请问什么是ip 分片?  应用层数据过大的时候,在tcp层就已经分段了,一个包1460个字节,

无法超过160字节,你说的ip segment, 到底是什么意思?

   
作者: chouxiaoya8100    时间: 2016-02-17 15:46
回复 4# Godbach


对于 tcp segment,肯定可以逐一 ACK,或者合并 ACK。  什么叫合并ack ?



"对于 ip  fragment,那应该是需要等报文凑齐才能 ACK 的。"   应用层进入传输层的时候,已经分段了,1460个字节。

为什么传输层到 ip 层,还要分段。


   
作者: Godbach    时间: 2016-02-17 17:10
回复 6# chouxiaoya8100

TCP/IP 详解 卷1, 看一下相关章节吧,亲


   
作者: chouxiaoya8100    时间: 2016-02-17 19:54
回复 7# Godbach

这本书正在看,

再请教另一个问题吧,pppoe帧的问题。

pppoe是以太帧中包裹了ppp报文, tcp协议-详解,这本书对pppoe讲解的很不好。      我们知道应用层1460字节分段,进入传输层,网络层,最后进入网络接口层。

驱动程序封装成以太帧。以太帧大小为1518字节(ip头20字节+tcp20字节+以太帧头和尾一共18字节)。然后发送到以太网中。

既然pppoe 是以太帧包裹了ppp报文, ppp报文里也有字段, pppoe肯定会超过1518字节。

以太网规定不能超出1518字节,这不矛盾吗?
   
作者: Godbach    时间: 2016-02-18 12:24
本帖最后由 Godbach 于 2016-02-18 12:25 编辑

回复 8# chouxiaoya8100
既然是 PPPoE 的话,那么肯定最后的帧要遵守以太网的要求。

所以实际的最大 IP Payload 就得相应的减小。


   
作者: chouxiaoya8100    时间: 2016-02-18 13:15
回复 9# Godbach


说的好, 好了,我可以进一步请教你了。

我记得我曾经抓包,wireshark抓包。

似乎看不到以太帧汇中有ppp 的东东。


我在想,什么时候以太帧里会有ppp的东东? 是不是只有拨号上网的时候,才会出现ppp, 拨号成功后,以后的帧里,就没有ppp了。


tcp协议详解 这本书名气虽大,但很多地方还是欠缺,比如ppp

   
作者: Godbach    时间: 2016-02-18 13:32
回复 10# chouxiaoya8100

按理说一直都是 PPPoE 的报文了。你可以直接通过 ADSL 上网,抓包看下。

   
作者: chouxiaoya8100    时间: 2016-02-18 15:02
回复 11# Godbach


看不到额, 不知道是不是wireshrk作怪?

还是公司的带宽环境导致的?反正以太帧头后紧跟着第2个字节是0x04——————也就是ip包的协议版本。

说明是ip包。

0x7e是ppp头的第一个字节。很明显,我没在以太帧头后看到0x7e。 所以我也很无奈。


谁有环境帮忙看看额。

顺便说一句,我刚才查阅过资料,pppoe 是1492自己(ppp头和尾一共8个字节) 。

其实很我郁闷:如果2台机器在一个局域网中,路由器里设置好拨号上网了。

这2个机器通信,帧是什么类型? 纯以太帧?还是pppoe?




如果都不能上网,这2个机器通信,自然是以太帧了。



   
作者: Godbach    时间: 2016-02-18 16:05
回复 12# chouxiaoya8100

如果你在 ADSL 的环境中,又通过了路由器,那你抓包无非抓到的无非是到路由器的报文了,应该是 IP 包。


   
作者: nswcfd    时间: 2016-02-19 17:14
pppoe\ipsec\gre等额外封装的协议,为避免不必要的分片,通常要求layer4减少报文大小,比如在tcp options里协商一个较少的MSS。

自动mtu发现机制,在实际中通常work的不是很好,很多站点不理会DF标记。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2