网络之TCP、UDP

TCP和UDP是传输层协议(具体网络分层请戳这里网络分层),者之间有很大的不同,写篇博客记录一下吧。

UDP   VS  TCP

UDP:无连接,不可靠,面向数据报,没有发送缓冲区有接收缓冲区

TCP:有连接,可靠,面向字节流,有发送缓冲区和接收缓冲区

UDP不保证性能,但其性能较好,TCP是实现安全与性能之间的平衡,这里主要记录TCP的一些原理,UDP对比TCP即可理解。

TCP安全机制:确认应答机制,超时重传机制,连接管理机制,流量控制以及拥塞控制

TCP协议头

(1)确认应答机制:由序列号和确认序列号实现

每一个ACK都带有确认序列号(比如2001),表示告诉发送端2001以前的数据我都已经接收到了,下次发数据从序列号为2001的数据开始发。

(2)超时重传机制

系统基于TCP协议实现,动态计算报文的最大生成时间(MSL),超时时间设置为2MSL。其作用是:超过超时时间,表示发送数据报或者确认数据报丢包,需要发送端重新发送数据报,系统中的发送缓冲区保存着数据,可以重发。如果是确认数据丢失,接收端会根据序列号判断出这些数据已经收到,丢弃数据,并发送ACK。MSL由网络情况决定,网络好时值小,网络不好时值大。

(3)连接管理机制

管理建立连接的过程,也就是常说的三次握手。

 建立连接的过程都是单方向的,客户端给服务器端发送请求连接信号,进入SYN_SENT状态,服务器端接收到信号,进入SYN_RCVD状态,给客户端发送确认信号ACK以及服务器端请求连接信号SYN,客户端收到后进入ESTABUSHED状态,并发送确认信号给服务器端,服务器端也进入了ESTABUSHED,到此连接就建立起来了。

可能会有人问可不可以是四次握手,或者两次握手呢?其实大于三次握手的都可以,知识鉴于性能方面还是三次握手(捎带应答)较好,两次握手是不行的,这样会丢失信号,会造成一些连接问题。

(4)流量控制

由于接收端接收能力有限,为了防止接收缓冲区被打满,在接收到的数据被丢弃,发送端没有收到对应数据的确认序号,重发数据,引起丢包重传等等一系列连锁反应。流量控制是接收端通过TCP协议头中的“窗口大小”字段告诉发送端发送数据大小,发送端根据窗口大小来决定要发送多少数据。当接收端缓冲区已满时,窗口大小设为0,此时发送方不在发送数据,而是定期发送窗口探测数据段,将窗口大小告诉发送端。

(5)拥塞控制

 因为网络上有很多的计算机, 可能当前的网络状态就已经比较拥堵. 在不清楚当前网络状态下, 贸然发送大量的数据, 是很有可能引起雪上加霜的。TCP引入慢启动机制, 先发少量的数据, 探探路, 摸清当前的网络拥堵状态, 再决定按照多大的速度传输数据。他的原理是:先将拥塞窗口值设为1,以慢启动指数级增长方式增长,达到一定阈值时转变为线性增长。出现少了丢包时,仅仅出发超时重传,当大量丢包时,就是网络拥塞了。发生网络拥塞时,将拥塞窗口置为1,同时将慢启动阈值置为拥塞时窗口大小的一半。拥塞控制是想尽可能快的把数据传输给对方,但又要避免网络拥塞的折中方案。

TCP性能机制:滑动窗口机制,延迟应答机制,捎带应答机制

(1)滑动窗口机制

滑动窗口处于发送端,窗口大小指的是无需等待确认应答而可以继续发送数据的最大值,取ack响应报文中的窗口大小字段和拥塞控制窗口大小中最小的那个值。根据确定的值进行窗口滑动。

原理:操作系统内核为了维护这个滑动窗口, 开辟了发送缓冲区来记录当前还有哪些数据没有应答; 只有确认应答过的数据,才能从缓冲区删掉,没有确认应答的数据还是要保存在发送缓冲区中。窗口越大,网络的吞吐率越高(吞吐率:发送数据在网络带宽中的占比)。这种机制也称“快重传”机制。

在传输过程中ACK丢包,可根据后续ACK确认,因为ACK代表这个序号前的所有数据都已经收到;若是数据报丢失,接收端会连续多次收到前一个数据的ACK(一般是三次),提醒发送端发送丢失的数据。

(2)延迟应答

原理:在接到多个数据报时,不针对每条数据报响应ack,而是延迟一定时间,这样接收缓冲区数据很快被处理,可以空间更大,返回的窗口大小字段就可以设置的更大,提高网络吞吐率和传输效率。

延迟多少是由系统根据数据包的数量以及时间来确定的(一个数量是2,时间是200ms)

(3)捎带应答

顾名思义,捎带着应答,把两次应答合并为一次应答。

好了,就整理到这里,希望可以帮助到你哦。

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值