Home » 笔记 » 【笔记】TCP/UDP 的定义与区别以及在 Python 中的使用

【笔记】TCP/UDP 的定义与区别以及在 Python 中的使用

发布于 September 27, 2022 笔记

TCP/IP 是在 IP 协议的通信过程中,使用到的协议族(网络传输协议家族,基础通信架构)的总称。

参考模型

OSI 参考模型

开发始于20世纪70年代后期,在20世纪80年代成为国际标准化组织(ISO)的建议。

OSI 的全称是开放系统互连参考模型 (Open System Interconnection Reference Model)。共分为七个抽象层,按连接时的优先级排列分别是:物理层、数据链路层、网络层、传输层、绘画层、表示层、应用层。

TCP/IP 参考模型

最早在高级研究计划局网络项目(ARPANET)中实施。

共分为四个抽象层,按连接时的优先级排列分别是:网络接口层「链路层」、网络层「互联层」(IP)、主机到主机层「传输层」(TCP)、应用层。

TCP/UDP

TCP/UDP 属于传输层的控制协议,接收数据时 优先级最低,仅次于应用层的元数据。

TCP

定义

TCP(Transmission Control Protocol 传输控制协议)是一种面向 <u>连接的、可靠的、基于字节流的</u> 传输层通信协议,由 IETF 的 RFC 793 定义。

连接过程

  1. 第一次握手

    • 客户端向服务器确认意向(SYN或FIN)
  2. 第二次握手

    • 服务器向客户端发送验证(SYN- ACK或ACK)
  3. 第三次握手

    • 建立连接时不执行
    • 结束连接时服务器向客户端发送结束意向,让客户端进入连接终止的等待状态。
    • 结束连接在在建立连接过程的基础上增加了一次握手过程的原因是:如果服务器在第一次握手接到意向后直接关闭了的话,第二次握手发送的验证将无法在第四次握手被接收。所以,通常由客户端执行主动关闭。
  4. 第四(三)次握手

    • 客户端向服务器确认验证

UDP

定义

User Datagram Protocol 简称 UDP。是一种无连接的传输层协议,提供简单不可靠但快速的信息传送服务。即不提供数据包分组,不提供数据包排序。发送后接收方无法得知其是否安全完整的到达。

UDP多用于对高速和实时性需求量大的实例,例如广播、通话、在线会议。免去排序以及分组的步骤可以大幅度提升传输速度,即使代价是丢失一小部分数据(大部分使用UDP的实例中,丢失小部分数据不会造成关键影响)。

综上所述,除了添加首部以外,UDP 在运行过程中将 按照原样 保留应用层发送的用户数据。UDP 是无连接的,即没有认证服务。种种相比于 TCP 减少的功能让UDP的首部保持在了8字节每包,而相比TCP的首部为20字节每包。

UDP 的使用范围很窄,且在部分语言中的实现过程相比于 TCP 来讲要难。

常见的使用UDP的服务:

Python 中 TCP 与 UDP

使用 Socket 库的 Type 更改套接字类型:

  1. SOCK_STREAM >> 推流套接字,TCP 协议
  2. SOCK_DGRAM >> 数据报套接字,UDP 协议
# TCP
import socket
tcp = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
addr = ('192.168.100.1', 25565)
context = "HelloWorld"
tcp.sendto(context.encode(), addr)
tcp.close()

# UDP
import socket
udp = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
addr = ('192.168.100.1', 25565)
context = "HelloWorld"
udp.sendto(context.encode(), addr)
udp.close()

参考 / 引用

“Domain Name System.” 维基百科,自由的百科全书, 27 Sept. 2022. Wikipedia, 链接.
jeanboydev.TCP/IP,TCP,UDP,IP,Socket 之间的关系. 链接. Accessed 22 Sept. 2022.
“OSI Model.” 维基百科,自由的百科全书, 21 Sept. 2022. Wikipedia, 链接.
“TCP/IP协议族.” 维基百科,自由的百科全书, 9 June 2022. Wikipedia, 链接
张超帅. UDP的结构和传输原理. 链接. Accessed 27 Sept. 2022.
涤生大数据. Python中socket与UDP使用与通信详解. 链接. Accessed 27 Sept. 2022.

Add Comment