美文网首页
TCP/UDP相关知识概要性总结

TCP/UDP相关知识概要性总结

作者: 狗子孙 | 来源:发表于2018-10-08 22:29 被阅读19次

    TCP和UDP的大致区别在于,TCP是面向连接的,只有建连接后才进行传输,而UDP是无连接的,直接进行数据传输。


    基于socket的TCP和UDP大致示意图

    TCP流程,三次握手和四次挥手

    在socket编程中,TCP的大致流程是,服务端和客户端各自创建socket,服务端通过bind绑定端口,通过listen监听客户请求,然后客户端发起连接请求,经过三次握手建立连接,然后通过send和recv进行数据的传输。


    TCP流程图

    TCP包的几个重要的标记位是同步SYN(在连接建立时用来同步序号。当SYN=1,ACK=0,表明是连接请求报文,若同意连接,则响应报文中应该使SYN=1,ACK=1),确认ACK(仅当ACK=1时,确认号字段才有效。TCP规定,在连接建立后所有报文的传输都必须把ACK置1),终止FIN(用来释放连接),两个序号分别是序号seq(表示报文的序号),确认号ack(是期望收到对方下一个报文的第一个数据字节的序号)。

    其中,建立连接是一个三次握手的过程。第一次,客户端发送一个TCP包,SYN标记为客户端的初始化序号。第二次,服务端返回一个TCP包,SYN标记为服务端的初始化序号,ACK标记为客户端的初始化序号+1。第三次,客户端返回一个TCP包,ACK位标记为服务端的初始化序号+1。自此,连接完成建立。


    三次握手示意图

    断开连接是一个四次挥手的过程,既可以是客户端中断连接也可以是服务端中断连接。以客户端为例,第一次,客户端发送一个TCP包,FIN标记为1,序列号seq为前面已传输过来数据的最后一个字节的序号+1,客户端进入FIN-WAIT-1状态。第二次,服务端发送一个TCP包,ACK标记为之前的seq+1,当前seq置为服务端的序列号,服务端进入CLOSE-WAIT状态,客户端收到后,进入FIN-WAIT-2状态,同时继续传输数据。第三次,服务端发送完所有需要发送的数据后,发送一个TCP包,FIN和ACK置为1,seq为当前服务器序列号w,ack依然为之前的seq+1,此时服务端进入LAST-ACK状态。第四次,客户端发送确认请求的TCP包,ACK标记之前的seq+1,seq为之前的ack+1,服务端收到后立刻关闭连接,客户端等待2MSL(Maximum Segment Lifetime)后也关闭连接。


    四次挥手示意图

    TCP流量控制和拥塞控制

    TCP除了连接本身的可靠性以外,还提供了数据传输的流量控制,从而避免拥塞。

    流量控制利用滑动窗口实现,接收方每次响应发送方时,更新窗口值rwnd,发送方发送数据不得超过窗口值。

    拥塞就是对资源的需求超过了可用的资源。为了避免拥塞,我们要进行拥塞控制,基于发送方的窗口cwnd值来进行,即防止过多的数据注入到网络中。拥塞控制基于流量控制,即减少发送数据的速度(频率),来实现。常见的拥塞控制有满开始、拥塞避免、快重传和快恢复。

    1. 慢开始
      由小到大逐渐增大拥塞窗口,例如每一轮翻倍。

    2. 拥塞避免
      窗口大小到一定值以后进行加法增大,而非指数(翻倍)增大。

    3. 快重传
      接收方未收到一个信息时,立即重复确认上一个正确收到的信息,从而立即获得重传,而不是等待重传计时器。

    4. 快恢复
      发送方连续收到三个重复确认,乘法减小窗口,加法增大窗口,而非重新回到0进行慢开始。

    TCP的设计原因

    1. 为什么要三次握手?
      如果只有两次握手,之前因网络延迟残留的数据包会重新被服务端接收,并依此建立额外的连接。

    2. 第三次握手失败怎么办?
      客户端第三次发送的TCP包未能到达服务端,则服务端直接想客户端发送RTS包并关闭连接,等待下一次重新连接。主要为了防范伪造很多IP向服务端发送连接请求,导致服务端资源浪费。

    3. 如何防范大量伪连接请求造成的攻击?
      3.1. 缩短等待超时时间,即SYN_TIMEOUT时间,但过低会造成难以正常建立连接。
      3.2. SYN cookie,服务端不立即分配资源,而是将客户端发来的包计算一个cookie值,等待第三次握手确认后进行校验,再分配资源。
      3.3. SYN proxy代理,用代理服务器和客户端进行三次握手,成功建立连接后服务端通过代理和客户端建立连接。

    4. 为什么要四次挥手
      4.1. 确认被断开方收到了断开请求,避免重复传送。
      4.2. 被断开方即时提醒传输的完成,保证数据传输的可靠完成。

    UDP流程

    和TCP相比,UDP不用建立连接,直接通过Sendto和recvfrom进行数据传输,不考虑连接建立与否、消息送达与否的以及消息传送顺序的校验。


    UDP流程图

    TCP和UDP的比较

    TCP优缺点:

    1. 可以显示地创建和终止连接
    2. 保证可靠有序不重复的数据传输
    3. 流量控制和拥塞控制
    4. 数据传输失败可以识别并处理
    5. 创建、维持连接以及流量控制有额外开销

    UDP优缺点:

    1. 不保持连接
    2. 没有反馈和重传机制
    3. 用于短消息和控制消息
    4. 对带宽的要求小

    参考

    基于 Socket 的 UDP 和 TCP 编程介绍
    TCP:三次握手,URG、ACK、PSH、RST、SYN、FIN 含义
    TCP协议中的三次握手和四次挥手(图解)
    TCP的三次握手与四次挥手(详解+动图)
    TCP流量控制
    TCP的拥塞控制

    相关文章

      网友评论

          本文标题:TCP/UDP相关知识概要性总结

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