三次握手与四次挥手通俗理解

  1. 三次握手

    1. 定义:三次握手是建立连接的过程,当客户端向服务端发起连接时,会先发一包连接请求数据过去询问一下,能否和你建立连接,这包数据叫做SYN包,如果服务端同意连接,则回复一个SYN+ACK包,客户端收到之后回复一包ACK包,连接建立
    2. 通俗理解:"能连吗 ,能连 ,收到"
    3. 为什么不能两次握手:如果只有前两次握手的话,服务器就不能确认自己回复的报文段是否被客户端接收到,也就不知道自己的发送功能和客户端的接收功能是否正常。
  2. 数据传输

    1. 当tcp建立连接后开始传输数据,为了解决丢包问题和乱序问题,采用以下方式进行传输。首先建立了一个发送缓冲区,从建立链接后的第一个字节的序列号为0,后面每个字节的序列号就会增加1,发送数据时,从发送缓冲区取一部分数据组成发送报文,在其tcp协议头会附带序列号和长度,接收端在接收数据后,需要回复确认报文。确认报文的ACK等于序列号+长度,也就是下一包数据需要发送的起始序列号。这样一问一答的方式能够使发送端确认发送的数据,已经被对方收到。发送端也可以一次发送连续的多包数据,接收端只需要回复一次ACK就可以了,这样发送端可以把待发送的数据分割成一系列的碎片,发送到对端,对端根据序列号和长度,在接收后重构出来完整的数据。假设丢掉了某些包,接收端可以要求发送端重传,比如丢失了100-199的字节,接收端可以向发送端发送ACK等于100的报文,发送端重新发送,接收端接受后重新补齐。
  3. 四次挥手

    1. 定义:处于连接状态的发送端和接收端都可以发起关闭连接请求,此时需要发起四次挥手关闭连接。假如客户端主动要求关闭连接,他需要向服务端发起一包FIN包,表示要关闭连接,自己进入终止等待1状态,服务端向客户端发送ACK包,自己进入关闭等待状态,客户端则进入终止等待2状态,服务端此时还可以发送未发送的数据,而客户端还可以接受数据,待服务端发送完数据之后,服务端向客户端发送FIN包,进入最后确认状态,客户端收到之后回复ACK包,进入超时等待状态,经过超时时间后关闭连接,而服务端接受到ACK包后立刻关闭连接。
    2. 通俗理解:“再见,收到,你也再见,收到”
    3. 为什么不能三次挥手:这个问题可以换一种问法,也就是:中间两个步骤为什么不能合并呢?只要服务器收到客户端的FIN报文后,同时发送ACK报文和FIN报文不就可以三次挥手断开连接吗?答案是通常情况下不行,因为ACK和FIN的触发时机是不一样的。我们要搞清楚一件事:服务器在收到FIN报文后可以立即发送ACK报文,表明我服务器收到了你的报文;但是服务器想发送FIN报文就需要等到处理完接收缓冲区的数据后才可以。所以挥手需要四次。
    4. 为什么需要超时等待:超时等待是为了确保服务器收到了最后一段ACK报文。如果服务器没有收到最后一段ACK报文,就会触发超时重传:服务器会再次发送FIN ACK报文。那么在2MSL的时间内,客户端会再次收到FIN报文,客户端就知道刚刚发送的ACK丢失,需要再次发送。如果服务器收到了最后一段ACK报文,客户端在2MSL的时间内就不会收到任何报文,客户端就知道刚刚发送的ACK报文没有丢失,不需要再次发送,可以安心进入CLOSED状态了。
  4. TCP/IP 五层模型

    从下往上:物理层(物)、数据链路层(联)、网络层(网)、传输层(叔)、应用层(应用(应该要用))  "物联网叔应该要用"

  5. OSI七层网络模型速记:

    从下往上:物理层(物)、数据链路层(链)、网络层(网)、传输层(叔)、会话层(会)、表示层(使)、应用层(用) "物联网叔会使用"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值