TCP协议传输数据的时候进行了分片,用wireshark抓包,能否在最后一个分片中找到一个分片传输结束的标志位

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TCP协议传输数据的时候进行了分片,用wireshark抓包,能否在最后一个分片中找到一个分片传输结束的标志位相关的知识,希望对你有一定的参考价值。

类比IP分片一样,IP分片报文的最后一个报头里有标志分片结束的一个标志位....TCP分片有么?

不需要结束标志的,每个都有偏移和当前长度。而且开始的有总长度。所以总可以确定是否已经接收完整了。 IP分片,TCP是流式的,分片干吗?追问

TCP协议有个MSS,超过MSS就需要分片。而且TCP头部里面没有存储分片前的总长度。怎么知道一个TCP分片报文接收完整了?

追答

我记成ip分片了。tcp分片是啥意思?我一般处理的时候最多由于ip层的乱序和重复导致要去除一些重复包,乱序的要根据序号重排。没看过tcp分片啥的。如果有,你附一个包上来。

追问

  TCP分片的情况有很多啊,用UDP协议才会有IP分片。TCP分片了以后就不需要IP分片了,你留个邮箱我给你发个TCP分片报文

追答

我明白你说的了,那个不叫分片,那个只是一个应用层包被分到多个tcp包里面传输了。一般应用层都会有一个长度指示的。先读固定长度头(里面一般有后面还有多少数据的指示),然后就不停接受直到需要的数据收全了或者遇到错误(socket断开之类的,一般recv会返回-1,再调用GetLastError或者看errno就知道具体原因了)。

参考技术A 没有,TCP是靠IP分段传输的,其本身没有分段标志。 参考技术B 没有,因为TCP层是基于流的,也就是它本身没有分片的概念。
简单的说,你所看到的TCP层上分成多个包来传输,那不叫分片,而是TCP层的主动根据mss大小来分段。这个段,叫做segment,在发出来之前,就分好了。在第一个包里边,放着TCP层长度信息,借由这个信息,TCP层可以在收到全部分段以后组合起来。所以也不需要你所说的,结束标志。

DNS啥时候用UDP啥时候用TCP来传输?

参考技术A 一、DNS报文角度来看
主要是查看DNS报文首部中的标志字段
[QR][opcode][AA][TC][RD][RA][(zone)][rcode]

主要关注字段为TC字段,当TC字段为1时,表示应答总长度超过512字节,只返回前512个字节,这时DNS就需要使用TCP重发原来的查询请求。因为在UDP的应用程序中,其应用程序被限制在512个字节或更小,因此DNS报文穿数据流只能有512字节,而TCP能将用户的数据流分为一些报文段,因此TCP就能用多个报文段去传超过512字节的数据流或是任意长度的数据流。

大多数书只写DNS使用UDP 53端口,这并不完整,会导致别人误解,认为DNS只用UDP,不用TCP,呵呵。

二、应用角度来看
区域传输用TCP,其他用UDP。
什么是区域传输?
dns的规范规定了2种类型的dns服务器,一个叫主dns服务器,一个叫辅助dns服务器。在一个区中主dns服务器从自己本机的数据文件中读取该区的dns数据信息,而辅助dns服务器则从区的权威dns服务器中读取该区的dns数据信息。当一个辅助dns服务器启动时,它需要与主dns服务器通信,并加载数据信息,这就叫做区传送(zone transfer).
通俗地讲,就是DNS服务器之间传输时使用TCP,而客户端与DNS服务器之间传输时用的是UDP。

以上是关于TCP协议传输数据的时候进行了分片,用wireshark抓包,能否在最后一个分片中找到一个分片传输结束的标志位的主要内容,如果未能解决你的问题,请参考以下文章

tcp分片和ip分片的区别

IP 分片/MTU 与TCP分段/MSS

IP分片--为什么单次最大传输1472个字节

IP分片--为什么单次最大传输1472个字节

关于TCP协议的要点

TCP/IP详解 笔记八