【网络】IP协议的特点、TCP和UDP的特点及区别以及他们的报头信息、为什么TCP是可靠的?粘包的原因等

一 、IP的报头信息

特点:无连接、不可靠、无状态

          无连接:指IP通信的双方都不长久的维持对方的任何信息。这样上层协议每次发送数据的时候,都必须明确指定对方的IP地址。

          不可靠:IP协议不保证数据能准确的到达接收端,只是尽自己最大努力传送

          无状态:通信双方不同步传输数据的状态信息,也就是说IP数据报的发送、传输、接收都是相互独立的、没有上下文关系的。那么接收端就可能收到重复的、乱序的报文段。

二、TCP

          URG(紧急)、ACK(确认)、PSH(传送)、RST(重置)、SYN(建立联机)、FIN(结束)

TCP流式服务

流式服务:发送端send的次数与接收端recv的次数没有直接的联系,并且send只是将数据写到发送缓冲区中,recv只是从接收缓冲区中获取数据。如果recv一次调用将一次发送的数据获取不完,下次recv接着获取。

 

三、UDP

UDP数据报服务

数据报服务:sendto发送数据和对端recvfrom接收数据的次数相等。recvfrom接收数据时必须将sendto发送的数据一次接收完,否则,数据丢失。sendto一次发送的数据的长度应该小于等于recvfrom读取数据的大小

 

TCP与UDP的区别

      TCP是面向连接的可靠的流式服务,

      UDP是无连接的不可靠的数据报服务,

TCP需要进行三次握手建立连接后,才可以传输用户数据,可靠性是通过应答确认超时重传机制保证,还有滑动窗口进行流量控制。

为什么TCP是可靠的 ?

           ①确认和重传机制;(建立连接时三次握手同步双方的“序列号+确认号+窗口大小信息”)

           ②数据不乱序(TCP报头中的序列号);

           ③数据不出错(16位的校验和);

           ④滑动窗口(保证数据传输中最小的丢包率,流量控制)

           ⑤拥塞控制(TCP的拥塞控制由四个核心算法组成:慢启动、拥塞避免、快速重传、快速恢复)

超时重传:TCP协议在发送数据以后,每一个报文段都会有一个定时器,在定时器指定的时间内接收端对于这个报文段的确认报文如果没有到达,则会重新发送一次,并且这次的定时器时间为上次的两倍。

滑动窗口:TCP用滑动窗口实现流量控制。所谓流量控制,主要是接收方传递信息给发送方,使其不要发送数据太快,是一种端到端的控制。主要的方式就是返回的ACK中会包含自己的接收窗口的大小,并且利用大小来控制发送方的数据发送。窗口指接收通告窗口,告诉对方本端的TCP接收缓冲区还能容纳多少字节的数据,对方就可以控制发送数据的速度。

拥塞控制:拥塞控制就是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。

    主要依赖于一个拥塞窗口来控制。

慢启动:最初的TCP在连接建立成功后会向网络中发送大量的数据包,很容易导致网络中路由器缓存空间耗尽,从而发生拥塞。因此新建立的连接不能够一开始就大量发送数据包,而只能根据网络情况逐步增加每次发送的数据量,以避免上述现象的发生。

为什么UDP不可靠?

  UDP只有一个socket接收缓冲区,没有发送缓冲区,只要有数据就发,不管对方是否可以正确接收。

如何使UDP进行可靠的数据传输?

      在应用层模仿传输层TCP的可靠性传输,不考虑拥塞控制,可靠的UDP简单设计是:

  • 添加seq/ack机制,确保数据发送到对端;
  • 添加发送和接收缓冲区;
  •  添加超时重传机制。

      UDP不属于连接协议,具有资源消耗少,处理速度快的优点,音频、视频和普通数据在传送时,使用UDP较多,即使丢失少量的包,也不会对接收结果产生较大的影响。传输层无法保证数据的可靠性传输,只能通过应用层实现

TCP粘包的原因?如何解决

1、要发送的数据小于TCP发送缓冲区的大小,TCP将多次写入缓冲区的数据一次发送出去,将会发生粘包。(发送端需要等缓冲区满才发送出去)

2、接收数据端的应用层没有及时读取接收缓冲区中的数据,将发生粘包。(接收方不及时接收缓冲区的包,造成多个包接收)

解决方法:

制定应用层的通讯协议,通过协议来规范现有接收的数据是否满足消息数据的需要。

      ① 使用带消息头的协议 ,消息头存储消息开始标识及消息长度信息,服务端获取消息头的时候解析出消息长度,然后向后读取该长度的内容;

      ② 设置消息边界,服务端从网络流中按消息编辑分离出消息内容;

最优方案:接收方创建一个预处理线程,对接收到的数据包进行预处理,将粘连的包分开。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值