网络(二)(三握四挥***重点)

重点重点重点

TCP状态迁移
TCP在传输数据之前,需要建立连接,所有TCP都是一个面向连接的、可靠的、安全的、有效的传输协议

三次握手
三次握手后变为establish状态,可以传输数据
1、一开始,客户端和服务端都处于Closed状态。先是服务器端主动监听某个端口,处于Listening状态
2、客户端会初始化序号(client_isn),同时发送SYN报文给服务端,表示向服务端发起链接,之后客户端处于SYN-SENT状态(第一次握手)。
3、服务端收到客户端SYN报文后,首先服务端也会随机初始化自己的序号(server_isn),之后将确认应答号ACK填入(client+1),接着把SYN和ACK标志位置为1.最后把该报文发给客户端,该报文也不包含应用层数据,之后服务端处于SYN-RCVD状态(第二次握手)。
4、客户端收到服务端报文后首先该应答报文TCP首部ACK标志位置为1,其次[确认应答号]字段填入server_isn+1,最后把报文发送给服务端,这次报文可以携带客户到服务器的数据,之后客户端处于established状态。服务器收到客户端应答报文后,也进入established状态(第三次握手)。

四次挥手
1、客户端打算关闭链接,会向服务器发送一个Fin的报文,之后客户端进入Fin_Wait状态(第一次挥手);
2、服务器收到报文后,向客户端发送ACK应答报文,接着服务器端进入Closed_Wait状态,客户端收到服务端的ACK,进入Fin_Wait_2(第二次挥手);
3、等服务器处理完数据后,也向客户端发送Fin报文,服务端进入Last_Wait状态(第三次挥手);
4、客户端收到服务端的Fin报文后,回一个ACK报文,之后进入Time_Wait状态(第四次挥手);

服务器收到了ACK应答报文后,就进入了Close状态,至此服务端已经完成了链接的关闭
客户端在结果2Msl一段时间后,自动就进入了Close状态,至此客户端也完成链接的关闭

三握四挥的问题

为什么是三次握手
+三次握手可以阻止历史重复连接的初始化
+如果是两次握手链接就不能判断当前连接是否是历史链接,三次握手则可以再客户端(发送方)准备发送第三次报文时,客户端因有足够的上下文来判断当前连接是否是历史连接
+三次握手才可以同步双发的初始化序列号
+三次握手才可以避免资源浪费
+两次握手会造成消息滞留情况下,服务器重复接受无用的连接请求SYN报文,而造成重复分配资源

为什么是四次挥手
+主动关闭连接才会有Time_Wait状态
+关闭时,发送Fin时,只是表示不在发送数据了,但是还接收数据,服务端通常需要等待完成数据的发送和处理,所以服务端的ACK和Fin一般都会分开发送,从而比三次握手导致多了一次

为什么Time_Wait等待的时间是2MSL
+MSL:报文最大生存时间
+2MSL的时间是从客户端收到Fin后发送ACK开始计时的等待时间2倍的MSL,
+比较合理的解释是:网络中可能存在来自发送方的数据包,当这些发送方的数据包被接收方处理后又会向对象发送响应,所以一来一回需要等待2倍的时间。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值