tcp协议

  1. tcp三次握手
    不同于udp,tcp在通信之前需要先建立链接,当链接建立好后才正式开始进行通信。在建立链接过程中有三次交互过程,这三次就叫做三次握手。
    在这里插入图片描述
    如图所示,首先客户端调用connect,发送syn j这个包给服务端,当服务端收到这个包然后返回syn j+1 给客户端,这样就说明服务器已经准备好了。同样的,服务器端也会发送一个syn k给客户端,客户端回送一个syn k+1,这样表示客户端和服务端都准备就绪,可以收发数据了。如果这样看来的话他们要进行4次通信,为什么只有三次呢?原因是在服务端给客户端回信的时候不仅仅发送了syn j+1,还把syn k一起发送了,这样就少了一次链接。这就是三次握手过程。

  2. 四次挥手
    当客户端和服务端传输完成后,客户端和服务端就要断开链接。在这里插入图片描述
    和三次握手类似,当客户端调用close()时,客户端发送一个包给服务端,服务端收到后回送一个包,当服务端调用close()时,给客户端发送一个包,客户端回送一个数据。总共四次,我们称之为四次挥手。
    可能有同学要问,为什么不把第二次和第三次合并成一次?答案是不能够的,因为在客户端调用close()但是不能保证服务端已经接受完毕,只有服务端接受完毕才会调用close(),而此时他们的时间不是恰好一致的。注意点:当客户端接收到第三次挥手后,资源并不会释放,它会等待两个包在互联网传输时间后才释放。原因是这样的,假设客户端发送的第四次挥手数据服务端没有收到,那么服务器一定会重发第三次挥手数据,而重发的第三次挥手数据正好是两次时间,如果两次时间后未收到,则默认第四次挥手成功。一次tcp链接完整完成。

  3. 短连接

    模拟一种TCP短连接的情况:
    client 向 server 发起连接请求
    server 接到请求,双方建立连接
    client 向 server 发送消息
    server 回应 client
    一次读写完成,此时双方任何一个都可以发起 close 操作
    在步骤5中,一般都是 client 先发起 close 操作。当然也不排除有特殊的情况。
    从上面的描述看,短连接一般只会在 client/server 间传递一次读写操作!

  4. 长连接
    再模拟一种长连接的情况:
    client 向 server 发起连接
    server 接到请求,双方建立连接
    client 向 server 发送消息
    server 回应 client
    一次读写完成,连接不关闭
    后续读写操作…
    长时间操作之后client发起关闭请求

  5. 长短连接的优缺点
    长连接可以省去较多的TCP建立和关闭的操作,减少浪费,节约时间。对于频繁请求资源的客户来说,较适用长连接。client与server之间的连接如果一直不关闭的话,会存在一个问题,随着客户端连接越来越多,server早晚有扛不住的时候,这时候server端需要采取一些策略,如关闭一些长时间没有读写事件发生的连接,这样可以避免一些恶意连接导致server端服务受损;如果条件再允许就可以以客户端机器为颗粒度,限制每个客户端的最大长连接数,这样可以完全避免某个蛋疼的客户端连累后端服务。短连接对于服务器来说管理较为简单,存在的连接都是有用的连接,不需要额外的控制手段。但如果客户请求频繁,将在TCP的建立和关闭操作上浪费时间和带宽。

  6. 长短连接应用场景
    长连接多用于操作频繁,点对点的通讯,而且连接数不能太多情况。每个TCP连接都需要三次握手,这需要时间,如果每个操作都是先连接,再操作的话那么处理速度会降低很多,所以每个操作完后都不断开,再次处理时直接发送数据包就OK了,不用建立TCP连接。
    例如:数据库的连接用长连接,如果用短连接频繁的通信会造成socket错误,而且频繁的socket 创建也是对资源的浪费。

    而像WEB网站的http服务一般都用短链接,因为长连接对于服务端来说会耗费一定的资源,而像WEB网站这么频繁的成千上万甚至上亿客户端的连接用短连接会更省一些资源,如果用长连接,而且同时有成千上万的用户,如果每个用户都占用一个连接的话,那可想而知吧。所以并发量大,但每个用户无需频繁操作情况下需用短连好。

  7. tcp/ip协议簇
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    如图所示,tcp/ip协议不只是一个协议,他们是一群协议,例如ARPmac广播协议等等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值