• UDP和TCP的区别


    首先,声明本文来制后端领域作者,敖丙

    TCP和UDP都位于计算机网络模型中的运输层,他们负责传输应用层产生的数据。

    UDP是什么

    UDP的全称是User Datagram Protocol,用户数据报协议。它不需要所谓的握手操作,从而加快了通信速度,允许网络上的其他主机在接收方同意通信之前进行数据传输。

    数据报是与分组交换网络关联的传输单元。

    UDP的特点主要有

    • UDP能够支持容忍数据包丢失的带宽密集型应用程序
    • UDP具有低延迟的特点
    • UDP能够发送大量的数据包
    • UDP能够允许DNS查找,DNS是建立在UDP之上的应用层协议。

    TCP是什么

    TCP的全称是Transmission Control Protocol,传输控制协议。它能够帮助你确定计算机链接到Internet以及它们之间的数据传输。通过三次握手来建立TCP链接,三次握手就是用来启动和确认TCP连接的过程。一旦连接建立后,就可以发送数据了,当数据传输完成后,会通过关闭虚拟电路来断开连接。

    TCP的主要特点有

    • TCP能够确保连接的建立和数据包的发送
    • TCP支持错误重传机制
    • TCP支持拥塞控制,能够在网络拥堵的情况下延迟发送
    • TCP能够提供错误校验和甄别有害的数据包。
    TCP UDP
    TCP是面向连接的协议 UDP是无连接的协议
    TCP在发送数据前需要建立连接,然后再发送数据 UDP无需建立连接就可以直接发送大量数据
    TCP会按照特定顺序重新排列数据包 UDP数据包没有固定顺序,所有数据包都相互独立
    TCP传输的速度比较慢 UDP的传输会更快
    TCP的头部字节有20字节 UDP的头部字节只需要8个字节
    TCP是重量级的,在发送任何用户数据之前,TCP需要三次握手建立连接 UDP是轻量级的,没有跟踪连接,消息排序等
    TCP会进行错误校验,并能够进行错误恢复 UDP也会错误检查,但会丢弃错误的数据包
    TCP有发送确认 UDP没有发送确认
    TCP会使用握手协议,例如SYN,SYN-ACK,ACK UDP无握手协议
    TCP是可靠的,因为它可以确保将数据传送到路由器 UDP不能保证将数据传送到目标

    TCP三次握手和四次挥手

    TCP三次握手

    消息类型 描述
    SYN 这个消息时用来初始化和建立连接的
    ACK 帮助对方确认收到的SYN消息
    SYN-ACK 本地的SYN消息和较早的ACK数据包
    FIN 用来断开连接
    • SYN:它的全称是Synchronize Sequence Numbers,同步序列编号。是TCP/IP建立连接时使用的握手信号。在客户机和服务器之间建立TCP连接时,首先会发送的一个信号。客户端在接受到SYN消息时,就会在自己的段内生成一个随机值X。
    • SYN-ACK:服务器收到SYN后,打开客户端连接,发送一个SYN-ACK作为答复。确认号设置为比接收到的序列号多一个,即X+1,服务器为数据包选择的序列号是另一个随机数Y。
    • ACK:Acknowledge character,确认字符,表示发来的数据已确认接收无误。最后,客户端将ACK发送给服务器。序列号被设置为所接收的确认值即Y+1。

    Client(Alice)------SYN(sequenceNum=x)------>Server(Bob)-------SYN-ACK(sequenceNum=y,AcknowledgeNum=x+1)------>Client(Alice)------SYN-ACK(AcknowledgeNum=y+1)------>Server(Bob)

    TCP四次挥手

    在连接终止阶段使用四次挥手,连接的每一端都会独立的终止。下面描绘一下:

    Initialtor(ESTABLISHED connection)| Receiver(ESTABLISHED connection)

    active close FUN_WAIT_1 ------FIN------>CLOSE_WAIT passive close -------ACK------>FIN_WAIT_2;

    CLOSE_WAIT passive close ------FIN------>TIME_WAIT------ACK------>Receiver CLOSED;

    Initialtor CLOSED

    •  首先,客户端应用程序决定要终止连接(这里服务端也可以选择断开连接)。这会使客户端将FIN发送到服务器,并进入FIN_WAIT_1状态。当客户端处于FIN_WAIT_1状态时,它会等待来自服务器的ACK响应。
    • 然后第二步,当服务器收到FIN消息时,服务器会立刻向客户端发送ACK确认消息。
    • 当客户端收到服务器发送的ACK响应后,客户端就进入FIN_WAIT_2状态,然后等待来自服务器的FIN消息;
    • 服务器发送ACK确认消息后,一段时间(可以进行关闭后)会发送FIN消息给客户端,告知客户端可以进行关闭;
    • 当客户端收到从服务端发送的FIN消息时,客户端就会由FIN_WAIT_2状态变为TIME_WAIT状态。处于TIME_WAIT状态的客户端允许重新发送ACK到服务器为了防止信息丢失。客户端在TIME_WAIT状态下花费的时间取决于它的实现,在等待一段时间后,连接关闭,客户端上所有的资源(包括端口号和缓冲区数据)都被释放。
  • 相关阅读:
    适用于实数范围的中缀表达式的 +
    Django官方文档学习2——数据库及模板
    github命令
    千行代码入门Python
    Notepad++配置Python运行环境
    Python常用网页字符串处理技巧
    requests设置headers,proxies,cookies
    Django官方文档学习1——第一个helloworld页面
    笔记本键盘上没有break键的解决方案
    Python beautifulsoup模块
  • 原文地址:https://www.cnblogs.com/louis95/p/15962340.html
Copyright © 2020-2023  润新知