美文网首页
TCP-TCP首部

TCP-TCP首部

作者: 长腿小西瓜 | 来源:发表于2018-01-27 16:36 被阅读88次

1概述

TCP 是面向连接的运输层协议。它是可靠的,不丢失的,不重复的,无差错并按序到达的,点对点运输的,全双工通信。

1.1 TCP连接

将TCP链接的端点,叫做套接字(socket),表示方法如下:

套接字 socket = (IP地址:端口号)

所以TCP连接未两个套接字之间的连接:

TCP连接 ::= {socket1, socket2} = {(IP1: port1),(IP2: port2)}

1.2 TCP首部

报文段首部格式

TCP首部有20个字节的固定数据,用来存放报文传输过程所需的信息。各字段的含义如下:

1.2.1 源端口,目的端口

各占2个字节。

1.2.2 序号

又叫“报文段序号”,占4个字节。因为TCP是面向字节的,尽管一次报文传输的字节数不同,但是每个数据段的字节都有对应的序号。
比如,发送方,该字段值是1001,发送的数据为1000字节,这这段数据开始字节的序号是1001,最后一个字节的序号2000。

1.2.3 确认号

占4个字节,是期望发送方下一个报文第一个字节的序号值。

例如接收方接受到发送方的报文,其中序号字段值是2001,数据区长度为2000个字节。那么接受下次接受发送发送的报文中,开始的序号值,应该是4001。所以在接收方回答上述报文时,会在确认号字段写:4001。

所以,如果确认号是N,则表示N-1个序号的字节数据已成功接收。

确认号占4个字节,可以对4GB的数据进行编号。

1.2.4 数据偏移

占4位,表示报文中除开有效数据段,报文首部的长度。所以数据偏移的最小值是20字节(固定首部)。

注意,数据偏移的计算单位是32位字,即4字节长的字。所以对于,占4位的数据偏移字段。最大值是:15 * 4 = 60字节。

1.2.5 保留

占6位,目前置为0,今后使用

1.2.6 控制位

共有6个控制位,意义分别如下:

1.2.6.1 紧急URG

占1位,当URG值为1时,发送方应用程序,告诉发送方的TCP有紧急数据需要处理,TCP就将紧急数据放到数据区的最前面。紧跟其后是普通数据。

1.2.6.2 确认ACK

占1位,当连接建立后,ACK必须置为1,仅当ACK=1时,确认号才有效。当ACK=0,确认号是1。
这是因为确认号是希望下次接受到的数据第一个字节序号,但是ACK=0时,连接都还没建立,不可能传送有效数据。

1.2.6.3 推送PSH

占1位,当PSH值为1时,发送方会立即创建一个报文段发送出去,接收方接收到PSH字段为1的值时,会立即将该报文中的数据交付接收应用程序,不用等到整个缓存填满了后再向上交付。

1.2.6.4 复位RST

占1位,当RST置为1时,用来拒绝一个非法的报文段和拒绝打开一个连接,RST也可称为重建位或者重置位。

1.2.6.5 同步SYN

占1位,用在连接建立时同步序号。当SYN置为1时,表示连接请求或连接接受报文。

1.2.6.6 终止FIN

当FIN=1,表示发送发的数据已发送完毕,请求释放连接。

1.2.7 窗口

占2个字节,作为接收方让发送方设置起发送窗口的依据,以字节为单位。

例如,发送了一个报文段,起确认号1001(期望下一个收到的报文中,数据区第一个字节的序号是1001),窗口字段是1000。就是告诉对方:“从1001开始,我最多只能接受1000个字节的数据,你发送数据的时候考虑下这点。”

窗口值时动态变化的。

1.2.8 校验和

发送方在发送报文前,会加上在前面加12字节的伪首部,计算校验和。然后写入该字段。当接收方接收到数据,同样计算校验和。

1.2.9 紧急指针

占2个字节。在URG=1时,表示紧急数据的长度,指出了紧急数据的末尾在报文段的位置。

当窗口值为0时,也可以发送紧急数据。

1.2.10 选项

1.2.10.1 MSS

Maximum Segement Sie, 即最大报文段,但是正确的含义,是最大的数据区长度。当不设置,默认是536字节。所以互联网中的主机,都可以接收的报文段长度是536+20(固定首部)=556字节。

1.2.10.2 窗口扩大

占3个字节,其中有一个字节表示移位值S。新的窗口值等于 2^(16 + S)。

1.2.10.3 时间戳,时间戳回送回答

  • 计算RTT
    用时间戳回送回答字段,减去时间戳字段值,就能得出报文往返的时间。

  • PAWS
    防止序号绕回。即在序号重复时,利用该字段区别是新报文,还是迟到的报文。

1.2.10.3 SACK

Selective Acknowledgment,选择确认。

选择确认的例子

从上图看出,每个不连续字节块有2个边界。我们知道首部选项长度最长为40(60- 20)字节。指明一个边界需要4个字节,所以最多能指明4个不连续字节块的边界信息( 4 * 4 * 2 =32字节 )。

这是因为,指明5个不连续字节块的边界信息,则需要 (4 * 5 * 2 = 40个字节),而头部还需要两个字节,一个用来指明SACK选项,一个用来指明SACK占用的字节数。那么总数变成40+2= 42字节,这超过了报文允许的最大选项长度40字节。

相关文章

  • TCP-TCP首部

    1概述 TCP 是面向连接的运输层协议。它是可靠的,不丢失的,不重复的,无差错并按序到达的,点对点运输的,全双工通...

  • 2019-06-10 认识HTTP

    HTTP协议 首部行介绍 通用首部 请求首部 条件式请求首部: 安全请求首部: 响应首部: 安全响应首部 实体首部...

  • HTTP报文

    HTTP方法 状态码 304, 首部 请求首部 响应首部 实体首部

  • HTTP 首部

    分类 请求首部字段、响应首部字段、通用首部字段、实体首部字段。注意,实体分为实体首部、实体主体。 请求首部字段 响...

  • HTTP报文(3):读《HTTP权威指南》笔记

    首部的分类:通用首部,请求首部,响应首部,实体首部,扩展首部。 通用首部:客户端和服务端都可以使用,比如Date首...

  • 14-01:常见的 HTTP 的头部

    可以将 http 首部分为通用首部,请求首部,响应首部,实体首部 通用首部表示一些通用信息,比如 date 表示报...

  • HTTP常用首部整理

    可以将HTTP首部分为通用首部、请求首部、响应首部、实体首部、拓展首部。 通用首部:客户端和服务端都可以用,描述一...

  • HTTP回顾6

    HTTP首部 报文首部 HTTP请求报文 请求行、请求首部字段、通用首部字段、实体首部字段、其他 响应报文 状态行...

  • 计算机网络

    一、tcp/http 1、TCP首部。 IP数据报(IP首部+TCP报文段(TCP首部+TCP数据)) TCP首部...

  • HTTP 之 首部行介绍

    首部行格式 Name: Value#注意,冒号后面有一个空格 http协议首部的分类: .通用首部 .请求首部,请...

网友评论

      本文标题:TCP-TCP首部

      本文链接:https://www.haomeiwen.com/subject/csrnaxtx.html