ps:文中图片均来自网络,若有侵权请联系我删除
pps:本文中的观点、内容,均来自本人对TCP和对老师讲解的理解,若有错误,欢迎指出
TCP的特点
- TCP是面向连接的端到端协议,连接建立的过程为三次握手,断开连接的过程为四次挥手
- TCP不支持多播和广播
- TCP为全双工连接,同一连接上可有双向的数据流
- TCP提供可靠交付(可靠交付4个要求或者说特点:不丢、不错、不乱(按序)、不重复)
- TCP为C/S模式
- 面向字节流(应用层消息按字节编号)
- 流量控制(滑动窗口机制)
- 拥塞控制(慢启动、快恢复等,将在下文细说)
TCP报文格式
TCP由IP数据报封装。
- 序号(seq):用来标识从TCP发送端到TCP接收端发送的数据字节流,表示在这个报文段中的第一个数据字节。当仅ACK为1时,不消耗序列号(不确定)。
- 确认号(ack):发送这一端所期望收到的下一个序号。(即表示,这一端已经正确接收了ack以前的所有字节)
- 六个标志bit:
- URG:紧急指针有效
- ACK:确认序号有效
- PSH:接收方应该尽快将这个报文提交给上层
- RST:重新建立连接
- SYN:同步序号用来发起一个连接(用于建立连接三次握手)
- FIN:发送端完成发送任务(用于断开连接四次挥手)
- 窗口:流量控制,值为字节数,起始于确认号ack。
- 检验和:只是来校验首部是否出错
- 紧急指针:仅当URG为1时有效,为一个正的偏移量,和序号seq字段中的值相加,表示紧急数据最后一个字节的序号
- 选项:最常见的是最长报文大小(MSS,Maximum Segment Size)
TCP可靠数据传输机制:数据序号和确认号机制
上文已经介绍了TCP报文中的序号(seq)字段和确认号(ack)字段,下面通过一个例子,更直观地理解一下:
假设有两个主机A和B,窗口值为1000
下图忽略了时间间隔
那么在主机A上:
No1. 发送的