传输层---TCP协议与UDP协议

传输层—TCP协议与UDP协议

传输层:
TCP协议和UDP协议是属于传输层协议
传输层功能主要是:负责端与端的数据传输

TCP协议:传输控制协议–面向连接、可靠传输、面向字节流
UDP协议:用户数据报协议–无连接、不可靠、面向数据报

UDP协议:

一、无连接,不可靠:
客户端只需要知道服务端的地址信息就可以直接发送数据,并且不会关心数据是否已经到达。

二、面向数据报:
1、 特性取决于UDP数据报长度这个字段–uint16_t决定了整个udp整个数据报长度不能大于64K,若大于的话,两个字节就不够存储
2、因为UDP数据报长度的限制,因此若数据过大,则需要用户在应用层进行数据分包,将大数据分割成一个小小的数据包(64k-8)发送大数据的时候会报错
3、UDP不可能保证数据的可靠,有序到达,因此可能乱序,需要用户在应用层进行包序管理
4、UDP在sendto发送数据的时候将数据放到缓冲区,则会直接封装头部,将数据发送出去(每一次得sendto发送的数据都会封装一个UDP头部)

TCP协议:
双方通信之前需要建立连接(三次握手),在上一篇博客链接 三次握手与四次挥手详细介绍。
接下来主要介绍可靠传输以及其他相应的机制:
一、可靠传输

  • 确认应答机制—发送每一条数据要求对方进行确认回复
  • 超时重传机制—等待确认回复超时,则重发数据
  • 协议字段中的序号/确认序号—数据的确认回复.还有一个作用:确认序号一定是保证在这个序号之前的数据都已经收到,第一条数据没有收到,就算收到第二条数据、也不会对第二条数据进行确认回复,因为每一条回复都要保证在这之前的数据都已经完全收到。
  • 协议中字段中的校验和—数据如果不一致,则会丢弃数据要求进行重传
  • 面向连接

TCP可靠传输避免丢包 利用了滑动窗口机制
二、滑动窗口机制

  • 实现数据的连续传输:通过一个窗口后沿(保存序号的变量)和一个窗口前沿以及一个当前的发送序号;通过这几个序号就可以维护一个窗口。
  • TCP在每次发送数据的时候,都会给对方的报文头部中发送一个字段,16位窗口大小----用于告诉对方一次给自己连续发送多少数据,(窗口大小不大于缓冲区剩余空间的大小)

1、发送窗口:

  • 发送窗口的前沿减去后沿不能大于接收方返回的窗口大小
  • 后沿的移动取决于是否收到相应数据ack的确认回复
  • 前沿的移动取决于接收方返回的窗口大小

2、接收窗口:

  • 后沿的移动取决于是否收到数据,后沿向前移动
  • 前沿取决于缓冲区中空闲空间的大小(用户取走或者缓冲区设置的大小)

3、特性:

  • 发送方可以连续发送多条数据,等待对方回复,提高一定的传输性能
  • 实现数据的连续传输:连续发送数据连续接受确认回复,而每一个回复,都保证之前的数据已经安全到达,避免因为确认回复的丢失而导致数据重传(因为每一条确认序号,都需要保证在这之前的数据都安全到达)
  • 流量控制:接收方根据自己接受缓冲区中剩余空间大小,向对方返回窗口大小,进而限制发送方的发送速度,避免发送方发送数据过多,导致缓冲区满溢后,数据丢包

三、快速重传机制
快速重传机制也叫回退n部协议
当接收方瘦到第二条数据,而为收到第一条数据,则这时认为数据有可能丢失,因此连续发送三次对应数据的重传请求,当发送方连续接收到三次重传请求,才会将数据进行重传,(避免因为网络原因而延迟到达得到重传)

四、拥塞控制:
发送方在起始发送数据的时候,若连续发送大量数据,但是网络状况不好,则它有可能造成大量丢包重传;为了避免这种情况,因此采用一个拥塞控制–在传输数据的时候采用慢启动、快增长的方式进行数据传输(一开始发送的数据量比较小,收到确认回复以后,则发送的数据量逐渐提高—指数级别的提高)

五、如何提高性能
(1) 延迟应答机制:接收方接收到数据在之后,并不会立即进行确认回复我,尽最大可能保证窗口大小(在延迟期间,有可能用户调用recv将数据从缓冲区中取走),保证数据通信吞吐量
(2)捎带应答机制:接收方每接受一条数据就要进行确认回复,而确认回复就是一个tcp报头,通过即将发送的数据头部中将上次的确认回复捎带上,可以减少纯报头的确认回复;

在TCP三次握手阶段:通信双方会协商一个数据----最大数据段大小-MMS(三次握手商议MMS大小)不包含报头。用户send 发送数据会将数据发送到缓冲区中,然后操作系统会从缓冲区中,然后操作系统缓冲中去每次取出不大于MMS的数据,封装TCP头部进行数据传输;数据到达对端之后TCP分用之后,将数据放入接收缓冲区中,用户recv从缓冲区中取出想要大小的数据。

六、TCP粘包问题
TCP的粘包问题:TCP在传输层对数据边界并不敏感,(并不管什么数据,以及有多少数据,只管发送合适大小的数据),多条数据合成一条数据进行处理(发送或交付给用户)粘包有可能在发送段产生也可能在接收方产生。

如何解决粘包问题:产生粘包的本质原因是TCP在传输层对数据边界不敏感,因此需要用户在应用层进行数据的边界管理。

常用方法:数据定长/特殊字符进行间隔(HTTP)/在不定长数据的应用层头部中定义数据大小(UDP)。

TCP与UDP的区别
(1)TCP提供的是面向连接的传输,通信之前(通过三次握手机制)建立连接;UDP提供的无连接的传输,通信前不需要建立连接
(2)TCP提供的是可靠的传输(有序、不丢失、不重复);UDP提供不可靠传输
(3)TCP面向字节流的传输(有序的,可靠的,双向的,继续连接的字节流传输),因此它能将信息分割成组,在接受方重新组合,;UDP是一个面向数据报的传输,不具备分组
(4)TCP提供拥塞控制和流量控制机制;UDP不提供相应机制
(5)TCP粘包:数据传输比较灵活,但是会有一种情况:在缓冲区中TCP有可能将多条数据当作一条进行处理;UDP不会产生粘包问题(面向数据报:数据整条收发,不够灵活但是不会产生粘包问题)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值