python 网络通信

目录

  • 一、ip 地址
    • 1、ip 地址的分类
      • A类
      • B 类
      • C 类
      • 私有地址
      • 公有地址
      • 特殊 ip
  • 二、端口 port
    • 1、知名端口
    • 2、动态端口
  • 三、udp 通信
    • 1、socket
    • 2、bind 绑定
    • 3、网络通信过程
    • 4、udp 聊天室
    • 5、udp 广播
  • 四、tcp 通信
    • 1、对比 udp
    • 2、特点
    • 3、tcp 客户端
    • 4、tcp 服务器
    • 5、文件下载器
    • 6、tcp 的三次握手
    • 7、tcp 的四次挥手


一、ip 地址

  • 作用:电脑的唯一标记,不能重复
  • dest ip: 目的 ip
  • srp: 源 ip

1、ip 地址的分类

  • ipv4:192.168.14.60
  • ipv6:fe80::250::56ff:fe32:8cd0/64

A类

  1. 网络号:192.168.14
  2. 主机号:60

B 类

  1. 网络号:192.168
  2. 主机号:14.60

C 类

  1. 网络号:192
  2. 主机号:168.14.60

私有地址

不能上互联网

公有地址

能直接上网

特殊 ip

  • 127.0.0.1~127.255.255.255用于回路测试
  • 127.0.0.1可以代表本机IP地址

二、端口 port

  • 进出网络程序的通道
  • 用端口号标记电脑上运行的程序
  • 整数,0~65535
  • 进程:运行中的程序

1、知名端口

  • 特殊程序
  • 0~1023
  • 22:ssh 远程登陆 Linux 系统
  • 80:网站一般用的端口
  • 69:下载文件

2、动态端口

  • 普通程序
  • 1024~65535
  • 查看端口状态
    • netstat - t/u

三、udp 通信

  • 用户数据报协议
  • 快速
  • 易丢失

1、socket

  • 协议:传送数据的格式
  • udp:只负责发送,不管是否被接收
  • tcp:每发送一个数据,接收方需回送一个响应
import socket# 创建 udp 套接字
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # ipv4, udp# 获取需要发送的数据
msg = input("输入要发送的数据:")# 发送数据
s.sendto(msg.encode("utf-8"), ("ip", 8080)) # 内容,(ip, 端口)# 接收数据并打印
recv_msg = s.recvfrom(1024) # 堵塞,若没有接收到数据,卡在这个位置
print("%s(%d)>>>%s" % (recv_msg[1][0], recv_msg[1][1], recv_msg[0].decode("utf-8"))) # gbk# 关闭套接字
s.close()

2、bind 绑定

  • 固定端口
  • 发送信息之前
# 绑定一个 ip 和端口
local_info = ("ip", 7788) # 本地信息
s.bind(local_info)

3、网络通信过程

4、udp 聊天室

import socketdef send_msg(s):# 获取发送的数据send_content = input("输入发送的内容:")# 获取对方 ipsend_ip = input("目标 ip:")# 获取对方端口send_port = int(input("目标端口:"))# 发送数据s.sendto(send_content.encode("utf-8"), (send_ip, send_port))def recv_msg(s):recv_content, client_info = s.recvfrom(1024)print(">>>%s(%s):%s" % (client_info[0], client_info[1], recv_content.decode("utf-8")))def main():# 创建套接字s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)# 绑定s.bind(("", 7890))# 功能选择while True:print("1: 发送数据")print("2: 接收数据")print("3: 退出")op = input("要进行的操作序号:")if op == "1":send_msg(s)elif op == "2":recv_msg(s)elif op == "3":breaks.close()if __name__ == '__main__':main()

5、udp 广播

s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)

四、tcp 通信

  • 传输控制协议
  • 稳定,很少丢失
  • 较慢

1、对比 udp

  • 需要先建立链接
  • TCP 每次发送一个数据包,对方都要确认,保证数据准确到达对方
  • TCP 通信过程中,通道占用
  • TCP 只需要建立一次链接

2、特点

  1. 面向连接,无法广播
  2. 发送-应答机制
  3. 超时重传
  4. 错误校验
  5. 流量控制和阻塞管理

3、tcp 客户端

import socket# 创建 tcp 套接字
client_s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # ipv4, tcp# 链接服务器
client_s.connect(("ip", 8080))# 发送数据
client_s.send("hello world".encode("utf-8"))# 关闭套接字
client_s.close()
  • 发送、接收数据:

4、tcp 服务器

  • 为别的软件提供服务的软件
  • 服务器一般都需要绑定
  • 客户端一般不绑定
import socket# 创建 tcp 套接字
server_s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 创建的套接字是用来等待客户端链接用的# 绑定本地信息
server_s.bind(("", 7890))# 将套接字由主动链接模式改为被动模式
server_s.listen(128)# 等待客户端的链接
# accept 返回的套接字用来与客户端通信
new_s, client_info = server_s.accept() # 默认堵塞,直到一个 tcp 客户端链接之后解除
print(client_info)# 接收/发送数据
while True:recv_content = new_s.recv(1024) # 若 recv 解堵塞,说明:客户端发过来数据/客户端关闭了通信。若收到的数据长度为 0,意味着断开了链接if len(recv_content) != 0:print(recv_content)else:new_s.close()breakserver_s.close()

5、文件下载器

  • 客户端:
import socket# 创建 tcp 套接字
client_s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 链接 tcp 服务器
server_ip = input("输入服务器的 ip:")
server_port = int(input("输入服务器的端口:"))
client_s.connect((server_ip, server_port))
print("链接服务器(%s)成功" % server_ip)# 发送要下载的文件的名字的字符串
download_file_name = input("输入要下载的文件的名字")# recv 接收
client_s.send(download_file_name.encode("utf-8"))# 存储
content = client_s.recv(1024)
print("接收到的数据:")
print(content.decode("gbk"))# 将数据存储到一个文件中
with open(download_file_name, "w") as f:f.write(content.decode("gbk"))print("下载文件(%s)成功" % download_file_name)# 关闭套接字
client_s.close()
  • 服务器:
import socket# 创建 tcp 套接字
server_s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 绑定本地信息
port = 7890
server_s.bind(("", port))# 监听模式
server_s.listen(128)
print("等待客户端链接,端口:%d" % port)# 等待客户端链接
new_s, client_info = server_s.accept()
print("已经链接(%s)" % str(client_info))# 接收客户端要下载的文件字
download_file_name = new_s.recv(1024).decode("utf-8")# 找到文件名,读取内容
with open(download_file_name, "r") as f:content = f.read()# 将数据发送给客户端
new_s.send(content.encode("gbk"))# 关闭套接字
new_s.close()
server_s.close()

6、tcp 的三次握手

通信双方建立链接的过程。

  • 从客户端调用 connect 开始。客户端自动发送一个SYN数据给对方,包中有一个数字,开始3次握手
  • 服务器接收到该SYN数据包,将数字+1,会送。(ACK+SYN)
  • 客户端接收到后,数值+1,回送给tcp
  • 最终目的:双方都明确对方存在,而且都准好了资源

7、tcp 的四次挥手

  • 最终目的:释放资源
  • 单工:收音机
  • 半双工:对讲机
  • 全双工:手机、网络

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1543943.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

XSS闯关小游戏(前13关)

挖掘思路 1.存在可控参数 2.页面存在回显 3.使用带有特殊字符的语句去测试&#xff0c;网站是否进行了实例化 ( 例如 ">123 ) 4.构造闭合&#xff0c;实现payload的逃逸 1 name处参数可控&#xff0c;直接打即可 2 这里知道<>被实体编码了 再测试">1…

DANN GRL

