免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4635 | 回复: 8
打印 上一主题 下一主题

[网络子系统] tcp三次握手,客户端发送最后一个ack时可以带数据? [复制链接]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-09-24 23:09 |只看该作者 |倒序浏览
我在大学那本网络教材中看到了,但是rfc上找了好久没找到,不知道哪位知道呢个rfc上明确提到了这点。。。
感激不尽!

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
2 [报告]
发表于 2014-09-24 23:10 |只看该作者
教材上讲三次握手时,说可以携带数据,rfc上实在是没看出痕迹啊,英语不好,不知道哪位兄弟知道具体哪个rfc上有,告诉哥们一声

论坛徽章:
9
辰龙
日期:2014-08-18 20:38:42未羊
日期:2014-09-04 08:50:45丑牛
日期:2014-09-06 00:12:55寅虎
日期:2014-12-22 20:50:56摩羯座
日期:2015-01-14 22:28:15巳蛇
日期:2015-01-23 20:39:272015年辞旧岁徽章
日期:2015-03-03 16:54:1515-16赛季CBA联赛之青岛
日期:2016-03-13 23:37:1915-16赛季CBA联赛之深圳
日期:2016-03-29 18:52:38
3 [报告]
发表于 2014-09-24 23:55 |只看该作者

论坛徽章:
208
巨蟹座
日期:2013-09-02 09:16:36卯兔
日期:2013-09-02 20:53:59酉鸡
日期:2013-09-05 21:21:45戌狗
日期:2013-10-15 20:51:17寅虎
日期:2013-10-18 21:13:16白羊座
日期:2013-10-23 21:15:19午马
日期:2013-10-25 21:22:48技术图书徽章
日期:2013-11-01 09:11:32双鱼座
日期:2013-11-01 20:29:44丑牛
日期:2013-11-01 20:40:00卯兔
日期:2013-11-11 09:21:32酉鸡
日期:2013-12-04 19:56:39
4 [报告]
发表于 2014-09-25 09:34 |只看该作者
可以吧,自己抓包看一下,就印象深刻了

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
5 [报告]
发表于 2014-09-25 14:19 |只看该作者
本帖最后由 mrpre 于 2014-09-25 14:20 编辑

回复 3# Tinnal


多谢哈,我也在RFC793中找到了线索。

If the state is SYN-SENT then
    first check the ACK bit
..........
...........
.........
change the connection state to ESTABLISHED, form an ACK segment

         <SEQ=SND.NXT><ACK=RCV.NXT><CTL=ACK>

        and send it.  

      Data or controls which were queued for  transmission may be included


论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
6 [报告]
发表于 2014-09-25 16:35 |只看该作者
构造三次握手最后一个ack带数据的socket代码,参考网上修改的,可以运行,并且验证成功。
  1. int main(int argc,char **argv)
  2. {
  3.         int listenfd,connfd,opt=1;
  4.         pid_t childpid;
  5.         int i;
  6.         socklen_t clilen;
  7.         struct sockaddr_in servaddr;
  8.         struct sockaddr_in realaddr;
  9.                 char GET[]="GET / HTTP/1.0\r\n\r\n";
  10.                 char msg[1024]={0};
  11.                
  12.         if (argc != 3) {
  13.                 printf("usage: %s serverip serverport\n", argv[0]);
  14.                 return 0;
  15.         }   
  16.         if ((listenfd=socket(AF_INET,SOCK_STREAM,0))==-1)
  17.                 printf("socket error errno=%d", errno);

  18.         opt = 1;
  19.         setsockopt(listenfd, IPPROTO_TCP, TCP_DEFER_ACCEPT, &opt, sizeof(opt));

  20.         bzero(&realaddr,sizeof(realaddr));
  21.         realaddr.sin_family=AF_INET;
  22.         realaddr.sin_port=htons(atoi(argv[2]));
  23.         inet_pton(AF_INET,argv[1],&realaddr.sin_addr);
  24.         if (connect(listenfd,(struct sockaddr*)&realaddr,sizeof(realaddr))==-1)
  25.                 printf("connect error errno=%d", errno);
  26.                                
  27.                 printf("ready to send\n");
  28.         send(listenfd,GET,sizeof(GET),0);
  29.                 printf("Testing server\n");
  30.                 if(0 == recv(listenfd,msg,500,0))
  31.                 {
  32.                         printf("read fin\n");
  33.                         sleep(1);
  34.                         close(listenfd);
  35.                 }
  36.                
  37.                 printf("Server is Standard\n");
  38.                
  39. }
复制代码

论坛徽章:
0
7 [报告]
发表于 2014-09-25 16:47 |只看该作者
  准确的说, 下次的数据里面可以包含上次的ack。

论坛徽章:
0
8 [报告]
发表于 2015-12-22 10:23 |只看该作者
讲很对,rfc没有具体看到,但是《http权威指南》P88 里看到了这么一句:由于确认报文很小,所以TCP允许在发往相同方向的的输出数据分组中对其进行“捎带”。
   

论坛徽章:
20
程序设计版块每日发帖之星
日期:2015-08-17 06:20:00程序设计版块每日发帖之星
日期:2016-07-16 06:20:00程序设计版块每日发帖之星
日期:2016-07-18 06:20:00每日论坛发贴之星
日期:2016-07-18 06:20:00黑曼巴
日期:2016-12-26 16:00:3215-16赛季CBA联赛之江苏
日期:2017-06-26 11:05:5615-16赛季CBA联赛之上海
日期:2017-07-21 18:12:5015-16赛季CBA联赛之青岛
日期:2017-09-04 17:32:0515-16赛季CBA联赛之吉林
日期:2018-03-26 10:02:16程序设计版块每日发帖之星
日期:2016-07-15 06:20:0015-16赛季CBA联赛之江苏
日期:2016-07-07 18:37:512015亚冠之萨济拖拉机
日期:2015-08-17 12:21:08
9 [报告]
发表于 2015-12-22 15:41 |只看该作者
怎么保证的?靠TCP_DEFER_ACCEPT?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP