TCP
TCP是一个全双工的运行在传输层的可靠传输协议。
为了防止网络的拥塞现象,TCP提出了一系列的拥塞控制机制。最初由V. Jacobson在1988年的论文中提出的TCP的拥塞控制由“慢启动(Slow start)”和“拥塞避免(Congestion avoidance)”组成,后来TCP Reno版本中又针对性的加入了“快速重传(Fast retransmit)”、“快速恢复(Fast Recovery)”算法。TCP的拥塞控制主要原理依赖于一个拥塞窗口(cwnd)来控制
除此之外,TCP还有一个对端通告的接收窗口(rwnd)用于流量控制。
报文格式
源端口和目的端口
一个IP地址和端口的组合称为“套接字”或“端点”。
所以IP协议中的源IP地址和目的地址
和TCP协议中的源端口和目的端口,
组成了“一对”套接字(发送端的套接字和接收端的套接字)。
序列号
每一个“TCP报文段中的第一个字节”都会被赋予一个序列号。
序列号是个32位数,到达2^32-1后会再回到0.
确认号(TCP返回报文使用)
也称ACK号或ACK字段。
确认号包含的值为:“确认号的发送方”希望接收的下一个序列号。(即最后接收成功的序列号+1)
-
三次握手和四次挥手的时候,序列号和确认号被用于通信报文中
-
发送数据时:第一个包的序列号是一个随机数。为了便于理解,这里就把它称为1号包。假定这个包的负载长度是100字节,那么可以推算出下一个包的序列号应该是101。
头部长度
该字段表示TCP头部的长度,以32位字为单位。
由于“选项字段”大小是可变的,所以“头部长度”字段是必须的。
TCP头部长度最大为60字节,如果没有选项字段,则为20个字节。
8种状态标识
以下各个标识表示了“该TCP报文段”是干什么的。
如:
SYN和ACK可能同时为1,它表示的就是建立连接之后的响应。
单个的一个SYN,它表示的只是建立连接。
1、CWR:拥塞窗口减(发送方降低它的发送速率)。
2、ECE:ECN回显(发送方接收到了一个更早的拥塞通告)
3、URG:紧急(紧急指针字段有效,很少用)
4、ACK:确认(确认号字段有效,连接建立后一般都是启用状态)
5、PSH&