tcp协议简述(tcp工作原理,tcp包头,三次握手四次挥手,syn攻击)

tcp:传输控制协议(Transmission Control Protocol)。

    tcp是一种面向对象的可靠的基于字节流的传输层通信协议

tcp的主要职责和工作过程

1.向上与用户应用程序进程连接,向下与网络协议ip连,实现跨层通信
2.工作过程:用户的程序进程首先调用tcp,然后将应用程序数据递交给tcp,实现数据在IP网络上的传输。tcp将这些数据打包分段并调用ip协议向目的主机进行传输每一段数据。接收方将数据段放入接收缓存器,然后将每段数据重装位应用程序数据,再将这些数据发送到目的应用程序进程

在这里插入图片描述

tcp包头详解

至少包含20字节
具体结构如图:
tcp包头图解

1.源目端口就:标识主机发起或要到达的应用程序使用的端口
2.顺序号字段:32比特。用来标识tcp从源端发送到目的端发送的字节流,(个人理解:就是将数据分段后区分顺序的字节毕竟要重排)
3.确认字号段:32比特。只要ack为1时生效,包括期望收到的下一个序号。
4.数据偏移;
5,六位预留位
6.URG:紧急指针有效;ack:确认序号有效;psh:接收方应该将这个数据交给应用层;rst:重新连接。syn:发起一个连接;fin:释放一个连接。
7.窗口大小:用来控制流量。(表示本机期望一次接受的最大数据单位)
8.TCP校验:对整个tcp头部校验和计算
9.紧急指针
10.选项字段

三次握手

在这里插入图片描述
1.第一次握手:客户端将标志位syn重置为1,随机产生seq=a,并将数据包发送给服务端
2.第二次握手:服务端收到syn=1知道客户端请求连接,服务端将syn和ACK都重置为1,ack=a+1,随机产生一个值seq=b,并将数据包发送给客户端,服务端进入syn_RCVD状态。
3.第三次握手:客户端收到确认后,检查ack是否为a+1,ACK是否为1,若正确将ACK重置为1,将ack改为b+1,然后将数据包发送给服务端服务端检查ack与ACK,若都正确,就建立连接,进入ESTABLISHEN.

为何非要进行三次握手?

个人理解:如果只有两次握手 ,如果我们的一次请求因为网络问题超过重传时间就会导致,一条信息传两次甚至更多次,导致浪费资源。

SYN攻击;

就是在当服务端发送syn_ACK后等待客户端的确认ack,期间称为半连接状态,若此时服务端伪造大量的不存在ip进行,并向服务端发送syn包,但由于地址不存在,因此会占用队列,导致正常的syn包因为队列溢出而被抛弃,导致不断重发导致网络堵塞甚至系统瘫痪。
解决方法:syn攻击为ddos攻击,检测syn攻击方法:当服务端遭受大量半连接状态的且源IP是随机的,则可以断定受到syn攻击。
命令:#netstat -nap | grep SYN-RECV

四次挥手

  就是终止tcp连接的过程。

在这里插入图片描述
1.开始双方都处于连接状态
2.客户端进程发出FIN报文,并停止发送数据,在报文中FIN结束标志为1,seq为a连接状态下发送给服务器的最后一个字节的序号+1,报文发送结束后,客户端进入FIN-WIT1状态。
3.服务端收到报文,向客户端发送确认报文,ACK=1,seq为b服务端给客户端发送的最后字节的序号+1,ack=a+1,发送后客户端进入close-wait状态,不再发送数据,但服务端发送数据客户端一九可以收到(城为半关闭状态)。
4。客户端收到服务器的确认报文后,客户端进入fin-wait2状态进行等待服务器发送第三次的挥手报文。
5,服务端向fin报文FIN=1ACK=1,seq=c(服务器向客户端发送最后一个字节序号+1),ack=b+1,发送结束后服务器进入last-ack状态等待最后的确认。
6.客户端收到是释放报文后,向服务器发送确认报文进入time-wait状态,后进入close
7。服务端收到确认报文进入close状态。

为什么进行四次挥手?

 1.因为tcp是全双工的协议,建立连接后需要每个方向独立断开连接,故要保证每一个方向都收到syn和ack后才能断开

tcp协议的特点

1.面向连接: 通信双方必须先建立连接才能简历可靠的传输。
2.如何可靠传输的保证?

1>.发送应答机制:每次发送后都需要确定对方是否收到完整信息,ack校验。
2>.超时重传:每段发送后就启动计时器,如果在定时时间内没有收到应答就会重新发送这个报文段。
3>.错误校验:使用校验和函数来计算每一个数据是否有错
4>.== 流量控制和阻塞管理==:流量控制来避免主机发送过快而导致丢包

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值