TCP连接

一,引言

1.在http超文本传输协议中,要完成客户端和服务端的请求和响应,第一步就是要让客户端和服务端建立可靠的连接,http协议在传输层采用了tcp连接。

二,tcp报文

1.要了解tcp连接的过程我们首先要认识一下tcp报文。
在这里插入图片描述

  • 序号TCP从进程接受数据字节时,就把它们存储在发送缓存中,并对每一个字节都进行编号,当字节都被编上号后,TCP就给每个报文段指派一个序号,序号就是该报文段中第一个字节的编号。
  • 确认号:对发送端的确认信息,用它来告诉发送端这个序号之前的数据段都已经收到,只有ACK=1时有效
  • SYN : 同步序号位,TCP需要建立连接时将这个值设为1。
  • ACK: 只有当ACK=1时,确认序列号字段才有效;当ACK=0时,确认号字段无效。
  • FIN: 发送端完成发送任务,当TCP完成数据传输需要断开连接时,提出断开连接一方将这个值设为1

三,tcp连接的过程–三次握手

2.三次握手图解:
在这里插入图片描述
(1) 首先由客户端发送SYN报文,(设置SYN=1,请求序列号seq=x),此时客户端处于SYN_SEND状态。

(2) 服务端接收到来自客户端的报文,发送ACK报文,(设置ACK=1,确认序列号为ack=x+1(客户端发送的请求序列号+1))和自己的SYN报文(设置SYN=1,请求序列号seq=y), 此时服务端处于SYN_REC状态(半连接状态)

(3) 服务端接收到客户端的SYN报文发送自己的确认报文(seq=x+1,ACK=1.ack=y+1)此时客户端处于ESTABLISH状态,当服务端接收到ACK报文,连接建立。

3.需要三次握手的原因:某些网络结点长时间滞留了,延误到连接释放以后的某个时间才到达服务端,为了防止已失效的请求报文段突然又传送到了服务器端而产生连接的错误。导致服务端认为连接已经建立,一直等待客户端发送请求,浪费了网络资源。

4.SYN攻击,降低半连接的等待时间。

三,tcp断开连接的过程–四次挥手

1.两端都可以发出终止连接请求,通常由客户端发出。

2.四次挥手图解:
在这里插入图片描述
(1) 由客户端发起终止连接请求,发送FIN报文(seq=u,FIN=1)进入FIN_WAIT1状态。
(2) 服务端接收到FIN报文,发送自己的ACK报文(ACK=1,ack=u+1,seq=v),此时服务端处于CLOSE_WAIT。由于此时服务端数据可能没有发送完,不会立即发送自己的FIN报文,
(3)当客户端接收到ACK报文,进入FIN_WAIT1状态,等到服务端数据传输完毕,服务端发送自己的FIN+ACK报文(FIN=1,ACK=1,seq=w.ack=u+1),此时服务端处于LAST_ACK状态。
(4)客户端接收到FIN+ACK报文之后,发送自己的ACK报文(ACK=1,ack=w+1,seq=u+1),等待2MSL断开连接

2.等待2MSL的原因
确保客户端能接收服务端重发的ACK+FIN报文,从而保证了服务端能接收到ACK报文。

四,tcp优缺点分析

1.优点:可靠,稳定
TCP的可靠体现在TCP在传输数据之前会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完后,还会断开连接用来节约系统资源。

2.缺点:慢,效率低,占用资源高,易被攻击:
TCP在传递数据之前要先建立连接,这会消耗时间,而且在数据传递时,确认机制,重传机制,拥塞控制机制等都会消耗大量的时间,而且要在每台设备上维护所有的传输连接。事实上每个连接都会占用系统的CPU、内存等硬件资源。

因为TCP有确认机制、三次握手机制,这些优点在成了缺陷,导致TCP容易被人利用,实现DOSDDOSCC、猜测攻击等

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值