必须要知道的那些计算机网络知识

TCP与UDP是两种不同的网络传输协议。TCP提供面向连接、可靠的传输服务,适用于文件传输、邮件等场景,而UDP则更高效,适用于实时应用如QQ语音、视频。TCP通过三次握手建立连接,确保双方通信正常,防止旧连接请求。四次挥手用于断开连接,确保数据传输完成。TCP通过序列号、确认应答、校验和、流量控制和拥塞控制等机制保证可靠传输。滑动窗口和流量控制调节发送速率,防止接收方来不及处理。
摘要由CSDN通过智能技术生成

TCP与UDP的区别

  • TCP是面向连接的,它可以提供可靠的数据传输服务
  • UDP是无连接的,不能保证数据传输的可靠性
  • TCP传输的效率低,需要更多的资源
  • UDP传输的效率高,需要的资源少
  • TCP:文件传输、邮件发送接收、远程登录、网页加载、HTTP使用TCP而不是UDP的原因是(打开)网页必须传输大量数据,并且TCP协议提供传输控制,按顺序组织数据并纠正错误
  • UDP:QQ语音、视频、直播

如何防止UDP丢包

  • 接收端处理时间过长,导致丢包,调用recv方法接收端收到数据后,处理数据花了一些时间,处理完后再次调用recv方法,在这两次调用的时间 间隔里,发过来的包可能丢失。对于这种情况,可以修改接收端,将包接回后存入一个缓存区,然后迅速返回继续recv。
  • 发送的包巨大导致丢包:虽然send 方法会帮你做大包切割成小包发送的事情,但包太大也不行。例如超过50k的一个udp包,不切割直接通过 send 方法发送也会导致这个包丢失,这种情况需要切割成小包逐个send。
  • 发送的包较大,超过接收者缓存导致丢包:包超过mtu size数倍,几个大的udp包可能会超过接收者的缓冲,导致丢包。这种情况可以设置socket接收缓冲。
  • 发送包的频率太快,虽然每个包的大小都小于mtu size,但是频率太快,例如40多个mtu size的包连续发送中间不sleep,也有可能导致丢包。这种情况有时也可以通过设置socket接收缓存解决,但有时解决不了,所以在发送频率过快的时候还是sleep一下。

为什么三次握手/四次挥手

  • 三次握手:最主要的目的是双方确认自己与对方发送与接收都是正常的,缺一不可;防止已经失效的建立连接的请求又回到服务器,建立了多余的连接,浪费资源。
  • 四次挥手:保证数据传输完毕,且对方全部收到。TCP结束数据发送要断开连接的时候,所以要确保双方结束了发送数据,又结束了接收数据。开始,客户端结束了数据发送,会告知服务器,这时客户端还还是可以接收数据的,服务端接收到客户端发送过来的断开请求,它只会停止接收数据,但是服务器还是可以发送数据,当服务器也发送完数据之后,它会向客户端发送一个FIN包,告知客户端我的数据发送完了,我也要断开连接了。客户端收到这个FIN包之后,会回发一个确认报文,此时双方才都会去,关闭发送和接收的通道。
    三次握手(TCP协议建立连接的时候需要经过三次握手过程)
  • 第一次握手:由客户端向服务端发送一个连接建立的请求,发送一个SYN位标记位为1的数据包
  • 第二次握手:由服务端向客户端发起的,是用来发送服务端的请求连接的,这个过程中的SYN位和ACK位标记为1的数据包
  • 第三次握手;由客户端向服务端,这是对服务器上一个数据包的确认,这个请求中的ACK位标记为1的数据包

四次挥手( TCP完成了数据发送之后,就会尝试着断开连接,要经过四次挥手):

  • 第一次挥手:由客户端向服务端发起的,这时客户端完成了数据发送,会发起一个包,去进行连接断开的请求,这个数据包中的 FIN 为1。
  • 第二次挥手:由服务器发送给客户端的,是用来确认客户端断开连接请求的数据包,所以是一个 ACK 数据包。
  • 第三次挥手:是由服务器发送给客户端的,这个时候如果服务端也发送完毕的话,也会向客户端发起一个断开连接的申请,这个请求中 FIN 位同样会被标记为1。
  • 第四次挥手:由客户端发送给服务器的,是用来确认服务端上一次的请求断开连接。发送出一个 ACK 标志为1的报文,

TCP协议如何保证可靠传输?

  • 应用数据被分割成 TCP 认为最适合发送的数据块。
  • TCP 给发送的没一个包进行编号,接收方对数据包进行排序,把有序数据传送给应用层。
  • 校验和:TCP 将保持它首部和数据的校验和,这是一个端到端的校验和,目的是检测数据在传输过程中的任何变化。如果收到的校验和有差错,TCP 将丢弃这个报文段和不确认收到此报文段。
  • TCP 的接收端会丢弃重复的数据。
  • 流量控制:TCP 连接的每一方都有固定大小的缓冲空间,TCP 的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据,能提示发送发降低发送的速率,防止包丢失,TCP 使用的流量控制协议是可变大小的滑动窗口协议。(TCP利用滑动窗口实现流量控制)
  • 拥塞控制:当网络拥堵时,减少数据的发送。
  • ARQ协议:也是为了实现可靠传输,它的基本原理是没发完一个分组就停止发送,等待对方确认,在收到确认后再发送下一个分组。
  • 超时重传:当 TCP 发送一个段后,它启动一个定时器,等到目的端确认收到这个报文端。如果不能及时收到一个确认,将重发这个报文端。

滑动窗口和流量控制

  • TCP 利用滑动窗口实现流量控制。流量控制是为了控制发送方发送速率,保证接收方来得及接收
  • 窗口是缓存的一部分用来暂时存放字节流。发送方和接收方各有一个窗口,接收方通过 TCP 中的首部中的窗口字段告诉发送方自己的缓冲区大小还剩下多少可以接收数据,于是发送方就可以根据这个值来调整自己发送窗口的大小,从而影响发送方的发送速率,而不会导致接收方处理不过来。如果窗口字段为 0,则发送方不能发送数据。
  • 拥塞控制:如果网络出现拥塞,分组将会丢失,此时发送方会继续重传,导致网络拥塞程度更高。因此,当出现网络拥塞时,应当控制发送方的速率。这一点和流量控制很像,但是出发点不同。流量控制是为了让接收方能来得及接收,而拥塞控制是为了降低整个网络的拥塞程度。
  • TCP 主要通过四个算法来进行网络控制:慢开始、拥塞避免、快重传、快恢复。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值