TCP/IP

作者: 扎Zn了老Fe | 来源:发表于2017-09-21 22:20 被阅读0次

    三次握手

    第一次握手:客户端发送syn包(syn=x)到服务器,并进入SYN_SEND(同步已发送)状态,等待服务器确认;
    第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(syn=y),即SYN+ACK包,此时服务 器进入SYN_RECV(同步收到)状态;
    第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,
    客户端和服务器进ESTABLISHED(已建立连接)状态,完成三次握手。
    客户端发送SYN以后,6s没有来自服务器的SYN分节响应,则重发SYN,24s后无响应再重发,75s后无响应则返回错误ETIMEOUT。
    如果服务器端队列满,收到客户端SYN,会忽略,而不是发送RST,因为情况是暂时的,可能下次就能够有空闲队。RST会让connect立即返回一个错误。

    四次挥手

    第一次挥手:主动关闭方发送一个FIN,用来关闭主动方到被动关闭方的数据传送,也就是主动关闭方告诉被动关闭方:
    我已经不 会再给你发数据了(当然,在fin包之前发送出去的数据,如果没有收到对应的ack确认报文,主动关闭方依然
    会重发这些数据),但是,此时主动关闭方还可 以接受数据。
    第二次挥手:被动关闭方收到FIN包后,发送一个ACK给对方,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号)。
    第三次挥手:被动关闭方发送一个FIN,用来关闭被动关闭方到主动关闭方的数据传送,也就是告诉主动关闭方,我的数据也
    发送完了,不会再给你发数据了。
    第四次挥手:主动关闭方收到FIN后,发送一个ACK给被动关闭方,确认序号为收到序号+1,至此,完成四次挥手。

    为什么建立连接需要三次握手,而断开连接需要四次握手

    因为每个方向都需要一个FIN和ACK,当一端发送了FIN包之后,处于半关闭状态,此时仍然可以接收数据包。
    在建立连接时,服务器可以把SYN和ACK放在一个包中发送。
    但是在断开连接时,如果一端收到FIN包,但此时仍有数据未发送完,此时就需要先向对端回复FIN包的ACK。等到将剩下的数据都发送完之后,再向对端发送FIN,断开这个方向的连接。
    因此很多时候FIN和ACK需要在两个数据包中发送,因此需要四次握手

    TIME_WAIT状态持续时间及原因

    持续时间未2MSL,一个数据包在网络中的最长生存时间为MSL。
    假设最后客户端回复的ACK丢失,服务器端会在超时时间到来时,重传最后一个FIN包。 ACK和FIN在网络中的最长生存时间就为2MSL,这样就可以可靠的断开TCP的双向连接。

    TCP在listen时的参数backlog的意义

    linux内核中会维护两个队列:
      1)未完成队列:接收到一个SYN建立连接请求,处于SYN_RCVD状态
      2)已完成队列:已完成TCP三次握手过程,处于ESTABLISHED状态
      当有一个SYN到来请求建立连接时,就在未完成队列中新建一项。当三次握手过程完成后,就将套接口从未完成队列移动到已完成队列。
      backlog曾被定义为两个队列的总和的最大值,也曾将backlog的1.5倍作为未完成队列的最大长度
    一般将backlog指定为5

    滑动窗口

    发送方对每个字节都有序列号, 采用ARQ(确认重传)协议,
    发送窗口: 发送窗口后延表示已发送已收到确认, 发送窗口的数据表示允许发送但未收到确认, 发送窗口的前沿表示不允许发送的数据, 发送窗口的大小由接收方允许的发送的数据量;
    接收窗口: 接收窗口的后延表示已发送确认并交付主机, 接收窗口表示允许接收, 前沿表示不允许接收;

    滑动过程:
    接收方接收到连续数据后, 交付主机后窗口右移, 并把期待连续数据的下一个序列号发送给接收方;
    当发送方收到接收方的确认序列号后, 表示序列号前面的数据已经收到了, 这些数据不需要再重传了, 窗口向前滑动; 否则, 窗口里的数据要重新发送;
    窗口大小调整: 发送方的窗口会根据对方接收窗口的大小进行调整;

    拥塞控制

    慢启动
    拥塞避免
    快速重传
    快速恢复

    TCP, UDP区别

    1. TCP提供面向连接的、可靠(ARQ, 滑动窗口控制, 拥塞控制)的数据流传输,而UDP提供的是非面向连接的、不可靠的数据流传输。
    2. TCP传输单位称为TCP报文段,UDP传输单位称为用户数据报。
    3. TCP注重数据安全性,UDP数据传输快
    4. TCP点对点通信, UDP可以一对多通信

    三次握手过程中有哪些不安全性

    1)伪装的IP向服务器发送一个SYN请求建立连接,然后服务器向该IP回复SYN和ACK,但是找不到该IP对应的主机,当超时时服务器收不到ACK会重复发送。当大量的攻击者请求建立连接时,服务器就会存在大量未完成三次握手的连接,服务器主机backlog被耗尽而不能响应其它连接。即SYN泛洪攻击
      防范措施:
      1. 降低SYN timeout时间,使得主机尽快释放半连接的占用
      2. 采用SYN cookie设置,如果短时间内连续收到某个IP的重复SYN请求,则认为受到了该IP的攻击,丢弃来自该IP的后续请求报文
      3. 在网关处设置过滤,拒绝将一个源IP地址不属于其来源子网的包进行更远的路由
    2)当一个主机向服务器发送SYN请求连接,服务器回复ACK和SYN后,攻击者截获ACK和SYN。然后伪装成原始主机继续与服务器进行通信。

    TCP IP.jpg

    相关文章

      网友评论

          本文标题:TCP/IP

          本文链接:https://www.haomeiwen.com/subject/tuazsxtx.html