首页 文章 精选 留言 我的

精选列表

搜索[全模态推理],共10000篇文章
优秀的个人博客,低调大师

VDA标准全解

什么是VDA标准? 德国汽车工业联合会(VDA) 是德国汽车工业的倡导团体,协会成员包括汽车制造商和汽车零部件供应商。同时,它也是欧洲汽车制造商协会(ACEA)的成员。VDA制定标准和最佳实践,以满足德国汽车行业公司的需求,如宝马、大众和梅赛德斯-奔驰母公司戴姆勒等汽车制造商,也包括外国供应商和欧宝等外资汽车制造商。 常见的VDA标准报文有哪些? VDA 4984 :交付预测 VDA 4985 :按期交付 VDA 4987 :发货通知/ASN VDA 4989 :收货通知 VDA 4938 :发票 VDA 4988 :汇款通知单 更多VDA报文目录:VDA报文标准 以下是几种常用报文的应用: 除了以上报文的应用之外,不得不提到的是VDA Label,VDA Label是适用于汽车领域的规范标签,听到Label这个名字大家或许会觉得有些陌生,实际上这里的Label就是在产品运输前需要贴在装有产品的纸箱或托盘上的标签,往往需要包含产品必要的信息,如接收方地址信息、产品重量、供应商编号、供应商产品编号等。Label制作对于企业而言是一项令人头疼的事情,需要填充很多数据,对于数据格式也有着很高的要求。如果可以通过知行之桥EDI系统自动生成Label,将为企业节省大量的人力。 应该如何生成VDA Lael呢?知行之桥的PDF Port即可实现这个功能,通过PDF Port生成符合VDA标准PDF标签,然后让打印厂商按标签要求打印即可。在生成Label的过程中,需要设计PDF模板,这是因为不同的交易伙伴需要的Label格式是不一样的,必须进行个性化的设计才能保证能够完全符合交易伙伴的要求。制作Label的详细流程可以参考文章:VDA Label VDA标准都用于哪些行业? VDA报文是在汽车领域使用的EDI报文,可满足汽车行业内各个企业的特定需求。VDA标准与汽车行业的联系十分密切,它从头到尾的定义了汽车供应链中的各个细节。 VDA标准适用供应链用户所要求的不同功能,例如在订单中(预测),以检查供应商运送的货物是否与分销商下达的采购订单相匹配(DESADV或ASN);有关交货顺序和及时要求(DELJIT),电子发票(INVOIC)等的准确信息。这些数据的传输可确保制造商(OEM)、供应商(TIER 1、TIER 2、TIER 3……)和顾客之间信息准确高效的流动。 VDA标准应用实例 上汽大众汽车有限公司(简称“上汽大众”)是一家中德合资企业,由上汽集团和大众汽车集团合资经营,是国内历史最悠久的汽车合资企业之一。上汽大众与其供应商之间通过EDI传输业务文件。 大众EDI项目使用的是符合VDA标准的报文——VDA 4984和VDA 4987。VDA 4984 是VDA标准下表示交货计划/提货计划的报文,VDA 4987表示发货通知/收货反馈的报文。业务流程如下图所示: 整体业务逻辑是大众向其供应商发送VDA 4984(提货计划),供应商收到报文后按照要求备货,发货后向大众发送VDA 4987(发货通知),最后再由大众向供应商发送VDA 4987(收货反馈)表示已经顺利收到货物。 与交易伙伴传输VDA文件需要做哪些准备呢? 与交易伙伴传输VDA文件首先需要和交易伙伴进行沟通,明确实际需求。明确使用VDA报文标准之后,还需要确定传输协议,如上图所示,上汽大众的EDI项目中使用了OFTP2.0,此外还有AS2、SFTP等协议可选。比如特斯拉就选择使用AS2作为其传输协议。 此外还需要和您的交易伙伴确认传输的具体文件类型,不同的业务场景需要的报文类型各有不同,除了上文提到的常见报文类型之外,如果您的交易伙伴向您提供了新的报文类型,联系我们,轻松搞定任意报文类型!EDI系统可以集成您的业务系统,从而保证您的EDI项目可以实现高度自动化传输。 有了明确的需求之后,您可以寻找合适的EDI供应商实施EDI项目,知行之桥支持多种集成方式,您可以使用中间数据库表、API、自定义文件格式等多种方案与供应商业务系统集成,实现数据传输,节约企业成本,显著提高效率。 如何读懂VDA报文? VDA标准对于每个字段的长度,以及在报文中所占的位数有着严格的规定,每一行必须是128个字符。每个字段的位数如果存在缺失或增多的情况,将会导致整个报文长度的改变,报文内容也会随之错位。所以,在生成VDA报文的时候,需要严格的遵守VDA报文规范中的要求,才可以保证在每一个特定的位置上存放的是正确的数据信息。 VDA报文规范中的对于字段位数和长度的要求主要有以下几点:第一如果类型为N,例如N8,业务数据的最大长度不能超过8位,如果小于8位,则用数字0进行右补齐,如12300000;第二如果类型为A,例如A8,业务数据的最大长度不能超过8位,如果小于8位,则用空格进行左补齐,如____123(这里记得凑够8位);第三如果规范中的描述是Empty,则根据字段类型用数字0或空格进行相应的补齐。 详细报文解读可以参考文章:如何读懂艾可迅ACOM EDI项目中的4984报文? 注:文案部分图片及内容来源于网络,版权归原创作者所有,如有侵犯到您的权益,请您联系我们进行删除,给您带来困扰,我们深感抱歉。

