tcp是可靠的传输协议。为什么这么说?
首先我们得了解一下他的报文格式。
- 源端口号和目的端口号,数据根据这两个端口号决定发给哪个应用。
2.序号,只是让包有序一点而已。
3.确认序列呢。顾名思义,就是确认对方有没有收到。如果对方没收到,要重新发送,直到送达。解决丢包问题的。
4.还有一些状态位。SYN就是发起一个连接的,ack就是回复,RST是重新连接,FIN是结束连接。这些带有状态位的包的发送,会引起双方的状态变更。
5.窗口大小,就是缓存大小。标识自己的处理能力。不要发的太快,吃不完;也别发的太慢,不够吃。TCP要做流量控制的嘛。
6.当然,除了流量控制,TCP也要做拥塞控制,他的拥塞控制也只能控制自己发送的速度。
okok。前面铺垫了那么多,接下来终于来到了我们今天的重点了。
TCP三次握手
在HTTP传输数据之前,通常要进行TCP的三次握手。
- 一开始,客户端和服务端都处于close状态。服务端打开某个端口的监听器,进入LISTEN状态。
- 客户端主动发送SYN,之后处于SYN_SENT状态
- 服务端收到SYN后,返回SYN,并且ACK客户端的SYN,之后处于SYN_RCVD状态
- 客户端收到SYN和ACK后,发送对ACK的SYN,之后处于established状态。因为它一发一送成功了。
- 服务端SYN的ACK后,处于established状态。因为它一发一送也成功了。
总之,TCP三次握手的目的是保证双方都有发送和接受的能力。