TCP的概述
TCP提供一种面向连接的、可靠的字节流服务。面向连接意味着两个使用TCP的应用在彼此交换数据之前必须建立一个TCP连接。TCP仅仅有两方进行彼此通信,广播和多播不能用于TCP。
TCP的首部
TCP数据被封装在IP数据包中,如下图:
TCP首部的数据格式:
不计任选字段,它通常是20个字节。
1.序列号和确认号
他们是TCP可靠传输服务的关键部分,序列号是该报文段首字节的字节流编号。序列号是该报文段首字节的字节流编号(TCP把数据看成是有序的字节流,TCP隐式地对数据流的没给字节进行编号)。当报文被分解成多个报文字段时,序列号就是整个保温的偏移量。确定号指定下一个期待的字节。TCP是全双工的,假设从主机A接收到主机B的数据,则主机A填充进报文段的确认号是主机A期望从主机B收到的下一个字节序号。
TCP的数据在两个方向上独立进行传输。因此,连接的每一端必须褒词每个方向上的传输数据序号。
首部长度
因为选项是不定长的,这就需要标识整个首部字段的长度(单位是32位字), 及5+选项个数。首部最长是15*4 = 60字节,即选项最长是40字节(10个选项)。
标识
- URG 紧急指针有效(不理解)
- ACK 确认序号有效;
当ACK=0时,表示该数据段不包含确认信息,当ACK=1时,表示该报文段包括一个对已被成功接收报文段的确认。 - PSH 接受方应该尽快将则个报文段交给应用层
- RST 重新连接
- SYN 同步序号用来发起一个连接
- FIN 发端完成发送任务
窗口大小
用于流控制,窗口大小为字节数,起始于确认序号字段指明的值,这个值是接受段正期望接收的字节。窗口大小是一个16bit字段最大为65535字节。
检验和
检验和覆盖了整个TCP报文段:TCP首部和TCP数据。
选项
选项部分是适合复杂网络环境和更好地服务于应用层的设计的。TCP选项最长是40字节。
MSS(最大报文传输段)
用于发送与接收协商最大报文段长度(仅仅是净荷数据,不包括TCP首部字段)TCP在三次握手中,则使用默认的536字节净荷数据。
窗口扩大选项
需要更大的窗口满足性能时需要
NOP
TCP的头部必须是4字节的倍数,二大多数选项不是4字节的倍数,不足的用NOP填充,除此之外,NOP也用于分割不同的选项数据,如窗口扩大选项和SACK之间使用NOP隔离。
数据
无任何数据的TCP段也是合法的,通常用于确认和控制信息。