优秀的个人博客,低调大师

AOP编程全解析

AOP是一种编程思想,一套规范。 软件开发经历了面向过程编程时代,以C语言为代表,之后是面向对象编程时代,以Java语言为代表。 在21世纪大牛们又提出了一种新的编程思想面向方面编程,即AOP理念,全称Aspect-Oriented Programming。 AOP是第三代编程思想,到哪免不了都要问下。 发展历史 1997年在面向对象编程大会上Gregor Kiczales等人首次提出了AOP的概念,之后各大公司等分别加入研究。2001年Palo Alto研究中心发布了首个支持AOP的语言AspectJ,同时也是一个规范。 目标定位 在对真实世界抽象的面向对象编程过程中,始终伴随着某写操作的代码无法实现模块化封装,会散落在各个对象中存在,特别是非功能性代码。对于一般的功能开发采取面向对象方式进行抽象是能够很好应付的,但是面向方面(切面)给了一种新的思维方式来考虑编程,能更好的进行全局结构化思考。 所以AOP主要解决两个问题: 代码分散问题,特别是那些非功能性代码。 作为面向对象编程思维的一种补充和完善。 核心知识点 连接点 连接点:join point,程序的一个执行点,如类中的一个方法,方法里面一个代码块。 切入点 切入点:point cut,是一个捕获连接点的代码结构,就是定义一个代码逻辑用来捕获某个连接点的代码。 方面 方面;aspect,是具体被执行的切面逻辑代码,类似于一个类。 通知 通知:advice,是point cut执行的代码,定义在连接点什么时机来执行aspect。 主要运用场景 场景分为2类: 一类是非功能性需求,如日志、异常、安全、事务都可以使用AOP思想编程。 另一类是功能性需求,在原来对象抽象的思维中添加AOP思维,这里是一种结构化思维,在定义类时考虑多个类的切面共性。 主流AOP语言实现 对AOP实现除了AspectJ外,已知的还有JBoss AOP、Spring AOP等。 这里只介绍AspectJ和SpringAOP,重点是他们不同点。 AspcetJ AspectJ采用静态织入方式进行切面织入原代码,提供独立的编译器把切面和原代码的java文件编织成一个新的class文件。提供了详细的编译日志和调试工具,编译时间长但是运行效率高。 连接点的支持范围: 方法和构造器调用 方法和构造器执行 属性访问 异常处理 类初始化,是static代码块 语法结构 控制流 对象及参数类型 条件测试 关联连接点通知方式: before,连接点执行前运行 after,连接点执行后运行 around,连接点的整个外侧,整个包住,能够绝的连接点执行和修改上下文环境 Spring AOP Spring AOP没有完全实现AspectJ语言,它更多的是对Spring framwork进行Aop能力的扩展实现,补全Spring framework的不足并让Aop与Spring framwork融合。 连接点只支持方法拦截调用。 连接点通知方式在aspect的before、after、around的基础上增加throw对异常的触发的拦截。 Spring AOP与Spring IoC体系融合,对于aspect类统一交由Spring beans管理,并且提供ProxyFactoryBean的AOP代理工厂类,还有自动代理的BeanNameAutoProxyCreator和DefaultAdvisorAutoProxyCreator的强大工具。 Spring AOP是动态织入,在运行时完成AOP的aspect代码织入原代码逻辑中。其底层默认采用JDK的动态代理实现AOP代理,当对象没有实现接口时,CGLIB会默认使用。 优缺点 优点:解决代码散乱问题、代码逻辑解偶、易于维护、提供扩展性和可重用性。 缺点:切面越多系统越复杂难懂、工程师学习成本增加(业务不再是线型,变成了跳跃式) AOP编程要慎重使用,作为面向对象编程的一种补充。 作者:Owen Jia 关注他的博客:https://blog.shareworld.vip

优秀的个人博客,低调大师

Kubernetes Node全解

