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 定义。
连接过程
第一次握手
- 客户端向服务器确认意向(SYN或FIN)
第二次握手
- 服务器向客户端发送验证(SYN- ACK或ACK)
第三次握手
- 建立连接时不执行
- 结束连接时服务器向客户端发送结束意向,让客户端进入连接终止的等待状态。
- 结束连接在在建立连接过程的基础上增加了一次握手过程的原因是:如果服务器在第一次握手接到意向后直接关闭了的话,第二次握手发送的验证将无法在第四次握手被接收。所以,通常由客户端执行主动关闭。
第四(三)次握手
- 客户端向服务器确认验证
UDP
定义
User Datagram Protocol 简称 UDP。是一种无连接的传输层协议,提供简单不可靠但快速的信息传送服务。即不提供数据包分组,不提供数据包排序。发送后接收方无法得知其是否安全完整的到达。
UDP多用于对高速和实时性需求量大的实例,例如广播、通话、在线会议。免去排序以及分组的步骤可以大幅度提升传输速度,即使代价是丢失一小部分数据(大部分使用UDP的实例中,丢失小部分数据不会造成关键影响)。
综上所述,除了添加首部以外,UDP 在运行过程中将 按照原样 保留应用层发送的用户数据。UDP 是无连接的,即没有认证服务。种种相比于 TCP 减少的功能让UDP的首部保持在了8字节每包,而相比TCP的首部为20字节每包。
UDP 的使用范围很窄,且在部分语言中的实现过程相比于 TCP 来讲要难。
常见的使用UDP的服务:
- 域名系统 DNS(识别 IP 访问计算机)
- 简单网络管理协议 SNMP
- 简单文本传输协议 TFTP
- 状态更新、单向推流、订阅发布
Python 中 TCP 与 UDP
使用 Socket
库的 Type
更改套接字类型:
SOCK_STREAM
>> 推流套接字,TCP 协议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.