TCP和UDP

作者: 靈08_1024 | 来源:发表于2018-05-24 07:04 被阅读11次

    TCP协议为TCP/IP协议;UDP为UDP/IP协议。
    TCP和UDP都是对应网络七层协议上的传输层。IP属于网络层

    TCP

    首先来说一下TCP的三次握手和四次挥手。

    三次握手

    如图(缺图)

    具体步骤:

    1. 客户端向服务器发送SYN包(SYN=1,sequence number=X),进入SYN_SEND状态;
    2. 服务器接收SYN包后,将其SYN包序号+1编程自己的ACK包序号,生成自己的SYN包,返回发送,进入SYN_RECV状态(此时总发送信息:SYN=1,ACK=1,sequence number=Y,acknowledgement number=X+1);
    3. 客户端接收到服务器的ACK+SYN包后,向服务器发送ACK+1,此时双方为ESTABLISHED状态(此时总发送信息:SYN=0,ACK=1,acknowledgement number=Y+1,data=X+1)。

    翻译:SYN即请求同步的意思,ACK是确认的意思,两边互相发包,确认,将你的发送序号+1变成我的接收序号。最后都已同步就不用SYN了,只说ACK了,即我也确认接收你了。
    sequence number为请求同步序号。
    acknowledgement number为确认接收序号。
    SYN_SEND状态为客户端独有状态,说明SYN我已经发送了。
    SYN_RECV状态为服务器独有状态,说明SYN我已经接收并返回ACK了。
    ESTABLISHED状态即建立状态,即通信建立。

    四次挥手

    如图(缺图)

    1. 主关闭方发送给服务器一个FIN包;
    2. 被关闭方接收FIN包,发送ACK表示我确认接收说你要关闭了;
    3. 被关闭方发送一个FIN包,表示我接收完了;
    4. 主关闭方接收FIN后,发送ACK,确认序号+1。至此,两边拜拜了。

    提问:为什么连接要三次,断开要四次?
    答:因为连接无数据传输,而断开时或有数据传输。所以断开的ACK和FIN从被关闭方到主关闭方是分开返回的。

    提问:在四次挥手中,如果已经发送FIN包了,那么在此之前已传输但未接收的数据怎么办?
    答:这些数据会如实等待接收会再关闭连接。这就是为什么挥手会有四次的原因。
    提问:对于TCP中的数据包,如果是ABCD的顺序,但接收为BDAC,会产生乱序吗?
    答:不会。因为每个包都会传一段数据,比如A传1-10,B传11-20,C传21-30,接收方会在接收到所有数据包后进行排序整理,首尾相连。并且TCP有超时机制,如果超时会进行重新传输,多次超时即传输失败。

    UDP

    适用场景:

    1. 多播。(即一对多,比如各种分布式软件,如ES等,会有多播)
    2. 重性能而轻完整性和安全性。(比如在线视频,聊天工具,QQ,会经常发现消息的顺序并不对)
    3. 对于某些少一两个小部分不影响全局整体观的场景。(比如快速视频,在线多人游戏,某音,三国杀,经常断网一会你还可以操作,但等网络连接上有恢复到服务器上的样子)

    TCP和UDP的比较

    TCP UDP
    连接性 面向连接
    数据有序可靠性
    头部资源 20 8
    网络影响
    端对端 一对一 N对N
    面向服务 字节流 报文
    传输速度

    上面的是为了快速记忆,下面是具体说明:

    1. TCP协议是有连接的,有连接的意思是开始传输实际数据之前TCP的客户端和服务器端必须通过三次握手建立连接,会话结束之后也要结束连接。而UDP是无连接的
    2. TCP协议保证数据按序发送,按序到达,提供超时重传来保证可靠性,但是UDP不保证按序到达,甚至不保证到达,只是努力交付,即便是按序发送的序列,也不保证按序送到。
    3. TCP协议所需资源多,TCP首部需20个字节(不算可选项),UDP首部字段只需8个字节。
    4. TCP有流量控制和拥塞控制,UDP没有,网络拥堵不会影响发送端的发送速率
    5. TCP是一对一的连接,而UDP则可以支持一对一,多对多,一对多的通信。
    6. TCP面向的是字节流的服务,UDP面向的是报文的服务。

    参考:https://www.cnblogs.com/zmlctt/p/3690998.html

    相关文章

      网友评论

          本文标题:TCP和UDP

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