今晚20:30,Kubernetes Master Class在线培训第四期《企业如何构建CI/CD流水线》即将开播,点击链接:http://live.vhall.com/729465809 即可免费预约注册! 介 绍 Kubernetes在GitHub上拥有超过48,000颗星,超过75,000个commit,拥有以Google为代表的科技巨头公司为主要贡献者。可以说,Kubernetes已迅速掌管了容器生态系统,成为容器编排平台的真正领导者。 Kubernetes提供了诸如部署的滚动和回滚、容器健康检查、自动容器恢复、基于指标的容器自动扩展、服务负载均衡、服务发现(适用于微服务架构)等强大功能。在本文中,我们将讨论Kubernetes重要的基本概念、master节点架构,并重点关注节点组件。 理解Kubernetes及其抽象 Kubernetes是一个开源的编排引擎,用于自动部署、扩展、管理和提供托管容器化应用程序的基础架构。在基础架构级别,Kubernetes集群由一组物理或虚拟机组成,每个机器都以特定角色运行。 Master机器就像是所有业务的大脑,负责编排所有运行在节点机器上的容器。每个节点都配有一个容器运行时。节点接收来自master的指令,然后执行操作来创建pod、删除pod或调整网络规则。 Master组件负责管理Kubernetes集群。它们管理pod的生命周期,pod是Kubernetes集群内部署的基本单元。Master Server运行以下组件: kube-apiserver - 主要组件,为其他master组件公开API。 etcd - 分布式密钥/值存储库,Kubernetes使用它来持久化存储所有集群信息。 kube-scheduler – 依照pod规范中的信息,来决定运行pod的节点。 kube-controller-manager - 负责节点管理(检测节点是否出现故障)、pod复制和端点创建。 cloud-controller-manager - 守护进程,充当API和不同云提供商工具(存储卷、负载均衡器等)之间的抽象层。 节点组件是Kubernetes中的worker机器,受到master的管理。节点可以是虚拟机(VM)或物理机器——Kubernetes在这两种类型的系统上都能良好运行。每个节点都包含运行pod的必要组件: kubelet – 为位于那个节点上的pod监视API服务器,确保它们正常运行 cAdvisor - 收集在特定节点上运行着的pod的相关指标 kube-proxy - 监视API服务器,实时获取pod或服务的变化,以使网络保持最新 容器运行时 - 负责管理容器镜像,并在该节点上运行容器 Kubernetes节点组件详解 总而言之就是,节点上运行着两个最重要的组件——kubelet和kube-proxy,除此之外还有一个负责运行应用容器化应用程序的容器引擎。 kubelet kubelet处理着master和在其上运行的节点之间的所有通信。它以manifest的形式接收来自主设备的命令,manifest定义着工作负载和操作参数。它与负责创建、启动和监视pod的容器运行时进行接合。 kubelet还会周期性地对配置的活跃度探针和准备情况进行检查。它会不断监视pod的状态,并在出现问题时启动新实例。kubelet还有一个内部HTTP服务器,在端口10255上显示一个只读视图。除此之外,在/healthz上还有一个健康检查端点,以及一些其他状态端点。例如,我们可以在/pods获取正在运行的pod的列表。我们还可以在/spec获取kubelet正在运行的机器的详情。 kube-proxy kube-proxy组件在每个节点上运行,负责代理UDP、TCP和SCTP数据包(它不了解HTTP)。它负责维护主机上的网络规则,并处理pod、主机和外部世界之间的数据包传输。它就像是节点上运行着的pod的网络代理和负载均衡器一样,通过在iptables使用NAT实现东/西负载均衡。 kube-proxy过程位于连接到Kubernetes的网络和在该特定节点上运行的pod之间。它本质上是Kubernetes的核心网络组件,负责确保跨集群的所有元素有效地进行通信。当用户创建Kubernetes服务对象时,kube-proxy实例会负责将该对象转换为位于worker节点的、本地iptables规则集上的有意义的规则。iptables用于将分配给服务对象的虚拟IP转换为服务映射的所有pod IP。 容器运行时 容器运行时负责从公有或私有镜像仓库中拉取镜像,并根据这些镜像运行容器。当下最流行的容器引擎无疑是Docker,不过Kubernetes还支持诸如rkt、runc等的其他容器运行时。正如我们在上文中提到过的,kubelet会直接与容器运行时交互,以启动、停止或删除容器。 cAdvisor cAdvisor是一个开源代理,它能够监视资源使用情况并分析容器的性能。cAdvisor最初由谷歌创建,现在已与kubelet集成。 位于每个节点上的cAdvisor实例,会收集、聚合、处理和导出所有正在运行的容器的指标,如CPU、内存、文件和网络使用情况等。所有数据都将发送到调度程序,以确保调度程序了解节点内部的性能和资源使用情况。这些信息会被用于执行各种编排任务,如调度、水平pod扩展、管理容器资源限制等。 从动手实操了解节点组件端点 接下来,我们将安装一个Kubernetes集群(在Rancher的帮助下),以此来开始探索节点组件公开的一些API。要完成下面的操作,我们需要: Google Cloud Platform帐户(任何公有云也都是一样的) 一台主机,后续Rancher会运行在它上面(可以是个人PC / Mac或公有云中的VM) 在同一主机上,安装kubectl和 Google Cloud SDK。验证好您的相关credential(gcloud init和gcloud auth login),确保gcloud能正常访问您的Google Cloud账户 在GKE上运行的Kubernetes集群(运行EKS或AKS也是相同的) 启动Rancher实例 首先,启动Rancher实例。这一过程非常简单,参考快速上手指南即可: https://rancher.com/quick-start/ 使用Rancher部署GKE集群 使用Rancher设置和配置Kubernetes集群,同样是按指南进行操作即可: https://rancher.com/docs/rancher/v2.x/en/cluster-provisioning/hosted-kubernetes-clusters/gke/ 部署好集群后,我们可以快速部署Nginx以进行测试: 为了与Kubernetes API进行交互,我们需要在本地计算机上启动代理服务器: 让我们检查一下进度,看它是否正在正常运行,以及是否在监听默认端口: 现在,在浏览器中,检查kubelet公开的各种端点: 接下来,显示集群可用节点的列表: 我们可以通过spec来检查所有列出的、使用API的节点。在本文的示例中,我们使用n1-standard-1机器类型(1个vCPU,3.75GB RAM,10GB的根大小磁盘)创建了一个3节点集群。我们可以通过访问专用端点来确认这些规范: 在不同端点使用相同的kubelet API,我们可以检查我们创建的Nginx pod,以查看它们正运行在什么节点上。 首先,列出正在运行的pod: 现在,curl每个节点的/proxy/pods端点,查看其运行的pod列表: 我们还可以检查cAdvisor端点,它会以Prometheus格式输出大量数据。默认情况下,这在/metrics HTTP端点可用: SSH到节点并直接调用kubelet端口,也可以获得相同的cAdvisor或pod信息: 清理 要清理我们在本文中使用的资源,只需从Rancher UI中删除Kubernetes集群即可(选择集群并点击Delete按钮就可以了)。这将删除我们的集群正在使用的所有节点以及关联的IP地址。如果您是在公有云中使用VM来运行Rancher,那么您也需要处理它。找出您的实例名称,然后将其删除即可: 结 语 在本文中,我们讨论了Kubernetes节点机器的关键组件。之后,我们使用Rancher部署了一个Kubernetes集群,并完成了一个小型部署以帮助我们学习使用kubelet API。 若想了解有关Kubernetes及其架构的更多信息,Kubernetes官方文档是一个不错的起点:https://kubernetes.io/docs/concepts/overview/components/

优秀的个人博客,低调大师

Python 网络编程 (全)

计算机网络 1.网络分层 ①(DoD模型):链路层(网络接口层),网络层(网际层),传输层,应用层 ②(OSI开放互联模型):物理层,数据链路层,网络层,传输层,会话层,表示层,应用层 2. OSI参考模型 ①应用层:提供用户接口,特指网络应用程序,能产生网络流量的应用程序 ②表示层:表示数据,如采用二进制或ASCII等,处理数据,如数据加密,数据压缩等 ③会话层:会话层的作用主要是建立,维护,管理应用程序之间的会话 ④传输层:提供可靠或不可靠的传输,能够错误纠正,纠正失败能够重传 ⑤网络层:为网络设备提供逻辑地址,根据数据包的逻辑地址选择最佳网络路径 ⑥数据链路层:常被称为MAC层,它管理网络设备的物理地址,所以物理地址也称为MAC地址 ⑦物理层:主要负责二进制数据比特流在设备之间的传输 3. 数据封装 数据在传输层添加源端口和目标端口,我们称之为数据段或消息,可靠传输称为数据段,不可靠传输称为消息.在网络层会为数据段或消息添加目标地址和源地址,称为数据包.数据包在数据链路层添加了目标MAC地址,源MAC地址和帧校验序列(FCS)数据帧. 注意:数据包包括数据,端口,IP地址.数据帧包括数据,端口,IP地址,MAC地址 网络层的协议分析 在TCP/IP协议栈中网络层有四个协议IP,IGMP,ICMP和ARP: ①因特网协议(IP) ②因特网控制报文协议(ICMP) ③地址解析协议(ARP) ④逆地址解析协议(RARP) ⑤代理ARP ⑥组管理协议(IGMP) 1.IP数据报:也称IP分组,是指IP层传输的数据单元及其格式,同时也是指IP层的无连接数据报传输机制和无连接服务 2.接口层的作用(包含ARP地址解析协议,RARP逆地址解析协议) ①为IP模块发送和接收IP数据报 ②为ARP模块发送ARP请求和接收ARP应答 ③为RARP模块发送RARP请求和接收RARP应答 ④目前使用最广泛的链路层协议有以太网,串行接口链路等 ⑤MAC地址:48位(6字节)的目标地址和源地址 3.ARP协议工作过程 ①首先在自己的ARP告诉缓存中找这个IP地址与MAC地址的映射关系 ②如果找不到,则ARP就发送一份ARP请求给以太网上的每个主机,这个过程称为ARP广播 ③目的主机的ARP层收到了这份ARP广播后,识别出发送方在询问他的地址,于是就发送一个包含IP地址及对应物理地址的ARP应答发送给发送方 ④收到ARP应答后,发送方就可以传IP数据报了 4. RARP协议 ①RARP用于支持误判工作站在引导或启动时获得自身的IP地址(无盘指没有存放有引导所需操作文件的辅助存储器),经常和TFTP(简单文件传输协议)一起使用,即通过RARP获得IP地址 ②从接口卡读取唯一的物理地址(MAC地址) ③发送一份RARP请求某个RARP服务器响应该无盘系统的IP地址,在网络上广播,请求响应IP地址的响应 ④如果网络上有RARP服务器收到请求,就发送一个RARP应答,包含无盘主机分配的IP地址,通常是单播传送的 ⑤假如网络上没有RARP服务器,无盘主机会按一定的时间间隔持续地发送RARP请求到网络上 5.ICMP协议(Internet control message protocol) ①ICMP可提供有关网络可连接性的信息,提供可达性,交互错误,路由错误报告及控制信息等IP不能够提供的信息,并把信息返回给发送方,是TCP/IP网络层的重要协议 ②IP负责把数据从一个网络传送到另一个网络,而IP协议本身没有差错控制机制,如果在传递过程中出现因某种原因不能发送的IP数据,ICMP将被用来传递差错报文及其他需要注意的信息 6.IP协议(Internet protocol) ①IP协议(网际协议)是TCP/IP协议族中最核心的协议,所有的TCP,UDP,ICMP及IGMP数据都是IP数据报格式传输的 ②IP层主要负责路由,即数据包选路,使通过由路由器连接的互联网络传输数据报 7.IP层的传输特点 ①IP提供的是不可靠,无连接的数据报传送 ②不可靠的意思是不能保证IP数据报能成功地到达目的地,IP仅提供尽力传送服务,负责数据的路由与传输,却并不处理数据报的内容 ③无连接是IP并不维护任何关于后续数据报的状态信息,每个数据报的处理是相互独立的,这也说明,IP数据报不按顺序发送顺序接收 8.IP路由选择 当目的主机与源主机不是直接相连或处在同一个共享网络上,那么IP数据报就不能直接送到目的主机上,而需要路由器来转发数据报,通常主机把数据报发往一个默认的路由器上,由路由器决定怎么发送数据报 9.IP选路机制 ①搜索匹配的主机地址 ②搜索匹配的网络地址 ③搜索默认路由 ④如果路由表中没有默认项,而又没有找到匹配项,这时如果数据报是由本地主机产生的,那么可能返回主机不可达差错,网络不可达差错 动态选路协议(网络层) 1.静态选路和动态选路 ①静态选路:就是在配置接口时,以默认的方式生成路由表项,并通过ICMP报文来更新表项 ②动态选路:管理员不需要像静态路由一样,对路由表进行手工维护,而是在每台路由器上运行一个路由表管理程序 2.动态选路特征: ①不改变选路机制,仍是按(主机,网络,默认路由) ②改变选路策略:路由项目由守护程序动态增加或删除 ③动态选路由守护程序完成 3.RIP协议(由UDP传输的动态选路协议或动态路由协议) ①RIP是最 广泛使用的动态选路协议,协议采用距离向量算法,即相邻的路由器之间互相交换整个路由表并进行矢量的叠加,最终获得整个网络的路由信息 ②RIP以跳数作为路由器之间距离的度量,所有直连接口的跳数为1,每增加一个路由器,可达到的网络跳数加1,为限制路由收敛的时间,RIP规定跳数取值为0~15,大于等于16跳数表示目的不可达,某种程度上限制了网络的大小 4.OSRF协议(内部网关协议和链路状态协议) ①OSRF协议是除RIP之外的另一个内部网关协议,与采用距离向量的RIP不同的是,OSRF是一个链路状态协议,因而克服了RIP的所有限制,OSRF在实现上直接使用IP协议而不再使用传输层协议,如UDP ②链路状态包括路由器链路的端口地址,网络掩码,此链路互联的网络及网络类型等,它构成了路由器的链路状态数据库,是路由器进行路由决策主要依据 IP地址 1.什么是Ip地址 网络地址是一个网络层概念,是互联网上的主机在网络中具有的逻辑地址,Internet上采用的IP地址表示网络地址 2.IP地址的作用 IP地址:用来在网络中标记一台电脑的一串数字,比如192.168.1.1;在本地局域网上是惟一的 3.IP地址的分类 ①每一个IP地址包括两部分:网络地址和主机地址 ②A类网络号:主机数2^24-2,子网数2^22 ③B类网络号:主机数2^16-2,子网数2^14 ④C类网络号:主机数2^8-2,子网数2^6 ⑤私有ip: 在这么多网络IP中,国际规定有一部分IP地址是用于我们的局域网使用,也就是属于私网IP,不在公网中使用的,它们的范围是: 10.0.0.0~10.255.255.255 172.16.0.0~172.31.255.255 192.168.0.0~192.168.255.255 但是最大的代表广播地址,最小的代表网络号,不允许使用,也就是在局域网中,Ip地址最大是254,最小是1 4.域名 ①由于IP地址由纯数字组成,很难让人记忆,且不能表达功能,地理位置等附加含义,所以在TCP/IP网络形成不久,标准化组织就定义了这种主机地址表达方式 ②域名是一个应用层概念,是由一串用点分隔的名字组成的Internet上某台计算机或计算机组的名字,用于在数据传输时标志计算机的电子方位(有时也指地理位置,地理上的域名或有行政自主权的一个地方区域) ③域名其实就是IP地址的“面具”,熟知的有www.baidu.com 5.子网掩码 ①子网掩码不能单独存在,它必须结合IP地址一起使用 ②子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分子网掩码的设定必须遵循一定的规则 ③与IP地址相同,子网掩码的长度也是32位 ④网络掩码与ip地址相与就是网络号,假设IP地址为192.168.1.1子网掩码为255.255.255.0,那么此网络号就是192.168.1.0 6.tcp和端口 IP地址是网络层的寻址方式,端口是传输层的寻址方式 socket(插口,套接字)简介 1.什么是socket ①socket(套接字)接口是应用程序与TCP/IP协议栈的接口,它定义了一组函数或例程来支持TCP/IP网络应用程序开发 ②socket(简称 套接字) 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是: ③它能实现不同主机间的进程间通信 2.创建socket ①在 Python 中 使用socket 模块的函数 socket 就可以完成socket.socket(AddressFamily, Type) ②Address Family:可以选择 AF_INET(用于 Internet 进程间通信) 或者 AF_UNIX(用于同一台机器进程间通信),实际工作中常用AF_INET ③Type:套接字类型,可以是 SOCK_STREAM(流式套接字,主要用于 TCP 协议)或者 SOCK_DGRAM(数据报套接字,主要用于 UDP 协议) udp介绍 1.UDP介绍 UDP采用无连接的方式来提供通信服务,是传输层中最简单的协议 2.UDO特点 ①UDP是一个简单的,面向数据报的传输层协议,无连接协议,简单地把TCP/IP应用层得到的消息打包到数据板中 ②UDP没有提供任何类型的内置出错检查或重传能力来提高可靠性,这种方法称为尽最大能力努力交付 ③由于通讯不需要连接,所以可以实现广播发送 ④UDP传输数据时有大小限制,每个被传输的数据报必须限定在64KB之内 ⑤适用情况: UDP是面向消息的协议,通信时不需要建立连接,数据的传输自然是不可靠的,UDP一般用于多点通信和实时的数据业务,比如: 语音广播 视频 QQ TFTP(简单文件传送) SNMP(简单网络管理协议) RIP(路由信息协议,如报告股票市场,航空信息) DNS(域名解释) 3.DNS(域名系统,使用UDP协议工作) ①功能:每个IP地址都可以有一个主机名,主机名由一个或多个字符串组成,字符串之间用小数点隔开。有了主机名,就不要死记硬背每台IP设备的IP地址,只要记住相对直观有意义的主机名就行了。这就是DNS协议的功能 ②主机名到IP地址的映射有两种方式: 静态映射,每台设备上都配置主机到IP地址的映射,各设备独立维护自己的映射表,而且只供本设备使用; 动态映射,建立一套域名解析系统(DNS),只在专门的DNS服务器上配置主机到IP地址的映射,网络上需要使用主机名通信的设备,首先需要到DNS服务器查询主机所对应的IP地址。 4.DHCP协议(动态主机配置协议,使用UDP协议工作) 动态主机配置协议(DHCP)是在TCP/IP网络上使计算机获得它所需要的所有配置信息的协议,不仅允许计算机快读动态地获取IP地址和子网掩码,还可以获取其他网络配置信息,如DSN服务器 DHCP采用UDP作为传输协议,DHCP服务器使用67号端口,客户机使用68号端口 5.SNMP协议(简单网络管理协议,使用UDP协议工作) 最早提出的网络管理协议,也是最早提出的网络管理协议,其前身是简单网关监控协议,用来对通信线路进行管理 简单网络管理协议(SNMP),由一组网络管理的标准组成,包含一个应用层协议(application layer protocol)、数据库模型(database schema)和一组资源对象。该协议能够支持网络管理系统,用以监测连接到网络上的设备是否有任何引起管理上关注的情况 6.UDP的通信过程 TFTP项目 1.TFTP协议介绍 ①TFTP(Trivial File Transfer Protocol,简单文件传输协议) ②是TCP/IP协议族中的一个用来在客户端与服务器之间进行简单文件传输的协议 ③特点: 简单 占用资源小 适合传递小文件 适合在局域网进行 传递端口号为69 基于UDP实现 2.TFTP下载过程 ①TFTP服务器默认监听69号端口 ②当客户端发送下载请求(即读请求)时,需要向服务器的69端口发送 ③服务器若批准此请求,则使用一个新的、临时的 端口进行数据传输 ④当服务器找到需要现在的文件后,会立刻打开文件,把文件中的数据通过TFTP协议发送给客户端 ⑤如果文件的总大小较大(比如3M),那么服务器分多次发送,每次会从文件中读取512个字节的数据发送过来 ⑥因为发送的次数有可能会很多,所以为了让客户端对接收到的数据进行排序,所以在服务器发送那512个字节数据的时候,会多发2个字节的数据,用来存放序号,并且放在512个字节数据的前面,序号是从1 开始的 ⑦因为需要从服务器上下载文件时,文件可能不存在,那么此时服务器就会发送一个错误的信息过来,为了区分服务发送的是文件内容还是错误的提示信息,所以又用了2个字节 来表示这个数据包的功能(称为操作码),并且在序号的前面 操作码 功能 1 读请求,即下载 2 写请求,即上传 3 表示数据包,即DATA 4 确认码,即ACK 5 错误 3.怎么完成下载 ①创建一个空文件 ②向里面写数据 ③关闭 4.什么样的情况下知道了服务器发送完毕 如果接收到的数据总长度小于516那么意味着 发送完毕 5.构造下载请求数据 cmd_buf=struct.pack("!H8sb5sb",1,"test.jpg",0,"octet",0) 解释:!表示大端格式组织(上网),H表示占用两个字节(帮1占坑),8s占用8个字节(帮test.jpg占坑),b占用一个字节(帮0占坑) TCP编程 1.TCP和UDP相关介绍 ①tcp:传输控制协议 ②特点:稳定 相对于udp而言,要慢一些 web服务器都是使用的tcp ③通信模型:udp通信模型中,在通信开始之前,一定要先建立相关的链接,才能发送数据,类似于生活中,"打电话" ④udp:用户数据报协议 ⑤特点:不稳定 适当比tcp要快一些 ⑥通信模型:udp通信模型中,在通信开始之前,不需要建立相关的链接,只需要发送数据即可,类似于生活中,"写信" 2.tcp服务器构建流程 ①socket创建一个套接字 ②bind绑定ip和port ③listen使套接字变为可以被动链接 ④accept等待客户端的链接 ⑤recv/send接收发送数据 ⑥如果接收到的客户端发送的数据长度为0,那么意味着客户端通过调用close下线 3.tcp客户端构建流程 ①如果想要完成一个tcp客户端的功能,需要的流程如下: ②socket创建一个套接字 ③连接connect服务器 ④send/recv接收和发送数据(不需要再填写地址了) ⑤关闭套接字 4.tcp特性总结 ①有序性:为每个数据包编排序号,使接收端能够判断先后到达的次序混乱的数据包的原本顺序 ②正确性:tcp用一个checksum函数来检验数据是否有错误,在发送和接收时都要计算校验和,这使得接收端能够判断数据是否在传输过程中被破坏 ③可靠性:发送端采用超时重传并有确认机制识别错误或丢失数据,进行重发 ④可控性:接收端和发送端的网络质量通常不同,tcp采用滑动窗口协议和拥塞控制算法使数据的发送速度达到合理值 5.C/S和B/S ①C/S,即client/server,是当前大多数网络编程所使用的架构模型,它可以将任务合理分配到client端和server端来实现,降低了系统的通信开销,它们常常处在相距很远的两台计算机上,client程序的任务是将用户的要求提交给server程序,再将server程序返回的结果以特定的形式显示给用户,server程序的任务是接收客户程序提出的服务请求,进行相应的处理,再将结果返回给客户程序 ②B/S,即Browser/Server,是web兴起后的一种网络架构模式,B/S实验web浏览器作为客户端的应用软件,所以B/S可以看作C/S的一种特殊情况,B/S架构是伴随因特网的兴起而兴起的,是对C/S的一种改进 ③如:Django、Tornado、和Flask均是以B/S架构为主要开发目标的框架,Twisted主要面向C/S架构系统 应用层协议 1.HTTP(超文本传输协议)默认使用TCP的80端口标识 2.FTP(文件传输协议)默认使用TCP的80端口标识 3.SMTP(简单邮件传输协议)默认使用TCP的25端口标识 4.POP3(邮局协议)默认使用TCP的110端口 5.HTTPS默认使用TCP的443端口 6.DNS使用UDP的53端口 7.远程桌面协议(RDP)默认使用TCP的3389端口 8.Telnet使用TCP的23号端口 9.windows访问共享资源使用TCP的445端口 网络常见问题 1.两台电脑之间能通信的前提是什么? 处在同一网段(网络号)内 2.多台电脑为什么不能把网线剪开链接在一起? 数据是通过电信号控制的,如果一起发送一起接收容易乱 3.链接多台电脑的hub(集线器)有什么作用? 实现多台电脑连接在一起,实现小型局域网 4.集线器和交换机的区别? 集线器收到的所有数据包都是以广播的形式发送,交换机有学习的功能,如果是已经通信过的,这些时候就不是广播 5.网络协议 ①ICMP:ping一个电脑 ②arp:获取一个电脑上的网卡号,就是mac地址(物理地址、硬件地址,数据链路层) ③rarp:根据mac地址找ip 6.把域名解析成ip地址的步骤,以百度为例 ①先要解析出baidu.com对应的ip地址 先知道默认网关的mac,使用arp获取默认网关的mac地址 组织数据发送给默认网关(ip还是dns服务器的ip,但是mac地址是默认网关的mac地址) 默认网关具有转发数据的能力,让数据转发给路由器 路由器根据自己的路由协议,来选择一个合适的较快的路径转发给目的网关 目的网关(dns服务器所在的网关),把数据转发给dns服务器 ②得到了baidu.com对应的ip地址后,会发送tcp的三次握手,进行连接 ③使用http协议发送请求数据给web服务器 ④web服务器收到数据请求之后,通过查询自己的服务器得到相应的结果,原路返回给浏览器 ⑤浏览器接收到数据后通过浏览器的自己的渲染功能来显示这个网页 ⑥浏览器关闭tcp连接,即4次挥手完成整个访问过程 Tcp常见问题 1.tcp三次握手 ①三次握手协议指的是在发送数据的准备阶段,服务器端和客户端之间需要进行三次交互 ②第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认 ③第二次握手:服务器收到syn包,必须确认客户的syn(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态 ④第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手 2.tcp四次挥手 ①TCP客户端发送一个FIN,用来关闭客户到服务器的数据传送。 ②服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。 ③服务器关闭客户端的连接,发送一个FIN给客户端。 ④客户端发回ACK报文确认,并将确认序号设置为收到序号加1。 3.tcp和udp的区别 在tcp中,如果有一方收到了方的数据,一定会发送ack确认包给发送方,而在udp中,没有这个过程,因此导致了tcp稳定,udp不稳定 4.tcp长连接和短连接 TCP短连接: ①client 向 server 发起连接请求 ②server 接到请求,双方建立连接 ③client 向 server 发送消息 ④server 回应 client TCP长连接: ①client 向 server 发起连接 ②server 接到请求,双方建立连接 ③client 向 server 发送消息 ④server 回应 client ⑤一次读写完成,连接不关闭 ⑥后续读写操作... ⑦长时间操作之后client发起关闭请求 TCP长/短连接的优点和缺点: ①长连接可以省去较多的TCP建立和关闭的操作,减少浪费,节约时间。对于频繁请求资源的客户来说,较适用长连接。 ②client与server之间的连接如果一直不关闭的话,会存在一个问题,随着客户端连接越来越多,server早晚有扛不住的时候,这时候server端需要采取一些策略,如关闭一些长时间没有读写事件发生的连接,这样可以避免一些恶意连接导致server端服务受损;如果条件再允许就可以以客户端机器为颗粒度,限制每个客户端的最大长连接数,这样可以完全避免某个蛋疼的客户端连累后端服务。 ③短连接对于服务器来说管理较为简单,存在的连接都是有用的连接,不需要额外的控制。 ④但如果客户请求频繁,将在TCP的建立和关闭操作上浪费时间和带宽。 5. tcp的十种状态 HTTP协议介绍 1.使用谷歌/火狐浏览器分析 在Web应用中,服务器把网页传给浏览器,实际上就是把网页的HTML代码发送给浏览器,让浏览器显示出来 HTML是一种用来定义网页的文本,会HTML,就可以编写网页 HTTP是在网络上传输HTML的协议,用于浏览器和服务器的通信 2.HTTP的请求方式 GET(获取数据) POST(修改数据) PUT(保存数据) DELETE(删除) OPTION(询问服务器的某种支持特性 HEAD(返回报文头) 3.浏览器解析过程 当浏览器读取到新浪首页的HTML源码后,它会解析HTML,显示页面,然后,根据HTML里面的各种链接,再发送HTTP请求给新浪服务器,拿到相应的图片、视频、Flash、JavaScript脚本、CSS等各种资源,最终显示出一个完整的页面。所以我们在Network下面能看到很多额外的HTTP请求 4. HTTP请求 步骤1:浏览器首先向服务器发送HTTP请求,请求包括: ①方法:GET还是POST,GET仅请求资源,POST会附带用户数据; ②路径:/full/url/path; ③域名:由Host头指定:Host: www.sina.com以及其他相关的Header; ④如果是POST,那么请求还包括一个Body,包含用户数据 步骤2:服务器向浏览器返回HTTP响应,响应包括: ①响应代码:200表示成功,3xx表示重定向,4xx表示客户端发送的请求有错误,5xx表示 服务器端处理时发生了错误; ②响应类型:由Content-Type指定; ③以及其他相关的Header; ④通常服务器的HTTP响应会携带内容,也就是有一个Body,包含响应的内容,网页的HTML ,源码就在Body中。 步骤3:如果浏览器还需要继续向服务器请求其他资源,如图片,就再次发出HTTP请求,重复步骤1、2 Web采用的HTTP协议采用了非常简单的请求-响应模式,从而大大简化了开发。当我们编写一个页面时,我们只需要在HTTP请求中把HTML发送出去,不需要考虑如何附带图片、视频等,浏览器如果需要请求图片和视频,它会发送另一个HTTP请求,因此,一个HTTP请求只处理一个资源(此时就可以理解为TCP协议中的短连接,每个链接只获取一个资源,如需要多个就需要建立多个链接) 为了分散服务器的压力,所以一个网站往往有多台服务器,比如一台存放图片,一台存放视频等 5.http格式 每个HTTP请求和响应都遵循相同的格式,一个HTTP包含Header和Body两部分,其中Body是可选的。 HTTP协议是超文本传输文本协议,所以,它的格式也非常简单 ①HTTP GET请求的格式 GET/pathHTTP/1.1 Header1:Value1 Header2:Value2 Header3:Value3 每个Header一行一个,换行符是\r\n。 ②HTTP POST请求的格式 POST/pathHTTP/1.1 Header1:Value1 Header2:Value2 Header3:Value3 bodydatagoeshere... 当遇到连续两个\r\n时,Header部分结束,后面的数据全部是Body ③HTTP响应的格式 200OK Header1:Value1 Header2:Value2 Header3:Value3 bodydatagoeshere... HTTP响应如果包含body,也是通过\r\n\r\n来分隔的。 ④Body的数据类型由Content-Type头来确定,如果是网页,Body就是文本,如果是图片,Body就是图片的二进制数据 6.服务器动态资源请求 WSGI ①怎么可以不修改服务器和架构代码而确保可以在多个架构下运行web服务器呢?答案就是 Python Web Server Gateway Interface (或简称 WSGI,读作wizgy) ②WSGI允许开发者将选择web框架和web服务器分开。可以混合匹配web服务器和web框架,选择一个适合的配对。比如,可以在Gunicorn 或者 Nginx/uWSGI 或者 Waitress上运行 Django, Flask, 或 Pyramid。真正的混合匹配,得益于WSGI同时支持服务器和架构 ③web服务器必须具备WSGI接口,所有的现代Python Web框架都已具备WSGI接口,它让你不对代码作修改就能使服务器和特点的web框架协同工作。 ④WSGI由web服务器支持,而web框架允许你选择适合自己的配对,但它同样对于服务器和框架开发者提供便利使他们可以专注于自己偏爱的领域和专长而不至于相互牵制。其他语言也有类似接口:java有Servlet API,Ruby 有 Rack 定义WSGI接口 WSGI接口定义非常简单,它只要求Web开发者实现一个函数,就可以响应HTTP请求。我们来看一个最简单的Web版本的Hello World! defapplication(environ,start_response): start_response('200OK',[('Content-Type','text/html')]) return'HelloWorld!' 上面的application()函数就是符合WSGI标准的一个HTTP处理函数,它接收两个参数: ①environ:一个包含所有HTTP请求信息的dict对象; ②start_response:一个发送HTTP响应的函数 整个application()函数本身没有涉及到任何解析HTTP的部分,也就是说,把底层web服务器解析部分和应用程序逻辑部分进行了分离,这样开发者就可以专心做一个领域了 application()函数必须由WSGI服务器来调用。有很多符合WSGI规范的服务器。而我们此时的web服务器项目的目的就是做一个极可能解析静态网页还可以解析动态网页的服务器,两个参数environ和start_response我们没法提供,返回的str也没法发给浏览器 FTP协议 1.文本传输协议FTP 提供在网络上的主机之间共享计算机程序或数据,向用户屏蔽不同主机中各文件存储系统的细节,以基于TCP采用面向连接的方式在客户和服务器之间提供可靠和高效的数据传输 2.FTP协议的工作原理 ①FTP工作在TCP/IP模型的应用层,采用TCP面向连接为文件数据的传输提供了可靠的报保证 ②FTP采用客户机-服务器模式,客户端需要安装FTP客户程序,服务器端需要启用FTP服务 ③FTP客户与服务器之间要建立双重连接,一是控制连接,使用TCP端口21,用来传输控制信息,一个是数据连接,使用TCP端口20,用于传递文件数据。FTP建立双重连接的原因在于FTP是一个交互式会话系统,客户端每次调用FTP,便于与服务器建立一个会话,会话以控制连接来维持,控制连接负责传输控制信息 ④Telnet程序是Internet上常用的远程登录工具,使用TCP端口23,其协议工作过程采用了选项协商的方式,Telnet采用的NVT ASCII字符集也用在其他的网络应用中

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册