TCP的特性
TCP提供面向连接的、可靠的字节流服务
上层应用数据被TCP分割为TCP认为合适的报文段
TCP使用超时重传机制,而接收到一个TCP数据后需要发送一个确认
TCP使用包含了首部和数据的校验和来检查数据是否在传输过程中发生了差错
TCP可以将失序的报文重新排序
TCP连接的每一端都有固定大小的缓冲区,只允许另一端发送发送接收缓冲区所能接纳的数据
TCP提供面向字节流的服务,不在字节流中插入记录标识符,也不对字节流的内容作任何解释(由上层应用解释)
TCP首部
TCP数据也是封装在IP数据报中,TCP首部格式如下图所示:
其中,
序列号:用于对报文进行计数(注SYN和FIN都会消耗一个序列号),TCP为应用层提供全双工服务,连接的每一端都要保持每个方向上的传输序列号;
SYN:用来发起一个连接,当新建一个链接时,SYN变为1;
ACK:确认序号有效,其序列号为上次接收的序号加1;
首部长度:首部中32bit的长度(最多60字节),如果没有任选字段,长度为20字节;
URG:标志紧急指针有效;
PSH:接收方应该尽快将这个报文交给应用层;
RST:重建连接;
FIN:发端完成发送任务;
窗口大小:用于TCP的流量控制,最大65535字节;
检验和:覆盖首部和数据,由发端计算和存储,接收端验证;
紧急指针:只有当URG为1时才有效,用于发送紧急数据;
数据部分是可选的,在连接建立和终止时,双方交换的报文中只有TCP首部。
TCP可以表述为一个没有选择确认或否认的滑动窗口协议(滑动窗口协议用于数据传输)。
我们说TCP缺少选择确认是因为TCP首部中的确认序号表示发方已成功收到字节,但还不包含确认序号所指的字节。当前还无法对数据流中选定的部分进行确认。
例如,如果1~1024字节已经成功收到,下一报文段中包含序号从2049~3072的字节,收端并不能确认这个新的报文段。它所能做的就是发回一个确认序号为1025的ACK。它也无法对一个报文段进行否认。
例如,如果收到包含1025~2048字节的报文段,但它的检验和错,TCP接收端所能做的就是发回一个确认序号为1025的ACK。
Vecloud是一家面向企业提供云交换网络服务为核心业务的技术创新企业,公司有24*7专业运维团队支撑,可以快速定位客户使用中遇到的问题,最快解决问题。