美好的事物都是简单的---握手与挥手


tcp连接(握手)与释放(挥手)

也许回眸之间,我们就完成了无数次的“tcp”互动,在进行“tcp”的交流中,我们都需要先建立起连接才行,而且也必须要按照双发协定好的来进行才行,这样才能保证我们是正常的交流.

  • tcp协议特点

    • 可靠的交付(数据包必须要保证真的让对方收到—(收到对方确认才行))

    • tcp面向连接的运输层协议

    • 全双工通信(双发的交流可同时进行,互不干扰,如同打电话,你说我也可以说)

    • 面向字节流(接受上层应用程序发来的 字节流,成字节流来发送的)

tcp连接的三次握手

  • 前提:A向B发起连接请求(A->B)

  • 为什么要三次握手?

    • 为了防止B(接受连接请求)的那一方收到A(发起请求方)的“无效连接请求(可能这个连接请求已经过期)”,而B又重新向A发送 确认同意连接,但是其实A和B的请求连接请求早已建立,正是因为建立连接需要第三次握手(A继续给B发确认B发的同意连接确认),才保证A在B收到“无效连接请求”之后向A发送同意连接确认,但是A并没有发连接请求(之前的连接已经建立了,A已经”觉察”到B是收到了无效的连接请求),所以A不会向B第三次握手,保证了这个连接(非法连接)不会正常建立—正是第三次握手保证了连接的正常。

tcp释放四次挥手

  • 关闭是两步走

    • 客户端关闭发送(客户端不再向服务端发送数据),需要两次挥手

    • 服务端关闭发送(服务端不再向客户端发送数据),需要两次挥手

    • 执行完上面两步,才算正释放了两次连接(即双发都不能给彼此发送数据)

    tcp断开连接

  • 注意图上的状态

    • 客户端:主动释放连接 FIN=1,seq=u,向服务端发送释放报文

    • 服务端:发送确认报文(注意是确认报文,不是释放报文),服务端进入关闭等待ack=1,seq=v,ack=u+1(此时客户端不能向服务端发送数据,但服务端能给客户端发)

    • 服务端:假如服务端不再给客户端发数据,就向客户端发送释放报文,ack=1,seq=w,ack=u+1,FIN=1 ,服务端进入最后确认等待

    • 客户端:收到服务端的释放报文,向服务端发送确认(释放)报文,(但是客户端并不能立刻关闭连接,需要等待2MSL时间,MSL是最长报文段寿命).在服务端收到客户端的确认释放报文段后,则服务端正式关闭TCP连接

  • 为什么客户端需要等待2MSL?

    • 为了保证客户端发送的最后一个确认报文可以到达服务端(这个报文可能会丢失)

    • 防止“已失效的连接请求报文段”出现在本次的连接中,经过这个时间,在本连接中的所有报文段都会从网络中消失。

ps:上面就是四次握手 ,服务端比客户端先关闭连接!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值