免费注册 查看新帖 |

Chinaunix

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

tcp协议复习-option字段 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-03-15 09:58 |只看该作者 |倒序浏览
对honeyd的tcp协议处理机制继续深入,今天看到了tcp_send()函数,其中有一段处理tcp的option字段的代码,有些不解,决定再复习一下tcp协议。
TCP 传输控制协议概述
       TCP是一种基于IP协议的,提供面向连接的,可靠的,全双工的字节流服务的传输层协议。
       TCP面向连接的概念可以理解为与2层相似的一种虚电路的概念,即在开始使用TCP传输数据之前,必须先建立一个连接(虚电路),在连接建立好之后,双方,也只能是连接的两端两个“端”才能开始进行数据交换。因此,广播和多播是不能应用于TCP的。
TCP的主要特点
       TCP自己组织需要发送的数据块的大小。这一点可能让很多开发者感觉不爽,也是造成很多bug的原因。当应用开发人员使用write或者send发送数据后,其实是将数据拷贝到了kernel中TCP的发送缓存中,这之后的事情就完全由TCP来决定了,TCP会把数据划分成它认为最合适的数据块。这个思想是和UDP完全不同的。
       当TCP发送一块数据后,它会启动一个定时器timer,等待接收方的确认,如果在timer规定的时间内接收不到确认数据,则重新发送刚才的数据块。
       当TCP收到来自另外一端的数据后,它会发送一个针对接受到的数据的确认,通常这个确认会推迟一段时间(非常短的时间)发送出去。
       TCP会始终保持一个整个TCP报文段(包括header与data)的校验和,用于检测在数据传输中是否出现错误。如果有则丢弃当前收到的这个数据段。
       TCP必须对到达的数据进行排序。
       TCP必须能够丢掉重复的数据段。
       TCP的另外一个非常重要的功能是它可用提供流量控制。它的两端都有一定的固定大小的buffer空间。接手段必须告诉发送端自己所能接收的最大数据,而发送端发送的数据不能超过接收端buffer的大小。
       TCP不对它所传送的字节流做任何解释,它不知道所传送的字节流是二进制还是ASCII字符,这个问题是应用层应该考虑的问题。
TCP的Header主要内容
       首先16位的src port与16位的dst port用来区分应用程序。
       TCP Header中两个32位是一个序号与一个确认序号,这两个东西比较难理解。首先序号用来标识从发送端向接收端发送的数据字节流,它表示这个数据段中的第一个数据字节。其实序号就是一个发送端发送数据的计数器,发送端发送的第二个TCP包的序号减去第一个TCP包的序号就可以得出第一个TCP包发送的数据块的大小。序号是一个32位的无符号证书,达到2的32次方减1后又从0开始。
       需要注意的是,当建立一个TCP连接时,SYN标志变为1,此时序号字段包含了发送方主机选择的出示序号ISN,但是一般情况下这个ISN为0,改发送方要发送的数据的第一个字节序号为这个ISN加1,因此在建立TCP连接的第一个TCP包中,序号为0,因为ISN为0,而建立TCP连接又没有要发送的数据,所以序号为0。
       确认序号标识接收方(即发送确认的一方)所期望接收到的下一个序号,也就是它接收到的TCP包的序号加1,并且只有ACK位为1时此确认序号才生效。但是通常情况下这种情况总是正确的,因为一个TCP连接一旦建立,之后的报文中ACK位总会被设置。
       需要注意的是,序号和确认序号是有方向的,因为TCP提供的是全双工的服务,所以在每一个方向上的序号和确认序号都是不同的。
       确认序号其实就是表示已经收到了发送端发送的一些数据,但是当前确认序号所标识的数据还没有收到,这个确认序号可以被发送方用来判断是否需要重发。
       4位的Header长度标识当前TCP包的header长度,最长是60个字节,而正常的TCPheader长度是20字节。
       6位的标志位。URG:紧急指针有效;ACK:确认序号有效;PSH:接收方应该立刻将此包发给应用层;RST:复位一个连接;SYN:发起一个TCP连接;FIN:结束一个连接。
       16位的窗口大小。TCP的流量控制由连接每一端通过声明窗口大小来提供。窗口大小为字节数,从确认序号的值开始。比如一端声明窗口大小为4096,当前的确认序号为10000,则表明这一端当前能接收的最大字节数为4096,而它希望接收从序号10000开始的数据。
       16位的校验和。这个校验和覆盖整个TCP报文。它一定是由发送端来计算和填充的。而且必须由接收端进行验证。
       16位的紧急数据指针,只有当URG标志位为1时才有效。它是一个偏移量,标识从序号开始的直到指针所指的数据,这一段数据被发送端设置为紧急数据。
       TCP Header中还有一些options字段,最常用的是MSS字段,通常是SYN报文中携带这个字段,表明本端所能接收的最大长度的报文段。
       另外需要表明的是,TCP可以不携带任何数据,而且这种报文还很有用,可用用来确认数据,也可以用来处理超时。

下面是option字段值的列表

Kind   Meaning                               Reference
----   -------------------------------   ---------
  0       End of Option List                 [RFC793]
  1       No-Operation                       [RFC793]
  2       Maximum Segment Size               [RFC793]
  3       WSOPT - Window Scale              [RFC1323]
  4       SACK Permitted                    [RFC2018]
  5       SACK                              [RFC2018]
  6       Echo (obsoleted by option 8)      [RFC1072]
  7       Echo Reply (obsoleted by option 8)[RFC1072]
  8       TSOPT - Time Stamp Option         [RFC1323]
  9       Partial Order Connection Permitted[RFC1693]
10       Partial Order Service Profile     [RFC1693]
11       CC                                [RFC1644]
12       CC.NEW                            [RFC1644]
13       CC.ECHO                           [RFC1644]
14       TCP Alternate Checksum Request    [RFC1146]
15       TCP Alternate Checksum Data       [RFC1146]
16       Skeeter                           [Knowles]
17       Bubba                             [Knowles]
18       Trailer Checksum Option    [Subbu & Monroe]
19       MD5 Signature Option              [RFC2385]
20       SCPS Capabilities                   [Scott]
21       Selective Negative Acknowledgements [Scott]
22       Record Boundaries                   [Scott]
23       Corruption experienced              [Scott]
24       SNAP                             [Sukonnik]
25       Unassigned (released 12/18/00)
26       TCP Compression Filter           [Bellovin]


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/93613/showart_1863685.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP