本文已参与「新人创作礼」活动,一起开启掘金创作之路。
TCP
TCP中的一些核心机制。
-
有连接
-
可靠连接
-
面向字节流
-
全手工
确认应答
保证可靠传输的核心机制
接收方接收到消息之后会返回一个应答报文,表示自己已经接收到了。
TCP里面的序号和确认序号就是为了防止后发的消息先到之后直接运行。它的编号并不是按照消息的条数来的,是按照字节来编号的。TCP里面的ACK(确认序号)就是用在这个地方的。是接收方发给发送方的,表示ACK之前的数据已经接收到了。
超时重传
是对确认应答的补充,如果传输的包丢了,那这个超时重传就有效果了。
TCP还有一个去重的操作,保证超时重传有可能的重复发送。因为我们的引用是无法知道有超时重传的。
超时重传不是无休止的传送,当三四次(当然系统自己会配置,这边的三四次只是一个举例子)之后就不会重传了。会自动断开
基于上面的两个机制,就大概率可以保证TCP的可靠性,但是第三个就可以让TCP完美了。
连接管理
两个设备建立连接和两个设备断开连接
建立连接——三次握手
可以检测当时的网络是否满足可靠传输的基本条件。
让双方协商一些必要的信息
第一次
客户端主动发送SYN给服务端
如果SYN为1
表示当前报文就是一个“同步报文段”
主机A和主机B之间建立连接
第二次
服务端发送ACK和SYN给客服端
如果ACK为1表示这个报文就是一个“确认报文段”
第三次
客户端发送ACK给服务端
断开连接——四次挥手
下面的第二次和第三次有可能一起发送。
第一次
客户端发送FIN给服务端
FIN为1 就表示为“结束报文段”
第二次
服务端发送ACK给客户端
这个发送给客户端表示自己知道客户端要关掉,然后自己要关掉一些资源
第三次
服务端发送FIN给客户端
这个发送,表示服务端已经关掉了一些资源,然后发给客户端
第四次
客户端发送ACK给服务端