Python 关于TCP简介以及与UDP的区别

仅用学习参考

TCP介绍

TCP协议,传输控制协议(英语:Transmission Control Protocol,缩写为 TCP)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。

TCP通信需要经过 创建连接、数据传送、终止连接三个步骤。

TCP通信模型中,在通信开始之前,一定要先建立相关的链接,才能发送数据,类似于生活中,”打电话””

TCP特点

1. 面向连接

通信双方必须在数据传输之前建立连接,并且双方必须为连接分配必要的系统内核资源,以管理连接的状态和连接上的传输。

[En]

Both sides of the communication must establish a connection before the data transmission, and both sides must allocate the necessary system kernel resources to the connection to manage the state of the connection and the transmission on the connection.

双方之间的数据传输可以通过这种连接进行。

[En]

Data transmission between the two parties can be carried out through this connection.

数据交换完成后,双方必须断开此连接以释放系统资源。

[En]

After the data exchange is completed, both parties must disconnect this connection to release system resources.

这种连接是一对一的,因此TCP不适用于广播的应用程序,基于广播的应用程序请使用UDP协议。

2. 可靠传输

1) TCP采用发送应答机制

TCP发送的每个报文段都必须得到接收方的应答才认为这个TCP报文段传输成功

2) 超时重传

发送消息段后,发送方启动计时器,如果在固定时间内未收到回复,则重新发送消息段。

[En]

After sending a message segment, the sender starts the timer and resends the message segment if it does not receive a reply within the fixed time.

TCP为了保证不发生丢包,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的包发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据包就被假设为已丢失将会被进行重传。

3) 错误校验

TCP用一个校验和函数来检验数据是否有错误;在发送和接收时都要计算校验和。

  1. 流量控制和阻塞管理

流量控制用于防止主机发送过快,从而使接收方没有时间完全接受它。

[En]

Flow control is used to prevent the host from sending too fast so that the receiver does not have time to accept it completely.

TCP与UDP的不同点

  • 面向连接(确保创建了三向夹点,并且在创建连接之前不会传递连接。)
    [En]

    connection-oriented (make sure that a three-way grip is created, and the connection is not transmitted until it has been created. )*

  • 有序数据传输
  • 重发丢失的数据包
  • 舍弃重复的数据包
  • 无差错的数据传输
  • 阻塞/流量控制

udp通信模型

udp通信模型中,在通信开始之前,不需要建立相关的链接,只需要发送数据即可,类似于生活中,”写信””

Python 关于TCP简介以及与UDP的区别

Python 关于TCP简介以及与UDP的区别

TCP通信模型

udp通信模型中,在通信开始之前,一定要先建立相关的链接,才能发送数据,类似于生活中,”打电话””

Python 关于TCP简介以及与UDP的区别

tcp的3次握手

Python 关于TCP简介以及与UDP的区别

tcp的4次挥手

Python 关于TCP简介以及与UDP的区别

tcp注意点

  • tcp服务器一般情况下都需要绑定,否则客户端找不到这个服务器
  • tcp客户端一般不绑定,因为是主动链接服务器,所以只要确定好服务器的ip、port等信息就好,本地客户端可以随机
  • tcp服务器中通过listen可以将socket创建出来的主动套接字变为被动的,这是做tcp服务器时必须要做的
  • 当客户端需要链接服务器时,就需要使用connect进行链接,udp是不需要链接的而是直接发送,但是tcp必须先链接,只有链接成功才能通信
  • 当一个tcp客户端连接服务器时,服务器端会有1个新的套接字,这个套接字用来标记这个客户端,单独为这个客户端服务
  • listen后的套接字是被动套接字,用来接收新的客户端的链接请求的,而accept返回的新套接字是标记这个新客户端的
  • 关闭listen后的套接字意味着被动套接字关闭了,会导致新的客户端不能够链接服务器,但是之前已经链接成功的客户端正常通信。
  • 关闭accept返回的套接字意味着这个客户端已经服务完毕
  • 当客户端的套接字调用close后,服务器端会recv解堵塞,并且返回的长度为0,因此服务器可以通过返回数据的长度来区别客户端是否已经下线

Python 关于TCP简介以及与UDP的区别

关注微信公众号,回复【资料】、Python、PHP、JAVA、web,则可获得Python、PHP、JAVA、前端等视频资料。

Original: https://blog.51cto.com/u_11239407/5505971
Author: 海洋的渔夫
Title: Python 关于TCP简介以及与UDP的区别

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/513293/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球