• 计算机网络(四),TCP三次握手


    目录

    1.三次握手详情

    2.为什么需要三次握手才能建立连接

    3.首次握手的隐患---SYN超时的问题

    4.建立连接之后,Client出现故障

    四、TCP三次握手

    1.三次握手详情

     

    (1)一开始,客户端和服务器端都处于关闭状态(CLOSED),然后开启服务,服务端这个时候处于监听状态(LISTEN)。

    (2)客户端发送一个连接请求报文,里面SYN等于1seq可以使任意一个整数,标明这个报文段的序号。这个报文段不能传输数据。此时客户端进入同步状态(SYN-SENT)。

    (3)服务端同意连接则发送一个报文段,里面SYN=1ACK=1seq=yack=x+1。大写字母是标志位ACK=1表示确认号(ack)有效,这里ack确认上一个服务器发送过来的seqx的已经接受,确认下一个接收的编号为x+1,同时发送的报文段的序号为y。此时的报文段不能发送数据。服务端进入同步状态(SYN-RCVD)。

    4)客户端接收服务端报文段之后,回复一个报文段,里面ACK=1seq=x+1ack=y+1ack确认服务器端的y编号的数据已经接受,请求ack=y+1的字段,此时客户端的报文段编号为x+1。此时可以发送数据,也可以不发送。客户端进入已建立连接状态(ESTAB-LISHED)。

    5)服务端接收之后进入已连接状态(ESTAB-LISHED

    2.为什么需要三次握手才能建立连接

      主要是初始化Sequence Number的初始值

    3.首次握手的隐患---SYN超时的问题

      问题分析Server收到ClientSYN,回复SYN-ACK的时候未收到ACK确认

      服务端解决方法Server不断地重试直至超时,Linux系统中超时时间是63秒,即重试五次之后关闭连接1,2,4,8,16,32,第五次重试之后等待32秒后关闭。

     

      SYN Flood攻击:即不断的使服务端进入同步状态,使服务器的端口不可用,浪费掉

      解决方法:设置一个SYN队列,当SYN队列满了之后,服务器则会通过tcp_syncookies参数回发一个SYN Cookie,如果客户端连接正常则会回发SYN Cookie,直到建立连接

    4.建立连接之后,Client出现故障

      连接具有保活机制,向对方发送保活探测报文,如果未收到响应则继续发送,常识次数达到保活探测数任未收到响应即终止连接。

  • 相关阅读:
    python2的比较函数,cmp
    快速排序
    如果a,b,c为自然数,a+b+c=1000,a方+b方=c方,求出abc可能的组合(python实现)
    python之join
    python之functools partial
    Python 3 iter函数用法简述
    python线程之condition
    python 线程 event
    getattr getattribute setattr hasattr delattr
    Properties类
  • 原文地址:https://www.cnblogs.com/xzmxddx/p/10354728.html
Copyright © 2020-2023  润新知