解释
TCP全称为 “传输控制协议(Transmission Control Protocol”). 人如其名, 要对数据的传输进行一个详细的
控制;
TCP协议格式
源/目的端口号: 表示数据是从哪个进程来, 到哪个进程去;
32位序号/32位确认号: 后面详细讲;
4位TCP报头长度: 表示该TCP头部有多少个32位bit(有多少个4字节); 所以TCP头部最大长度是15 * 4
= 60
6位标志位:
URG: 紧急指针是否有效
ACK: 确认号是否有效
PSH: 提示接收端应用程序立刻从TCP缓冲区把数据读走
RST: 对方要求重新建立连接; 我们把携带RST标识的称为复位报文段
SYN: 请求建立连接; 我们把携带SYN标识的称为同步报文段
FIN: 通知对方, 本端要关闭了, 我们称携带FIN标识的为结束报文段
确认应答机制
每一个ACK都带有对应的确认序列号,意思是告诉发送者, 我已经收到了哪些数据; 下一次你从哪里开始。
超时重传机制
情况一:丢包
主机A发送数据给B之后, 可能因为网络拥堵等原因, 数据无法到达主机B;
如果主机A在一个特定时间间隔内没有收到B发来的确认应答, 就会进行重发
情况2:丢ACK:
但是, 主机A未收到B发来的确认应答, 也可能是因为ACK丢失了;因此主机B会收到很多重复数据. 那么TCP协议需要能够识别出那些包是重复的包, 并且把重复的丢弃掉.这时候我们可以利用前面提到的序列号, 就可以很容易做到去重的效果.
连接管理机制(三次握手,四次挥手)
在正常情况下, TCP要经过三次握手建立连接, 四次挥手断开连接
三次握手:
主机A给主机B发送一个同步报文段(SYN)告诉主机B他要连接了,主机B回复了主机A一个SYN+ACK,主机A收到主机B的回复后,再发送一个ACK。
为什么是三次握手?
四次挥手: