代码实现TCP和UDP协议

OSI七层模型

 

 传输层 信息会被加上头部,封装成tcp或者udp包   包含源端口和目标端口,接收方知道发给哪个应有的。,取决于用的协议
网络层 加信息,封装为IP报文,包含源IP和目标IP。
链路层 加上头尾,组装成能在物理网络传输的数据帧,通过物理网络发送给目标机器。

 

TCP

简单的TCP协议的Python实现,包括服务器和客户端

服务器端

import socket

# 定义服务器地址和端口号
server_address = ('localhost', 8000)

# 创建TCP套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 绑定服务器地址和端口号
server_socket.bind(server_address)

# 监听连接
server_socket.listen(1)

print('等待客户端连接...')

# 接受客户端连接
client_socket, client_address = server_socket.accept()
print(f'客户端 {client_address} 已连接!')

# 接收客户端数据
while True:
    data = client_socket.recv(1024).decode('utf-8')
    if not data:
        break
    print(f'收到来自客户端 {client_address} 的数据: {data}')

# 关闭连接
client_socket.close()
server_socket.close()

客户端 


import socket

# 定义服务器地址和端口号
server_address = ('localhost', 8000)

# 创建TCP套接字
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 连接服务器
client_socket.connect(server_address)

# 发送数据
for i in range(10):
    client_socket.send(f'消息 {i}\n'.encode('utf-8'))

# 关闭连接
client_socket.close()

在这个简单的示例中,服务器监听来自客户端的连接,并接收和打印客户端发送的消息。客户端连接到服务器,并发送10条消息到服务器

 

TCP和UDP对应的协议分别是FTP、SMTP、POP3、HTTP和DNS、SNMP、TFTP、UDP。
TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议,在网络通信中是可靠的传输方式,传输前会进行连接确认,确保数据传输的准确性和顺序。
UDP是面向无连接的不可靠传输层通信协议,在网络通信中是简单的传输方式,不需要进行连接确认,因此可能会出现数据丢失或接收错误等问题。

UDP

以下是一个简单的Python UDP协议示例:
 

import socket

# 创建UDP套接字
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# 绑定本地IP和端口号
sock.bind(('localhost', 8000))

# 接收数据
while True:
    data, addr = sock.recvfrom(1024)
    print('收到来自 %s 的数据: %s' % addr, data.decode('utf-8'))

这个示例中,我们首先使用socket模块创建了一个UDP套接字,并通过bind方法绑定了本地IP和端口号。然后通过recvfrom方法不断接收来自客户端的数据,并打印出来。这里的协议比较简单,只是简单地接收数据并打印,你可以根据实际需求来扩展它。

客户端实现

import socket

# 创建UDP套接字
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# 定义服务器地址和端口号
server_address = ('localhost', 8000)

# 发送数据
message = 'Hello, UDP server!'
sock.sendto(message.encode('utf-8'), server_address)

# 接收响应
data, server = sock.recvfrom(1024)
print('收到来自 %s 的响应: %s' % server, data.decode('utf-8'))

# 关闭套接字
sock.close()

OSI 七层

OCI七层指的是物理层、数据链路层、网络层、传输层、会话层、表示层、应用层:

物理层:主要定义物理设备标准,如网线的接口类型、网卡的物理接口、传输的速率等。
数据链路层:主要将原始数据封装成数据帧,然后实现网络连接之间的通信。
网络层:主要将数据帧发送到目标主机,然后完成通信。
传输层:主要负责数据的传输,提供端到端的服务,如TCP协议。
会话层:主要负责建立和维护通信的会话连接。
表示层:主要负责转换数据的格式,以支持不同的应用。
应用层:主要负责处理用户的应用请求,并为用户提供网络服务。

不同的协议栈各层协议并不完全相同,比如在TCP/IP协议中:

网络接口层:规定了如何在物理网络媒介上传输数据,如以太网、Wi-Fi等。
网络层:定义了数据在网络上的传输和路由方式,主要协议有Internet协议(IP),负责将数据包从源主机发送到目标主机,还有Internet控制报文协议(ICMP)、互联网组管理协议(IGMP)等。
传输层:提供了应用程序之间的端到端通信服务,确保数据可靠、完整地从源主机传输到目标主机,最常用的传输层协议是传输控制协议(TCP)和用户数据报协议(UDP)。
应用层:包含了各种应用程序和协议,用于实现特定的网络功能和服务,例如,超文本传输协议(HTTP)、文件传输协议(FTP)、域名系统(DNS)等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值