Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1333871
  • 博文数量: 284
  • 博客积分: 3251
  • 博客等级: 中校
  • 技术积分: 3046
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-26 17:23
文章分类

全部博文(284)

文章存档

2019年(2)

2018年(5)

2015年(19)

2014年(13)

2013年(10)

2012年(235)

分类: LINUX

2012-12-21 16:47:27

  现在我们来看看TCP选项,以及TCP客户端发起连接请求时,发送的第一个TCP包(三次握手协议)的内容。
    TCP选项紧跟在基本TCP首部后面,计入首部中的“长度”字段。其基本格式定义是8bit类型+8bit长度+nbit内容,多个选项依次排列。类型用于说明该选项的类型,在2.6.16内核的实现中,有如下的类型定义:
    #define TCPOPT_NOP          1
    #define TCPOPT_EOL          0
    #define TCPOPT_MSS          2
    #define TCPOPT_WINDOW       3
    #define TCPOPT_SACK_PERM    4
    #define TCPOPT_SACK         5
    #define TCPOPT_TIMESTAMP    8
    TCPOPT_NOP表示无操作,作填充用;TCPOPT_EOL表示选项表结束;TCPOPT_MSS用于通告最大报文段长 度;TCPOPT_WINDOW是窗口扩大因子;TCPOPT_SACK_PERM表示允许SACK(有选择的确认),TCPOPT_SACK表示禁止 SACK。TCPOPT_TIMESTAMP表示时间戳选项。
    下面我们分析一下客户端发起的第一个TCP包的内容,它是一个只含有20字节TCP首部和20字节TCP选项的IP数据报,选项用于向服务端通告一些基本的设置信息,用于建立连接。我们剥去以太网首部和IP首部,只看TCP相关的部分,它总共有40字节:
    数据报内容                          含义
以下为基本TCP首部
    80 0c                               16位源端口(32780)
    13 88                               16位目的端口(5000)
    00 00 07 bc                         由协议栈随机生成的32位序号
    00 00 00 00                         32位确认序号
    a                                   首部长度(10*4=40)
    0 02                                4位保留,syn=1表示要发起建立一个新的连接
    16 d0                               16位窗口大小(5840)
    dd 51                               16位检验和
    00 00                               16位紧急指针
以下为TCP选项
    02 04 05 b4                         最大报文段长度为1460
    04 02                               允许SACK
    08 0a 00 0f 00 60 00 00 00 00       时间戳(时间戳为00 0f 00 60, 时间回显应答为0)
    01                                  无操作,填充
    03 03 02                            窗口扩大因子为2
阅读(1055) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~