TCP协议和UDP协议

1用户数据报协议UDP协议

定义和特点

UDP协议旨在ip数据报的服务之上增加了很少的功能,即复用分用和差错检测功能,主要特点是:

  1. UDP是无连接的,减少开销和发送数据之前的时延
  2. UDP使用最大努力交付,即不保证可靠交付
  3. UDP是面向报文的,适合一次性传输少量的数据网络应用。
  4. UDP无拥塞控制,适合很多的实时应用
    在这里插入图片描述

内部结构

在这里插入图片描述

2TCP协议

tcp协议的特点

1tcp是面向连接(虚连接)的传输层协议
2每一条TCP连接只能由两个端点,每一个tcp连接只能是点对点的
3tcp提供可靠的交付服务,无差错,不丢失,不重复,按序到达(可靠有序,不重不丢)
4tcp提供全双工通信

tcp协议的四个功能:
1连接管理
2可靠传输
3流量控制
4拥塞控制

1.TCP连接管理

在这里插入图片描述
分析问题:
可以看出,在第一次向服务器请求的阶段后,服务器接收信息之后会为该请求分配缓存和变量,并且会向浏览器发送确认报文并且会等待响应,如果客户端不返回确认的确认时,服务器就会一直等待,并且还因为已经开辟了内存而浪费了资源。就会容易产生SYN洪泛攻击问题。
在这里插入图片描述
解决此办法是设置SYNcookie

断开连接(四次挥手)

在这里插入图片描述为什么要设置这个等待时间2mls时间呢,因为:当客户端收到服务器端的关闭通知之后,会设置2mls时间,如果服务器端在2mls时间之内收不到客户端发来的关闭确认通知,服务器端会再次发送关闭通知,然后客户端会再次发送确认关闭,并且重置2mls时间,当发送服务器端接收到关闭通知后,才进入close状态。

2.TCP的可靠传输

可靠传输如何实现的。
首先可靠传输是指,可靠有序,不重不丢

怎么要保证不丢:

重发。服务器收到包之后就会给客户端一个确认,如果客户端在超时时间内没有收到ACK就会重发数据,如果一般一一确认的效率太低了,客户端对发送的数据包编号,由小到大递增,基于编号进行顺序确认,如果服务器端收到了1,2,3数据包,则只会回复3,代表小于等于3的数据包已经全部收到。但是如果没有回复其他已经发送的ACK,客户端就重发。

怎么确定不重?

既然丢包时会出现重发,就会出现重复的数据包,解决重复的情况就是顺序的ACK,当服务器端回复ACK=6就代表此时小于等于6的都已经被接收了,如果还出现这个区间里的数据包,就直接丢弃

怎么确保有序?

假设服务器端收到了123,就会回复ACK=3到客户端,但是如果客户端发送4567,但是没有接收到4,只接收到了567,此时服务器端就会把数据包567暂时保存,知道数据包4的到来,才会回复ACK=7,但是如果此时接收不到4,就会一直等待,此时超时只会客户端仍然没有收到确认,就会重新发送4567,这样就会收到4,然后回复7,并且把刚接收的567丢弃。

总结:就是通过顺序ACK来保证不重不丢有序

流量控制和拥塞控制的区别

首先流量控制和拥塞控制都是通过发送方触发的,可以通过调整发送方的发送行为来进行调节流量控制是中间好两头差,拥塞控制是两头好中间差的问题。

流量控制一般是针对发送方和接收放,是点对点的问题。解决的是接收方处理不过来的问题,发送速率大于接收速率,接收时就会丢包。而丢包后,接收方没有回复ACK,此时发送方又会接着发送数据包,以此反复,造成网络的浪费。
主要针对的是中间网络好,两头差的情况(接收方的能力差)

拥塞控制,解决的是中间的节点如路由器和交换机处理不过来的问题。网络拥塞,发送方收不到ACK时们就会重传,又会导致网络更加的拥塞。浪费网络带宽

3.TCP的流量控制

让发送方发送慢一点,好让接收方来得及接收。
tcp利用滑动窗口机制实现流量控制。

机制:在通信过程当中,接收方根据自己接收缓存的大小,动态的调整发送方的发送窗口大小,即接收窗口rwnd(接收方设置确认报文段的窗口字段来将rwnd通知给发送方),发送方的发送窗口取接收窗口rwnd和拥塞窗口cwnd的最小值。
在这里插入图片描述为了解决发送双方:当B发送0窗口之后,A就不能发送新的数据报,但当B再次发送数据报之后,要求发送端A发送新的数据时把发送窗口搞丢了,此时A就不会发送数据的问题,造成B等待A发送,而A等待B发送发送窗口的类似于死锁的局面,引入了零窗口的探测报文段:

TCP为每一个连接设有一个持续计时器,只要TCP连接的发送方A收到接收方B的零窗口通知,就启动持续计时器。若持续计时器设置的时间到期,发送方就会发送一个零窗口探测报文段,接收方收到探测报文段之后会重新发送现在的窗口值,如果仍然为0,发送方就重新设置持续计时器。

4.TCP的拥塞控制

在这里插入图片描述

1慢开始和拥塞避免组合使用来解决拥塞问题

在这里插入图片描述(报文段指的是最大报文段长度:512字节)

慢开始阶段:逐渐的按照指数增加传输报文的数量,当达到慢开始门限之后,就开始执行阻塞避免阶段
阻塞避免阶段:采用逐渐增加报文段的数量,一个一个的增加传输数量
当达到拥塞窗口的值时,会将新的阈值(慢开始门限 ssthresh)设置为当前拥塞窗口的一半,然后将传输报文段设为1,再次按照慢开始阶段的指数增长和阻塞避免阶段的逐渐增长。

2快重传和快恢复算法来解决拥塞问题

在这里插入图片描述当连续收到三个重复的确认后,就会执行快重传算法,此时会讲阈值设置为一半,但是不在向第一种方法一样来从新开始,而是直接从阈值(慢开始门限)开始执行加法增大算法(拥塞避免),一点点的增加传输数据包数量.

  • 1
    点赞
  • 5
    收藏
  • 打赏
    打赏
  • 0
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:黑客帝国 设计师:我叫白小胖 返回首页
评论

打赏作者

倔强的加瓦

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

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值