[仅供个人参考系列]tcp与udp的相关内容小结

TCP/UDP区别

TCP

  • TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议

  • TCP面向连接,提供可靠地数据服务

  • TCP首部开销20字节

  • TCP逻辑通信信道是全双工的可靠信道

  • TCP连接只能是点到点的

UDP

  • UDP是参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠的信息传递服务

  • UDP无连接,不可靠

  • UDP首部开销8字节

  • UDP逻辑通信信道是不可靠信道

  • UDP没有拥塞机制,因此网络出现拥堵不会使源主机的发送效率降低

  • UDP支持一对一,多对一,多对多的交互通信

三次握手,四次挥手,为什么是三次握手四次挥手

在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接,完成三次握手,客户端与服务器开始传送数据。

简单点说:A与B建立TCP连接时,首先A向B发送SYN(同步请求),然后B回复SYN+ACK(同步请求应答),最后A回复ACK确认,这样TCP的一次连接(三次握手)就完成了。

TCP三次握手

所谓三次握手,是指简历一个TCP连接时需要客户端和服务器总共发送三个包

三次握手的目的是连接服务器指定端口,简历TCP连接,并同步连接双方的序列号并交换TCP窗口大小信息。

TCP三次握手图解:


1.第一次握手

客户端发送一个TCP的SYN标志位置1的包,指明客户打算连接的服务器的端口,以及初始化序号,保存在包头的序列号字段里。

2.第二次握手

服务器发挥确认包应答,即SYN标志位和ACK标志均为1,同时将确认序号设置为客户的ISN加1,即X+1。

3.第三次握手

客户端再次发送确认包,SYN标识为0,ACK标识为1,并且把服务器发来的序号字段+1,放在确定字段中发送给对方,并且在数据字段写入ISN的+1。

简单解释TCP三次握手:参考https://github.com/jawil/blog/issues/14

四次挥手

TCP的连接的拆除需要发送四个包,因此称为四次挥手。客户端或服务器均可主动发起挥手动作。

由于TCP连接时全双工的,因此每个方向都必须单独进行关闭。这个原则是当一方完成他的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。

为什么是三次握手四次挥手

这是因为服务端的LISTEN状态下的socket当收到SKY报文的简历连接的请求后,它可以把ACK和SYN放在一个报文里来发送。但关闭连接时,当收到对方的FIN报文通知时,他仅仅表示对方没有数据发送给你了,但未必你的所有数据都全部发送给对方了,所以你可以不是马上回关闭socket,即你可能还会发送一些数据给对方之后,在发送FIN报文给对方来表示你同意现在可以关闭连接了,所以这里的ACK和FIN报文多情况下都是分开发送的。

长连接和短连接

TCP在真正的读写操作之前,server和client之间必须建立一个连接,当读写操作完成后,双方不再需要这个链接时他们可能释放这个连接,连接的建立是通过三次握手,释放则需要四次挥手,所以说每个连接的建立都是需要消耗资源和时间的。

TCP短连接

  1. client向server发起连接请求

  2. server接到请求,双方建立连接

  3. client向server发消息

  4. server回应client

  5. 一次读写完成,此时双方任何一个都可以发起close操作

一般都是client先发起close操作,因为一般的server不会回复完client就立即关闭连接。

所以短连接一般只会在client和server间传递一次读写操作,短连接管理起来比较简单,存在的连接都是有用的连接,不需要额外的控制手段

长连接

  1. client向server发起连接

  2. server接到请求后,双方建立连接

  3. client向server发送消息

  4. server回应client

  5. 一次读写完成,连接不关闭

  6. 后续读写操作

长/短连接的操作过程

  1. 短连接的操作步骤:建立连接 -> 数据传输 -> 关闭连接

  2. 长连接的操作步骤:建立连接 -> 数据传输 -> (保持连接) -> 数据传输 -> 关闭连接

长/短连接的优缺点

  1. 长连接可以省去较多的TCP建立和关闭操作,减少资源浪费,节省时间,对于比较频繁的请求资源的客户端比较适用于长连接

  2. 短连接对于服务器来说管理较为简单,存在的连接都是有用的连接,不需要额外的控制手段

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值