TCP&UDP

最开始先来介绍一下tcp,udp,tcp/ip三者的区别:
tcp/ip是一个协议簇,udp属于其中一种,因为tcp,ip是其中其中重要部分就以tcp/ip来命名。


tcp、udp区别

tcp传输控制协议,udp用户数据包协议,两者都是传输层协议,用来满足不同应用层数据传输的需要。

  1. TCP面向连接服务,在传输数据前先建立连接,数据传输结束之后释放连接(tcp完成连接建立通过三次握手,释放了解通过四次挥手),UDP为无连接服务,传输数据前不需建立连接。
  2. TCP连接建立增加了系统开销,数据传输效率降低,而TCP系统开销小,数据传输效率高。
  3. 从传输方式来讲,TCP是面向数据流的,UDP是面向报文的。
  4. UDP只是在IP基础上增加了端口的功能,并没有数据确认,报文排序,也没有流量控制,因此会出现报文丢失失序等现象,故UDP提供的是不可靠的数据传输方式;而TCP提供端对端的面向连接的数据传输,采用“带重传的肯定确认”技术,发送方给接收方发送数据,同时启动计时器,接收方接收到数据之后给发送方返回确认报文,接收方接收到确认报文继续发送下一组报文,若接收方没有收到数据,计时器结束发送方为接收到确认报文,发送方会重新发送该报文。故TCP传输方式更为可靠。
  5. UDP不提供流量控制和拥塞控制,TCP提供流量控制和拥塞控制。
  6. TCP只能一对一通信,UDP支持一对多,多对一,多对多通信。
  7. UDP首部开销小,8B,TCP首部20B,TCP首部比TCP复杂得多。

UDP首部包括:源端口号,目的端口号,报文长度和检验和(UDP检验和是可选的,TCP检验和是强制性的)
TCP首部包括:源端口号,目的端口号,序号,确认号,偏移位(报文数据起始段到报文起始段的长度即首部长度),保留位,控制位(6位),窗口大小,校验和,紧急指针,选项部分,填充。其中选项部分:最大报文段长度选项(MSS,报文段所能携带的数据最大长度,建立连接时,双方进行协商,最佳做法就是取双方声明的MSS中的最小值,若有一方没有声明,则取默认值。),窗口比例因子选项(建立连接时商定),时间戳选项(解决序号循环产生的重号问题),负确认选项。

  1. 应用:UDP适用于对实时性要求高的应用(例如:IP电话,视频会议,直播等),TCP适用于对可靠性要求高的应用(例如:文件传输)

TCP—三次握手四次挥手

TCP是全双工的,即:客户端在给服务端发送消息时,服务端也可以给客户端发送消息。

在传输数据前,建立连接,需要通过三个握手实现客户端服务端双方确认都能够收发消息。或者讲信道是不可靠的,在不可靠的信道上进行可靠的信息传输,三次握手是理论上保证可靠信息传输的最小值。
三次握手主要完成的工作:双方确认能够收发信息,商定初始传输序号,协商一些其他的通信参数:最大报文段长度,窗口比例因子等。
三次握手:
①第一次握手:客户端发送syn包到服务器(同步报文段SYN=1,初始序号seq=N,ACK=0),客户端进入SYN_SENT状态。–服务端确认能够接收信息
②第二次握手:服务端接收到syn包后,发送自己的SYN+ACK包(SYN=1,ACK=1,初始序号seq=M,确认序号ack=N+1),服务器进入SYN_RECV状态。–客户端确认能够收发信息
③第三次握手:客户端接收到服务端发送的syn+ack包后,向服务端发送ACK包(ACK=1,确认序号ack=M+1),双方进入ESTABLISHED状态。连接建立。–服务端确认能够发送信息
为什么是三次握手而不是两次握手:
(1)客户端服务端双方确认都能够收发信息,三次握手是理论上的最小值,仅两次的话,服务端无法确认发送信息的能力
(2)TCP协议,收发信息双方为了确认自己发送的信息对方是否接收到,引入序号和确认号,发送方发送数据包时附上一个序号N,接收方接收到信息之后,返回给发送方确认号(M=N+数据包大小),告诉发送方接收到信息可以发送下一个数据包,序号从M开始。如若只有两次握手,服务端未能接收到确认序号。


四次挥手:
数据传输完成之后,四次挥手来断开连接。
主机A关闭端口1到主机B端口2的连接:
①第一次挥手:TCP接收到最后数据的确认,主机A发送FIN报文段,FIN=1,序号seq=X(X为主机A发送数据最后字节序号+1)
②第二次挥手:对主机A发送的报文进行确认,ACK=1,确认序号ack=X+1
经过两次挥手已经断开主机A到主机B的连接;
主机B断开对主机A的连接:
③第三次挥手:TCP接收到最后数据的确认,主机B发送FIN报文段,FIN=1,序号seq=M
④第四次挥手:主机A租做出相应,对主机B发送的报文段进行确认,返回ACK=1,确认序号ack=M+1
经过后两次的挥手,主机B断开了到主机A的连接。

为什么建立连接时时三次握手,而关闭连接时需要四次挥手:
建立连接时:客户端给服务端发送SYN报文请求连接时,服务端可以将ACK和SYN放在一个报文中一起发送给客户端。但是在断开连接时:客户端给服务端发送FIN报文后,服务端返回ACK确认,之后当服务端数据全部发送给客户端后,服务端给客户端发送FIN报文来断开连接,故在关闭连接时,ACK和FIN是分别发送的,故断开连接时进行四次报文发送,需要四次挥手操作。


UDP泛洪攻击&TCP泛洪攻击

泛洪攻击:就是指攻击方不断的向目标主机发送大量的数据,导致目标主机资源消耗殆尽。
UDP是无连接的,UDP泛洪攻击就是指攻击方向目标主机发送大量的UDP报文,使目标主机忙于处理这些报文,而无法处理正常报文请求响应。
TCP泛洪攻击:当客户端向服务端发送SYN请求,服务端返回SYN+ACK应答报文,未收到客户端返回的ACK确认,服务端会再次发送SYN+ACK应答,并等待一段时间后,丢弃这个未完成的连接,这段等待的时间称为SYN Timeout,TCP泛洪攻击就是利用了SYN Timeout,向服务器发送大量伪造的TCP报文,使服务器忙于处理这些伪造报文,而无法处理正常的TCP报文请求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值