网络编程----TCP/UDP协议重点详解(1)

TCP、UDP协议是TCP/IP协议族中很重要的传输层协议。和IP协议相比,TCP、UDP更靠近应用层,可操作性更强。TCP协议本身的可靠性也为网络中的传输提供了一定的保障。相比于TCP协议,UDP协议传输和编程更简单。

TCP的特点:面向连接的,可靠的,字节流服务

TCP协议支持的是端对端的通信,使用TCP通信的双方必须先建立连接,才能开始数据的读写(基于广播和多播的应用程序不能使用TCP服务)。TCP在数据传递时,有确认、窗口、重传、拥塞控制机制保证数据的可靠传输。TCP连接是全双工的,完成数据交换后,通信双方必须断开连接来释放系统资源。

TCP的C/S模型及建立连接:

 当客户端发起连接时,TCP通过三次握手建立连接

三次握手的作用:

①确认双方的接受能力、发送能力是否正常;②指定自己的初始化序列号,为之后的可靠传输做准备(如果是https协议的话,三次握手的过程还会进行数字证书的验证及加密密钥的生成)

为什么是三次握手,而不是两次或者四次?

如果只有两次握手的话,比如说失效的报文段,突然发送到服务端,服务端收到失效报文段的请求后,会发送确认报文,新的连接就建立起来了。但现在由于客户端并没有发出请求,所以并不会理睬服务端的确认,也不会像服务端发送数据。而服务端以为已经连接起来了,一直在等待,会浪费服务器资源。

三次连接的就可以建立连接,四次会浪费网络资源。

在三次握手过程中,哪个阶段容易被攻击?

在第二次握手服务器处于SYN_REC状态时容易被攻击。服务器第一次收到客户端的 SYN 之后,就会处于 SYN_REC状态,此时双方还没有完全建立其连接,服务器会把此种状态下请求连接放在一个队列里,我们把这种队列称之为半连接队列(已经完成三次握手,建立起连接的就会放在全连接队列中)。如果此阶段下有同一客户端不断的向服务器发送连接,半连接队列被全部占用,就会导致其他客户端不能再连接服务器。(syn溢出攻击/syn泛洪

四次 挥手断开连接:

为什么是四次挥手?三次行不行?

TCP建立连接要进行3次握手,而断开连接要进行4次,因为TCP连接是全双工的(数据可在两个方向上同时传递)所以进行关闭时每个方向上都要单独进行关闭。关闭的方法是一方完成它的数据传输后,就发送一个FIN来向另一方通告将要终止这个方向的连接。另一端收到一个FIN,它必须通知应用层TCP连接已终止了这个方向的数据传送并回复确认信息。

当服务器收到客户端的FIN时,并不会立即关闭连接,会先向客户端发送一个ACK通知客户端已经收到了关闭通知。等到将数据发送完后,才会向客户端发送自己的FIN。

为什么要有TIME_WAIT状态?

(TIME_WAIT存在时间约为2MSL,一般2分钟左右---->MSL:最大报文段生存时间,2MSL:报文段收到并回复的总时间)

①可靠的终止TCP连接

客户端发出的最后一个ACK可能会丢失,服务器如果没有收到客户端的确认信息,就会不断的发送FIN。所以客户端不能立即关闭,必须在确认服务器接收到了ACK之后才会关闭。客户端会设置一个计时器,等待2MLS的时间,如果这段时间内再次接收到FIN,那么重发ACK并再次等待2MSL。如果2MSL时间内没有再次收到FIN,那么说明服务器成功接收ACK,则关闭TCP连接。

②保证迟来的数据被识别并丢弃

防止上一次连接中的报文段出现影响新连接。经过2MLS后,上一次连接中的包都会消失。

断开连接时,可能会受到哪些攻击?

客户端在TIME_WAIT状态时,服务器多次间隔式发送FIN,导致客户端 始终重置等待时间,TIME_WAIT状态一直存在,服务器收不到ACK确认信息,不能与已关闭的客户端断开连接,端口一直被占用。

注:如果通信双方的任一方send或recv超时,就会直接进入CLOSED状态。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值