TCP与UDP的区别和联系

3 篇文章 1 订阅

引进

OSI网络模型有7层,分别为:

                        ​​​​​​​        ​​​​​​​        ​​​​​​​        ⑦应用层

                ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ⑥表示层

                                                ⑤会话层

                                                ④传输层

                                                ③网络层

                                                ②数据链路层

                                                ①物理层


传输层在网络层的端到端基础上实现了服务进程到服务进程的传输

是传输层里数据的名字,在封装为三层包之前就是段

传输层管理两个节点之间数据的传输:负责可靠传输(TCP)不可靠传输(UDP)


TCP允许应用把字节流变成多份段,而不是整个字节数据完整地发送出去。

当客户端发送数据,以报文的形式传输,在传输层加上端口号、封装成段后,在网络层加上IP地址,封装成包(含有目标IP地址)

相同点:TCP和UDP都工作在传输层,在程序之间传输数据(可以是文本、视频、图片),都是二进制数

区别:基于连接(TCP)非连接(UDP)


TCP协议包括:三次握手传输确认四次挥手

三次握手:建立连接的过程

                当客户端向服务端发起连接时,会先发一包连接请求数据询问能否建立连接,这包数据为SYN包,对端同意连接回复一包SYN+ACK包,客户端收到后回复ACK包,建立连接。

问:在实际情况中,服务器端同意连接后向客户端发送SYN+ACK包后,就已经建立连接,那为什么不是两次握手,而是三次握手?

答:为了防止因为已失效的请求报文突然又传到服务器引起的错误

例:假如两次握手已经建立连接

        ①客户端发送SYN1给服务端(但由于某些因素没有到达服务器,在中间某个网络节点产生滞留)

        ②客户端重新发送SYN2给服务端

        ③服务端回复SYN2+ACK给客户端,建立连接

        ④第一包数据阻塞的网络节点恢复

        ⑤SYN1送达到服务端

        ⑥服务端回复SYN1+ACK给客户端,即两次握手,2次连接

        ⑦服务器进入等待状态

        ⑧客户端:一个连接;服务端:两个连接,状态不一致

        ⑨如果在三次握手的情况下,服务端收不到客户端发送的ACK包,则服务端不会认为建立连接成功


三次握手本质:解决网络信道不可靠的问题

TCP为了在不可靠的信道上建立可靠连接:三次握手后,客户端和服务端进入数据传输状态。


问:①一包数据拆成多包发送,如何处理丢包问题?

       ②数据包到达的顺序不同,如何处理乱序问题?

解决:

①TCP为每一个连接建立了一个发送缓冲区,从建立连接后的第一个字节序号为0后面每个字节的序列号增加1

②发送数据时,从发送缓冲区取一部分数据组成发送报文,在TCP协议头中会附带序列号和长度

③接收端收到数据后,需要回复确认报文:ACK=序列号+长度,也就是下一包数据需要发送的起始序列号

④一问一答的发送方式能够使发送端口确认发送的数据已经被对方收到,发送端也可以一次发送连续的多包数据,接收端只需要回复一次ACK。发送端可以把待发送的数据分割成一系列的碎片,发送给对方,对方根据序列号和长度,在接收后重构出完整数据,假设其中丢失了某些数据包,在接收端可以要求让发送端重传。例如:丢失了100-199的数据,接收端发送ACK=100的报文给发送端,发送端收到后重传这一包数据,接收端补齐。

另外,TCP连接是全双工的


四次挥手:处于连接状态的客户端和服务端都可以发起关闭连接请求,用四次挥手关闭连接

假设:

第一次挥手:客户端主动发起连接关闭请求,向服务器发送一包FIN包,表示要关闭连接,自己进入终止等待1状态。

第二次挥手:服务器收到了FIN包,向客户端发送ACK包,表示自己进入了关闭等待状态,客户端进入终止等待2状态。

第三次挥手:此时服务器还可以发送未发送的数据,客户端还可以接收数据,服务器发送完数据后发送一包FIN包,进入最后确认状态。

第四次挥手:客户端收到FIN包后回复ACK包,进入超时等待状态,经过超时时间后关闭连接,服务器收到ACK包后,立即关闭连接。

问:为什么客户端需要等待超时时间?

答:为了保证对方收到ACK包

如果客户端发送完ACK包后释放连接,一旦ACK包在网络中丢失,服务端将一直停留在最后确认状态

如果客户端发送完ACK包后等待一段时间,这时服务器端因为没有收到ACK包,将会重发FIN包,客户端会响应FIN包,重发ACK包并刷新超时时间,机制与三次握手相同。

这也是为了保证在不可靠的网络链路中进行可靠的连接断开。


UDP协议基于非连接,封装数据后,从网卡发送,数据包之间并没有状态上的联系,使得性能损耗非常少,对于CPU、内存资源的占用也远小于TCP,但对于网络传输过程中的丢包,UDP协议不能保证,UDP在传输稳定性上要弱于TCP


TCP:稳定可靠的传输(适用于通信质量较高的场景),需要准确无误地传输给对方,比如:传输文件、发送邮件、浏览网页

UDP:速度快(但可能丢包),适用于实时性要求较高,对于少量丢包没有太大要求的场景,例如:域名查询、视频直播、语音通话。同时UDP也有非常重要的应用场景:被应用于隧道网络:VPN、SDN中的VXLAN。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旧时梦浮沉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值