域自适应是指在目标域与源域的数据分布不同但任务相同下的迁移学习&#xff0c;从而将模型在源域上的良好性能迁移到目标域上&#xff0c;极大地缓解目标域标签缺失严重导致模型性能受损的问题。 介绍一篇经典工作 DANN &#xff1a; 模型结构 在训练阶段需要预测如下两个任务…

langchain的构成

1.简介 langchain的构成其包含langchain-core,langchain-community,langchain,langgraph,langserve,langSmith。 2&#xff0c;构件的详解 ‌LangChain Core‌ ‌LangChain Core‌是LangChain框架的核心组成部分&#xff0c;它包含了不同组件的基本抽象以及将它们组合在一起…

【每天学个新注解】Day 4 Lombok注解简解(三)—@NonNull

我们在之前的三天学了Lombok常用的注解&#xff1a; 【每天学个新注解】Day 1 Lombok注解简解&#xff08;〇&#xff09;—Getter、Setter、ToString、EqualsAndHashCode、Constructor 【每天学个新注解】Day 2 Lombok注解简解&#xff08;一&#xff09;—Data、Build、Value…

Kubernetes调度单位Pod

Kubernetes调度单位Pod 1 Pod简介 不直接操作容器container。 一个 pod 可包含一或多个容器&#xff08;container&#xff09;&#xff0c;它们共享一个 namespace&#xff08;用户&#xff0c;网络&#xff0c;存储等&#xff09;&#xff0c;其中进程之间通过 localhost 本地…

iOS 巨魔技巧:一键汉化巨魔商店

嘿&#xff0c;这是黑猫。iOS 巨魔商店一直都有个严重的问题&#xff1a;界面纯英文&#xff0c;不支持简体中文。 当然了&#xff0c;在IT行业&#xff0c;英语是通用语言。但是&#xff0c;既然巨魔/越狱面向普罗大众的技术&#xff0c;那么做好语言适配&#xff0c;还是很关…

idea插件开发系列1-环境搭建

前言 还记着10多年前有幸接触了eclipse插件开发&#xff0c;10多年后的今天有开发了idea的插件&#xff0c;真是一个轮回&#xff01; 为什么要学习idea插件开发呢&#xff1f; 目前公司使用自己的MVC框架&#xff0c;没有相应的idea插件支持&#xff08;如类似mybatis插件可…

Redis简单介绍与安装应用

在当今的互联网时代&#xff0c;数据的快速存取和处理变得至关重要。Redis&#xff0c;作为一种高性能的键值存储系统&#xff0c;已经成为许多开发者和企业的首选。本文将简要介绍Redis的基本概念、工作原理以及其在实际应用中的一些典型用例。 一、简介 1&#xff09;概念 …

centos7 docker部署nacos

1. 一行代码安装git yum -y install git 2. 下载最新版nacos源码&#xff1a; git clone https://github.com/nacos-group/nacos-docker.git 进入nacos-docker文件 cd nacos-docker 3.docker安装数据库Mysql8 按这个来就行&#xff0c;非常好 Docker安装mysql8-超详细、每…

记某学校小程序漏洞挖掘

前言&#xff1a; 遇到一个学校小程序的站点&#xff0c;只在前端登录口做了校验&#xff0c;后端没有任何校验&#xff0c;奇葩弱口令离谱进去&#xff0c;站点里面越权泄露敏感信息&#xff0c;接管账号等漏洞&#xff01;&#xff01;&#xff01; 渗透思路 1.绕过前端 …

docker 创建showdoc服务 showdoc容器部署教程

1. 下载最新版本镜像 # 按照最新版本 docker pull star7th/showdoc 2. 创建映射文件夹&#xff1a; # 创建文件夹 mkdir -p /data/showdoc_data# 可写权限 chmod 777 /data/showdoc_data 3.创建容器命令&#xff1a; docker run -d --name showdoc --userroot --privileged…

DoppelGanger++:面向数据库重放的快速依赖关系图生成

