TCP(Transmission Contro Protocol):是一种专门在不可靠地互联网上提供面向连接的、基于字节流的、端到端的运输层通信协议
概述:
在计算机网络中,支持TCP的机器都有一个TCP实体。或者是用户进程或者是操作系统内核,都可以管理TCP流和IP层的接口。发送方(封装):应用层向下层发出了数据流。之后TCP将数据流分割为不超过MTU的报文段(不超过64kB,实践中,通常分割为1460字节,以通过以太网传输)。之后TCP将结果传给IP层,由IP层将包通过网络发送给接收端实体的IP层。接收方(解封装):当包含TCP数据段的报文到达某台机器时,会被提交给传输实体,传输实体将其重构出原始的字节流。
为保证不会丢包,TCP会给发出的每一个字节一个序号,同时这也保证了接收端实体接受的包按照相应序号进行接收,接收端成功受到数据包后会发出一个ACK确认;若在发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据(假设丢失了)将会被重传。TCP用一个校验和函数来检验数据是否有错误;在发送和接收时都要计算和校验。
首先,TCP建立连接之后,通信双方都同时可以进行数据的传输,其次,它是全双工的;在保证可靠性上,采用超时重传和捎带确认机制。
在流量控制上,采用滑动窗口协议,协议中规定,对于窗口内未经确认的分组需要重传。
在拥塞控制上,采用广受好评的TCP拥塞控制算法(也称AIMD算法),该算法主要包括三个主要部分:1,加性增、乘性减;2,慢启动;3,对超时事件做出反应。
TCP抓包:
TCP报文格式:
TCP连接上的每个字节都有其独有的32为序列号,收发双方的TCP实体以数据段的形式交换数据,每个数据段包含20字节的头部和数据区域
TCP数据段头:
源端口和目的端口:字段表明了一个连接的两个端点
用以跟踪同一时间内通过网络的不同会话,一般每个端口对应一个程序
序列号:32位
初始化序列号(ISNs)随机产生,为了通信安全
SYN:携带了ISNs和SYN控制位的数据段
确认号:32位
期望接收的字节号
URG:当紧急指针使用的时候,URG 被置为1。紧急指针是一个对于当 前序列号的字节偏移量,标明紧急数据从哪里开始
当URG=1时,说明有紧急数据,必须首先处理,当接收方受到这种数据后,马上处理,处理后恢复其正常的操作
ACK:当其为1时:表明确认号有效(已收到发送的上一个数据)
当其为0时:表明确认号无效(未收到发送的上一个数据)
PSH:表示这是带有PUSH标志的数据,接收方收到这样的数据后,应立即送到上层,而不需要缓存它
RST: 被用来重置一个已经混乱的连接
SYN:用在连接建立的阶段
FIN:被用来释放连接,它表示发送方已经没有数据需要发送了,但可以接受数据
window size:表明窗口值,告诉对方可以发送数据字节数,这取决于接收方的接受能力
Checksum--校验和,校验的范围包括头部、数据和概念性的伪头部
TCP三次握手☞