(一)计算机网络:TCP的三次握手

(一)传输控制协议TCP:

  • 面向连接的,可靠的,基于字节流的传输层通信协议
  • 将应用层的数据流分割为报文段并发送给目标节点的TCP层
  • 数据包都有序号,对方收到则发送ACK确认,未收到则重传
  • 使用校验和来检验数据传输过程是否有误

IP协议:是TCP/IP体系中的网络层协议,根据端到端的设计原则,IP只为主机提供一种无连接、不可靠的、尽力而为的数据包传输服务

(二)TCP报文头:

下图为TCP报文头的图解:
在这里插入图片描述

  • **source port ,Destination port:**分别表示源端口目的端口,它们各占用两个字节,TCP和UDP均不包含IP,因为IP属于网络层,但它们均包含端口,因为其属于传输层。

线程通信可以通过:管道,内存共享,消息队列,信号量
前提是两个进程可以以标识唯一进程,通过此进程找到对应进程,在本地进程中可使用PID唯一标识进程
如果在不同主机,则要在协议使用不同的端口号
IP可以唯一标识主机,TCP和端口号可以唯一标识唯一线程,因此,TCP/IP便可以标识主机中的唯一进程,也成为套接字,即Sockt

  • **sequence number:**占用四个字节,TCP中传输的每个字节均按字节编号
  • **ACK number:**期望收到对方下一个报文的第一个字节序号
  • **offset:**数据偏移,指出TCP报文的数据距离TCP报文起始处有多远
  • **Reserved:**保留域
  • TCP Flags:
  • 1.URG:紧急指针标志,为1时标识紧急标志有效
  • 2.ACK:确认序号标志,为1时标识确认号有效,为0时标识不含确认信息,忽略确认号字段
  • 3.PSH:为1表示有push号,接收方接受到报文段后,尽快将报文段交给应用程序,而不再缓冲区排队
  • 4.RST:重置连接标志
  • 5.SYN:同步序号:用于建立来连接过程,SYN=0,ACK=0表示该数据段为使用捎带的确认域
  • 6.FIN:finish标志,用于释放来连接,为1时表已关闭本方数据流
    **windows:**告知发送端,接收端的缓存大小,控制发送端发送的速率,达到流量控制
    checksum检验和,对于整个TCP报文段,TCP头部,TCP数据以16位进行计算所得,由发送端计算存储,由接受端进行验证
    urgent pointer紧急指针

(三)TCP握手

当一个应用程序希望与另一个程序建立通信,它会发送一个通信请求,这个请求要被发送到一个确切的地址,在 双方握手之后,TCP将在两个应用之间建立全双工的通信,这个全双工通信将占用两个应用的通信,直到一方或双方关闭

握手是未来建立连接:
在这里插入图片描述

  • 服务器先创建一个传输块PCB,进入Listener监听状态,之后客户端也会创建以一个传输块PCB,进入监听状态,之后客户端向服务器发出请求报文SYN,seq,SYN为同步序号,初始序号seq,发送后客户端进入SYN_SENT的状态,发送后的数据包为SYN报文段,消耗一个序号,为第一次握手。
  • 然后服务器端发出确认报文SYN=1,ACK=1,seq=y,ack=x+1,服务器进入SYN_RCVD状态。
  • 第三次客户端接受到后变为ESTAB_LISHED状态发送ACK=1,seq=x+1.ack=y+1;服务器也进入ESTABLISHED状态

在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。
1.第一次握手:建立连接时,客户端发送SYN包(syn=j)服务器,进入SYN_SEND状态,等待服务器确认
2第二次握手:服务器接收到SYN包,必须确认客户的SYN,同时自己也发送一个SYN包,即SYN+ACK包,此时服务器进入SYN_RECV状态
3第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK,此包发送完毕,客户端和服务器端进入ESTABLISHED状态,完成第三次握手

(四)三次握手的原因:

为了初始化Sequence number的初始值

首次握手的隐患:SYN超时
原因:

  • 服务器收到客户端的SYN,恢复SYN-ACK时ACK未确认
  • 服务器端不断重试直至超时,Linux默认等待63秒后断开

针对SYN Flood的防护措施:

  • SYN 队列满后,通过tcp_syncookiese参数返回SYN Cookies
  • 若为正常连接则客户端会发SYN Cookies,直到建立连接

若建立连接,客户端出现故障:
保活机制:向对方发送保活探测报文,若为收到响应则继续发送,当尝试次数达到保活探测数仍无相应则中断连接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值