-
三次握手
- 定义:三次握手是建立连接的过程,当客户端向服务端发起连接时,会先发一包连接请求数据过去询问一下,能否和你建立连接,这包数据叫做SYN包,如果服务端同意连接,则回复一个SYN+ACK包,客户端收到之后回复一包ACK包,连接建立
- 通俗理解:"能连吗 ,能连 ,收到"
- 为什么不能两次握手:如果只有前两次握手的话,服务器就不能确认自己回复的报文段是否被客户端接收到,也就不知道自己的发送功能和客户端的接收功能是否正常。
-
数据传输
- 当tcp建立连接后开始传输数据,为了解决丢包问题和乱序问题,采用以下方式进行传输。首先建立了一个发送缓冲区,从建立链接后的第一个字节的序列号为0,后面每个字节的序列号就会增加1,发送数据时,从发送缓冲区取一部分数据组成发送报文,在其tcp协议头会附带序列号和长度,接收端在接收数据后,需要回复确认报文。确认报文的ACK等于序列号+长度,也就是下一包数据需要发送的起始序列号。这样一问一答的方式能够使发送端确认发送的数据,已经被对方收到。发送端也可以一次发送连续的多包数据,接收端只需要回复一次ACK就可以了,这样发送端可以把待发送的数据分割成一系列的碎片,发送到对端,对端根据序列号和长度,在接收后重构出来完整的数据。假设丢掉了某些包,接收端可以要求发送端重传,比如丢失了100-199的字节,接收端可以向发送端发送ACK等于100的报文,发送端重新发送,接收端接受后重新补齐。
-
四次挥手
- 定义:处于连接状态的发送端和接收端都可以发起关闭连接请求,此时需要发起四次挥手关闭连接。假如客户端主动要求关闭连接,他需要向服务端发起一包FIN包,表示要关闭连接,自己进入终止等待1状态,服务端向客户端发送ACK包,自己进入关闭等待状态,客户端则进入终止等待2状态,服务端此时还可以发送未发送的数据,而客户端还可以接受数据,待服务端发送完数据之后,服务端向客户端发送FIN包,进入最后确认状态,客户端收到之后回复ACK包,进入超时等待状态,经过超时时间后关闭连接,而服务端接受到ACK包后立刻关闭连接。
- 通俗理解:“再见,收到,你也再见,收到”
- 为什么不能三次挥手:这个问题可以换一种问法,也就是:中间两个步骤为什么不能合并呢?只要服务器收到客户端的FIN报文后,同时发送ACK报文和FIN报文不就可以三次挥手断开连接吗?答案是通常情况下不行,因为ACK和FIN的触发时机是不一样的。我们要搞清楚一件事:服务器在收到FIN报文后可以立即发送ACK报文,表明我服务器收到了你的报文;但是服务器想发送FIN报文就需要等到处理完接收缓冲区的数据后才可以。所以挥手需要四次。
- 为什么需要超时等待:超时等待是为了确保服务器收到了最后一段ACK报文。如果服务器没有收到最后一段ACK报文,就会触发超时重传:服务器会再次发送FIN ACK报文。那么在2MSL的时间内,客户端会再次收到FIN报文,客户端就知道刚刚发送的ACK丢失,需要再次发送。如果服务器收到了最后一段ACK报文,客户端在2MSL的时间内就不会收到任何报文,客户端就知道刚刚发送的ACK报文没有丢失,不需要再次发送,可以安心进入CLOSED状态了。
-
TCP/IP 五层模型
从下往上:物理层(物)、数据链路层(联)、网络层(网)、传输层(叔)、应用层(应用(应该要用)) "物联网叔应该要用"
-
OSI七层网络模型速记:
从下往上:物理层(物)、数据链路层(链)、网络层(网)、传输层(叔)、会话层(会)、表示层(使)、应用层(用) "物联网叔会使用"
三次握手与四次挥手通俗理解
最新推荐文章于 2024-06-18 12:19:02 发布