TCP和UDP的区别

复习一下计算机基础知识,准备春招…

TCP

TCP(Transmission Control Protocol,传输控制协议)可靠数据传输协议(保证数据正确性)、面向连接的、面向字节流、传输慢,安全漏洞多,容易受到攻击(syn flood 如果在第二次握手后服务器就分配资源)、TCP 首部开销20 字节(TCP 报文段由首部字段和数据字段组成,首部字段一般 20 字节,但是由于首部字段中 TCP 的选项字段是可变的,所以 TCP 的首部长度是可变的。(选项字段为空,TCP 首部字段 20 字节))、要求系统资源较多、用于 web 或者 e-mail。客户和服务器交换数据前,必须先在双方之间建立一个 TCP 连接,之后才能传输数据。并且提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。
TCP 的首部字段中,序号确认号是最重要的两个字段。这对于实现 TCP 的可靠数据传输十分重要。其中,序号中存放的是:发送数据中的第一个字节的字节流编号。确认号中存放的是:希望从对方接受的下一个字节的序号。TCP 的首部字段主要包括:源端口号和目的端口号、序号、确认号、首部长度、标志字段(ACK\SYN\FIN)、接收窗口(用于流量控制,用于指示接收方愿意接收的字节数量)、可
选与变长的选项字段(用于发送方与接收方协商最大报文长度时、或在告诉网络环境下用窗口调节因子使用)、因特网检验和(差错检测)、紧急数据指针(一般不用)。
在这里插入图片描述

UDP

UDP(User Data Protocol,用户数据报协议)不可靠数据传输协议(可能丢包)、无连接的、面向数据报、传输快,安全漏洞少、首部开销 8 字节、要求系统资源较少、没有拥塞控制(网络负担重)、用于视频通话。

它不提供可靠性,只是把应用程序传给运输层的数据报发送出去,但是不能保证它们能到达目的地。由于 UDP 在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,所以传输速度很快。

UDP 报文段结构:源端口号、目的端口号、长度(指示了在 UDP 报文段中的字节数(首部+数据))、检验和(差错检测)、应用数据。
在这里插入图片描述

TCP SYN flood: 攻击者首先伪造地址对服务器发起 SYN 请求(我可以建立连接吗?),服务器就会回应一个 ACK+SYN(可以+请确认)。而真实的 IP 会认为,我没有发送请求,不作回应。服务器没有收到回应,会重试 3-5 次并且等待一个 SYN Time(一般 30 秒-2 分钟)后,丢弃这个连接。

如果攻击者大量发送这种伪造源地址的 SYN 请求,服务器端将会消耗非常多的资源来处理这种半连接,保存遍历会消耗非常多的 CPU 时间和内存,何况还要不断对这个列表中的IP 进行 SYN+ACK 的重试。TCP 是可靠协议,这时就会重传报文,默认重试次数为 5 次,重试的间隔时间从 1s 开始每次都翻倍,分别为 1s + 2s + 4s + 8s +16s = 31s,第 5 次发出后还要等 32s 才知道第 5 次也超时了,所以一共是 31 + 32 = 63s。也就是说一个假的 syn 报文,会占用 TCP 准备队列 63s 之久,而半连接队列默认为 1024,系统默认不同,可 cat /proc/sys/net/ipv4/tcp_max_syn_backlog c 查看。也就是说在没有任何防护的情况下,每秒发送 200 个伪造 syn 包,就足够撑爆半连接队列,从而使真正的连接无法建立,无法响应正常请求。 最后的结果是服务器无暇理睬正常的连接请求—拒绝服务。

半连接队列:服务器第一次接受到客户端的 SYN 之后,就会处于 SYN_RCVD 状态,此时双方还没有完全建立连接,服务器会把这种状态下请求连接放在一个队列里,我们把这种队列称之为半连接队列。当然还有全连接队列,就是已经完成三次握手,建立起连接的就会放在全连接队列中,如果队列满了就会出现丢包现象。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值