标题:TCP数据包和TCP流的问题
只看楼主
lyl930130
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:323
专家分:111
注 册:2013-5-13
结帖率:91.43%
已结贴  问题点数:20 回复次数:16 
TCP数据包和TCP流的问题
假设服务器和客户端通信,然后自己在TCP/UDP上又封装了一个自定义的协议头A,数据格式就是: ip | tcp/udp | A | data 这样的情况。
服务器一直给客户端发送以上模式的数据。
如果是UDP(不考虑丢包什么的),我理解就是发一个包,收一个包。我发了多少个包,wireshark就能抓到多少个UDP的数据包,每个UDP的数据包都是 ip | udp | A |data 这样格式的数据。
但是TCP不是说是流吗,对TCP流的理解不是很清楚,只知道在接收方要一直recv,不能send几次就recv几次。
是说有可能一次发送就是我send的数据,有可能一次发送多个send的数据,有可能将一个send的数据拆分成几次发送,对吗?用wireshark抓包下来的数据,是每个TCP数据包里都是我自定义格式的这种单条数据,还是可能单条数据也会被分开在几个TCP数据包里,或者几条自定义的数据在一个TCP数据包里?
搜索更多相关主题的帖子: TCP 数据包 udp 数据 发送 
2017-12-21 00:20
凤凰院凶假
Rank: 2
来 自:春天里
等 级:论坛游民
威 望:1
帖 子:36
专家分:33
注 册:2016-12-22
得分:0 
老哥发错区了吧!
2017-12-21 08:18
燕小六
Rank: 4
来 自:北京
等 级:业余侠客
威 望:3
帖 子:49
专家分:247
注 册:2017-11-29
得分:10 
tcp是流的概念,没有包的概念,一段数据到底是分一个包还是多个包,是由很多因素决定的,比如mtu 发送方的数据传递,接受方的数据读取,窗口大小,等等。。
你的第二个问题的回答是都有可能
收到的鲜花
  • rjsp2017-12-21 09:18 送鲜花  10朵   附言:我很赞同
2017-12-21 08:49
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
每次有可能是 send != recv
每次send可以有头,但recv可能没有。


2017-12-21 08:59
燕小六
Rank: 4
来 自:北京
等 级:业余侠客
威 望:3
帖 子:49
专家分:247
注 册:2017-11-29
得分:0 
以下是引用吹水佬在2017-12-21 08:59:05的发言:

每次有可能是 send != recv
每次send可以有头,但recv可能没有。

有头和没头是什么意思
2017-12-21 09:30
lyl930130
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:323
专家分:111
注 册:2013-5-13
得分:0 
谢谢。

也就是我一次要发送的所有数据叫一个流。
我用了N次send来发送整个流数据,用了M次recv来接收完整个数据流,总共产生了K个TCP数据包。
M和N、K之间可能相等,可能不等,但是没有一个确定的关系。
N和K之间一定相等吗?
同问,有头和没头是什么意思
2017-12-21 13:48
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:10 
“头”,数据包头部信息,主要是一些数据包属性信息(如数据包的大小等等)。
send一个数据包后就由系统去处理怎样分块。recv也是由系统决定收到分发的数据块。
有时send一个数据包可能会recv收到几块数据。
2017-12-21 16:35
lyl930130
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:323
专家分:111
注 册:2013-5-13
得分:0 
回复 7楼 吹水佬
知道了,谢谢
2017-12-21 19:14
lyl930130
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:323
专家分:111
注 册:2013-5-13
得分:0 
还有一个关于流的问题。

具体一点。
客户端和服务器建立了一个TCP的socket连接。
服务器往客户端发了一个文件,文件发送完以后并没有断开,依旧保持连接。
那流到底是这个socket连接(文件发完还没有结束),还是文件发完流就结束了,还是这两个都是错的?
2017-12-21 19:19
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
TCP是通信协议,socket是通过TCP协议用主机的IP加端口作为连接端(套接字),常用(IP:端口)表示。
“流”主要特点是数据的顺序性,是按规定好的顺序来处理数据(读写序列)。
2017-12-21 19:55



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-483570-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.144024 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved