TCP和UDP区别都有什么?

TCP和UDP的区别

TCP是面向有连接的,可靠的,基于字节流的传输层协议;
UDP是面向无连接的传输层协议;
1.有连接:
有连接是指客户端和服务端之间的连接,在双方通信之前,TCP需要通过三次握手建立连接,而UDP没有;
2.可靠性
为了保持可靠性,TCP花费了很大的精力来做这些事情,主要体现在有状态,可控制;
有状态:主要体现在TCP准确记录当前发送了多少数据,那些被接收了,哪些没有被接收;
可控制:TCP会根据当前的丢包和网络环境不佳的情况下,按照具体的情况调节自己的行为,如控制发送
速度和重返;
但UDP是无状态,不可控的;
3.基于字节流
UDP数据传输是基于数据报的,这是因为UDP继承了IP层的特点,而TCP为了维持有状态,将IP包处理成了字节流传输;

流量控制

作用:
解决端到端的数据发送速度的合理控制;
对于发送端和接收端来说,TCP需要把发送的数据放到发送缓存区,将接收的数据放到接收缓存区,
而流量控制就是通过接收缓存区的大小,控制发送端缓存区的大小,如果接收方的缓存区满了,就不继续发送了;
滑动窗口
服务器和客户端的缓存区的大小的相互控制;(以后详细叙述)

拥塞控制:

作用:
防止过多的数据注入到网络中,可以使网络中的路由器和数据链路不过在
拥塞控制主要有四个算法:
分别为:慢启动算法,拥塞避免算法,快重传,快恢复;
慢启动算法:
初始发送拥塞窗口为cwnd=1,确认发送成功后,cwnd=2, 慢启动算法没经过一个传输轮次,拥塞窗口cwnd就加倍
拥塞避免:
为了防止拥塞窗口增加过快而导致网络拥塞,所以需要设置一个慢开始门限ssthresh:
1 cwnd<ssthresh 使用慢启动算法
2. cwnd>ssthresh 使用拥塞避免算法
3. cwnd=ssthresh 两个都可以
拥塞避免是让cwnd缓慢增加 每一个传输轮次只加1;
无论是慢启动还是拥塞避免,只要判断出现网络拥塞,就设置慢开始门限ssthresh/=2; cwnd =1;然后在使用慢启动算法
**网络拥塞:*发送方发送一些报文时,如果发送方没有在时间间隔内收到接收方的确认报文段,则认为是网络拥塞;
*快重传算法: 选择性重传(左边界和右边界)
接收方收到一个失序的报文段后就立刻就发出重复确认,如果发送方收到三个重复的ack时,意识到丢包了,于是马上继续重传,不用等待一个往返时间;
快恢复算法:
AIMD:
1.ssthresh /=2;
2.cwnd=ssthresh/2;
3.拥塞避免算法;

三次握手 四次挥手

三次握手
服务端先会进入到监听状态:
1.客户端向服务端发起请求syn
2.服务端接收到syn后, 发送ack 和服务端的syn;
3. 客户端接收到 ack,和服务端的syn, 发送sck给服务端;
四次挥手
1.客户端发起关闭请求fin;
2.服务端接收到fin后 ,回复给客户端ack
3.由于服务端还有数据发送,完成后发送fin给客户端
4.客户端接收到fin后,回复ack给服务端,需要等待2MSL;

TCP的keep-alive

TCP 并不是一个轮询的协议,当一方网络发生故障或者其他原因连接失败失效,在下一个数据到达之前是不知道的;
keep-alive, 它的作用就是探测对端的连接有没有失效。

解决方案:一般是一方定时给另一方发送保活的数据包,保持连接和判断对方的状态;

TCP粘包问题

由于TCP是基于字符流传送数据的,所以可能会导致多个数据包粘结成一个包:

######## 本文是基于浏览其他网文和自己对改知识的认知的基础上进行编辑的,如果发现有什么不足的,还请大佬们不吝赐教

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值