1, 端口号: 用来标识同一台计算机的不同的应用进程.
1)源端口: 源端口和 IP 地址的作用是标识报文的返回地址.
2)目的端口: 端口指明接收方计算机上的应用程序接口.
TCP 报头中的源端口号和目的端口号同 IP 数据报中的源 IP 与目的 IP 唯一确定一条 TCP 连接.
2, 序号和确认号: 是 TCP 可靠传输的关键部分. 序号是本报文段发送的数据组的第一个字节的序号. 在 TCP 传送的流中, 每一个字节一个序号. e.g. 一个报文段的序号为 300, 此报文段数据部分共有 100 字节, 则下一个报文段的序号为 400. 所以序号确保了 TCP 传输的有序性. 确认号, 即 ACK, 指明下一个期待收到的字节序号, 表明该序号之前的所有数据已经正确无误的收到. 确认号只有当 ACK 标志为 1 时才有效. 比如建立连接时, SYN 报文的 ACK 标志位为 0.
3, 数据偏移 / 首部长度: 4bits. 由于首部可能含有可选项内容, 因此 TCP 报头的长度是不确定的, 报头不包含任何任选字段则长度为 20 字节, 4 位首部长度字段所能表示的最大值为 1111, 转化为 10 进制为 15,15*32/8 = 60, 故报头最大长度为 60 字节. 首部长度也叫数据偏移, 是因为首部长度实际上指示了数据区在报文段中的起始偏移值.
4, 保留: 为将来定义新的用途保留, 现在一般置 0.
5, 控制位: URG ACK PSH RST SYN FIN, 共 6 个, 每一个标志位表示一个控制功能.
1)URG: 紧急指针标志, 为 1 时表示紧急指针有效, 为 0 则忽略紧急指针.
2)ACK: 确认序号标志, 为 1 时表示确认号有效, 为 0 表示报文中不含确认信息, 忽略确认号字段.
3)PSH:push 标志, 为 1 表示是带有 push 标志的数据, 指示接收方在接收到该报文段以后, 应尽快将这个报文段交给应用程序, 而不是在缓冲区排队.
4)RST: 重置连接标志, 用于重置由于主机崩溃或其他原因而出现错误的连接. 或者用于拒绝非法的报文段和拒绝连接请求.
5)SYN: 同步序号, 用于建立连接过程, 在连接请求中, SYN=1 和 ACK=0 表示该数据段没有使用捎带的确认域, 而连接应答捎带一个确认, 即 SYN=1 和 ACK=1.
6)FIN:finish 标志, 用于释放连接, 为 1 时表示发送方已经没有数据发送了, 即关闭本方数据流.
6, 窗口: 滑动窗口大小, 用来告知发送端接受端的缓存大小, 以此控制发送端发送数据的速率, 从而达到流量控制. 窗口大小时一个 16bit 字段, 因而窗口大小最大为 65535.
7, 校验和: 奇偶校验, 此校验和是对整个的 TCP 报文段, 包括 TCP 头部和 TCP 数据, 以 16 位字进行计算所得. 由发送端计算和存储, 并由接收端进行验证.
8, 紧急指针: 只有当 URG 标志置 1 时紧急指针才有效. 紧急指针是一个正的偏移量, 和顺序号字段中的值相加表示紧急数据最后一个字节的序号. TCP 的紧急方式是发送端向另一端发送紧急数据的一种方式.
9, 选项和填充: 最常见的可选字段是最长报文大小, 又称为 MSS(Maximum Segment Size), 每个连接方通常都在通信的第一个报文段 (为建立连接而设置 SYN 标志为 1 的那个段) 中指明这个选项, 它表示本端所能接受的最大报文段的长度. 选项长度不一定是 32 位的整数倍, 所以要加填充位, 即在这个字段中加入额外的零, 以保证 TCP 头是 32 的整数倍.
10, 数据部分: TCP 报文段中的数据部分是可选的. 在一个连接建立和一个连接终止时, 双方交换的报文段仅有 TCP 首部. 如果一方没有数据要发送, 也使用没有任何数据的首部来确认收到的数据. 在处理超时的许多情况中, 也会发送不带任何数据的报文段.
来源: http://www.bubuko.com/infodetail-2647277.html