三次握手四次挥手

TCP三次握手

  • 三次握手,是指建立一个TCP连接时,需要客户端和服务器总共发送3个包。
  • 三次握手同步了连接双方的序列号和确认号并交换 TCP 窗口大小信息,在socket编程中,客户端执行connect()时,将触发三次握手。
  1. 第一次握手:建立连接时,客户端A发送SYN包(SYN=j)到服务器B,并进入SYN_SEND状态,等待服务器B确认。

  2. 第二次握手:服务器B收到SYN包,必须确认客户A的SYN(ACK=j+1),同时自己也发送一个SYN包(SYN=k),即SYN+ACK包,此时服务器B进入SYN_RECV状态。

  3. 第三次握手:客户端A收到服务器B的SYN+ACK包,向服务器B发送确认包ACK(ACK=k+1),此包发送完毕,客户端A和服务器B进入ESTABLISHED状态,完成三次握手。

趣解“三次握手”(类似打电话时刚开始信号不好听不清)

  • 甲:喂喂,能听到我说话吗?
  • 乙:我能听到,你能听到我说话吗
  • 甲:我也能听到

四次挥手

  • TCP断开连接时需要发送四个包,因此称为四次挥手。
  • 客户端或服务器均可主动发起挥手动作,在socket编程中,任何一方执行close()操作即可产生挥手操作。
  1. 客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送。
  2. 服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。
  3. 服务器B关闭与客户端A的连接,发送一个FIN给客户端A。
  4. 客户端A发回ACK报文确认,并将确认序号设置为收到序号加1。

趣解“四次挥手”(类似小孩子决裂)

  • 甲:我不跟你说话了
  • 乙:好吧
  • 乙:我也不跟你说话了
  • 甲:随便

为什么建立连接协议是三次握手,而关闭连接却是四次握手呢?

  • 这是因为服务端的LISTEN状态下的SOCKET当收到SYN报文的连接请求后,它可以把ACK和SYN(ACK起应答作用,而SYN起同步作用)放在一个报文里来发送。
  • 但关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,所以你可能未必会马上会关闭SOCKET,也即你可能还需要发送一些数据给对方之后,再发送FIN报文给对方来表示你同意现在可以关闭连接了,所以它这里的ACK报文和FIN报文多数情况下都是分开发送的。

udp用于哪些场景

  • 多播的信息一定要用udp实现,因为tcp只支持一对一通信。多播就是一对多通信
  • 如果一个应用场景中大多是简短的信息,适合用udp实现,因为udp是基于报文段的。
  • 多媒体应用,缺一两帧不影响用户体验,但是需要流媒体到达的速度快,适合用udp,如游戏绝地求生
  • 常见的使用udp的例子:QQ的聊天模块。客户端client 采用TCP协议向服务器server发送信息,HTTP协议下载信息。登陆之后,会有一个TCP连接来保持在线状态。你和好友之间发送消息,主要采用UDP协议,内网传文件采用了P2P技术。

死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值