doi&#xff1a;DoppelGanger: Towards Fast Dependency Graph Generation for Database Replay&#xff0c;点击前往 文章目录 1 简介2 架构概述3 依赖关系图3.1 符号和问题定义3.2 无 IT(k) 图3.3 无 OT 图表3.4 无 OTIT 图表3.5 无 IT[OT] 图表3.6 输出确定性保证 4 重复向后…

go-admin-ui的菜单分割线设计思路和代码实现

在菜单管理添加分割线&#xff0c;类似这种&#xff1a; 思路&#xff1a;利用空间结构和数据特点来唯一区分出分割线&#xff0c;来划分业务区域 <template><div><h1>Split Line Controller</h1><ul><li v-for"route in displayedRout…

Thinkphp5x远程命令执行 靶场攻略

环境配置 靶场&#xff1a;vulhub/thinkphp/5-rce docker-compose up -d #启动环境 漏洞复现 1.访问靶场&#xff1a;http://172.16.1.198:8080/ 2.远程命令执⾏ POC&#xff1a; ?sindex/think\app/invokefunction&functioncall_user_func_array&vars[0]system…

网安新声 | 黎巴嫩BP机爆炸事件带来的安全新挑战与反思

网安加社区【网安新声】栏目&#xff0c;汇聚网络安全领域的权威专家与资深学者&#xff0c;紧跟当下热点安全事件、剖析前沿技术动态及政策导向&#xff0c;以专业视野和前瞻洞察&#xff0c;引领行业共同探讨并应对新挑战的策略与可行路径。 9月17日&#xff0c;黎巴嫩境内发…

项目实战:lngress搭建Nginx+WP论坛+MariaDB

1. 网站架构 本次部署形式完全舍弃 Docker&#xff0c;将所有应用都置于Kubernetes&#xff0c;采用 Deployment 而非单 Pod 部署&#xff0c;稳定性得到升级。 2. 部署 MariaDB [rootk8s-master ~]# mkdir tdr [rootk8s-master ~]# cd tdr/ &#xff08;1&#xff09;定义 …

YOLOv8改进,YOLOv8添加STA注意机制(超级令牌注意力机制,CVPR2023),并二次创新C2f结构,助力涨点

改进前训练结果: 改进后训练结果: 摘要 在Transformer架构引入“超级令牌”(Super Token)的机制,旨在解决浅层网络中过多冗余的局部特征捕捉问题。传统的Transformer在捕捉长程依赖性方面表现出色,但在浅层网络中,由于局部特征冗余,导致了计算效率的低下。为了解决…

Nginx基础详解1(单体部署与集群部署、负载均衡、正反代理、nginx安装)

本阶段的任务 1.学会集群的操作概念 2.完成对Nginx的入门操作 3.使用Nginx实现集群和负载均衡 4.使用Nginx实现高可用的方案 目录 1.单体部署与集群部署 1.1单体部署的概念 1.2单体部署的优缺点 1.3集群部署的概念 1.4集群部署的优缺点 1.5集群部署需要注意的点 1.…

基于Springboot共享充电宝管理系统JAVA|VUE|SSM计算机毕业设计源代码+数据库+LW文档+开题报告+答辩稿+部署教+代码讲解

源代码数据库LW文档&#xff08;1万字以上&#xff09;开题报告答辩稿 部署教程代码讲解代码时间修改教程 一、开发工具、运行环境、开发技术 开发工具 1、操作系统&#xff1a;Window操作系统 2、开发工具&#xff1a;IntelliJ IDEA或者Eclipse 3、数据库存储&#xff1a…

CSS的弹性盒子模型(Flex box)

弹性盒子模型是CSS3的一种新的布局模式&#xff0c;弹性盒是一种当页面需要适应不同的屏幕大小以及设备类型时确保拥有合适的布局方式&#xff0c;引入弹性盒子模型的目的时提供更加有效的方式来对一个容器中的子元素进行排列&#xff0c;对齐和分配空白空间。 弹性盒子由弹性容…