计算机网络是指将地理位置不同的既有独立功能的多台计算机及其外部设备,通过通信线路链接起来,在网络操作系统、网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。
广域网 WAN (几十到几千公里)、城域网 MAN(5~50KM)、局域网 LAN(1km 左右)、个人 局域网 PAN(10 米左右)
网络性能参数:速率、带宽、吞吐量、时延、往返时间、信道利用率。
速率:数据的传送速率,单位是 Bit/s
带宽: 在计算机网络中,网络带宽表示单位时间内网络中某信道所能通过的 “最高 数据率”,单位为 bit/s
吞吐量: 表示在发送端与接收端之间实际的传送数据速率(bit/s)
时延: 指数据从网络的一端传送到另外一端所需的时间。
发送时延:是主机或路由器发送数据帧所需要的时间。公式为:数据帧长度 (bit)/ 发送速率(bit/s) 2
传播时延:是电磁波在信道中传播一定的距离需要花费的时间。公式为:信 道长度(m)/ 电磁波在信道上的传播速率(m/s)
处理时延:主机或路由器在收到分组时要花费一定的时间进行处理
排队时延:在分组进入路由器后要先在输入队列中排队等待处理
往返时间: 从发送方发送数据开始,到发送方收到来自接受方的确认,总共经历 的时间
信道利用率: 指某信道有百分之几的时间是有数据通过的 信道利用率并非越高越好,因为当利用率增大时,该信道引起的时延也就迅 速增加
网络协议是为计算机网络中进行数 据交换而建立的规则、标准或者说是约定的集合。
TCP/IP协议已经成为Internet中的“通用语 言”
模型示意图:

应用层:通过应用进程的交互来实现特定网络应用的问题。
运输层:解决进程之间基于网络的通信问题,
网络层:解决分组在多个网络上传输(路由)的问题。
数据链路层:解决分组在一个网络(或一段链路)上的传输问题。
物理层:解决使用何种信号来传输比特的问题。
示意图:
物理层的作用:计算机网络中的物理层就是要解决在各种传输媒体上传输比特0和1的问题。
物理层为数据链路层屏蔽屏蔽了各种传输媒体的差异,使数据链路层只需要考虑如何完成本层协议和服务,而不必考虑网络具体的传输媒体是什么。
物理层协议的主要任务:
物理层常见的设备
中继器:中继器,就是简单的信号放大器,信号在传输的过程中是要衰减的,中 继器的作用就是将信号放大,使信号能传的更远。
集线器:集线器,差不多就是个多端口的中继器,把每个输入端口的信号放大再 发到别的端口去,集线器可以实现多台计算机之间的互联,因为它有很多的端口,每 个口都能连计算机。
数据链路层在物理层提供的服务的基础上向网络层提供服务,其最基本的服务是将源 自网络层来的数据可靠地传输到相邻节点的目标机网络层
数据链路层的作用:
数据链路层在不可靠的物理介质上提供可靠的传输。该层的作用包括:物理地址寻 址(使用MAC协议)、数据的成帧、流量控制、数据的检错、重发等
链路(Link):就是从一个结点到相邻结点的一段物理线路,而中间没有任何其他的交换结点。
数据链路(Data Link):是指把实现通信协议的硬件和软件加到链路上,就构成了数据链路。
数据链路层的三个重要问题
封装成帧:数据链路层给网 络层协议数据单元添加一个数据链路层协议首部,简称为帧头,还要给其添加一个帧 尾,我们将数据链路层给网络层交付的协议数据单元,添加帧头和帧尾的操作,称为 封装成帧。
差错校验:以通过检错码来发现是否出现误码,发送方在 发送帧之前,基于待发送的数据和检错算法计算出检错码,并将其封装在帧尾.

可靠传输:接收方在收到有误码的帧后,是不会接受该帧的,将其丢弃,如果数据链路层向其上 层提供的是不可靠服务,那么丢弃就丢弃了,不会有更多的措施。反之,如果提供的 是可靠服务,那么就还需要其他措施,来确保接收方主机还可以重新收到被丢弃的这 个帧的正确副本。
数据链路层常见设备
网桥:网桥工作在数据链路层,将两个LAN连起来,根据MAC地址来转发 帧,可以看作一个“低层的路由器”。
交换机:交换机常常用来连接独立的计算机,而网桥连接的 目标是LAN,所以交换机的端口较网桥多。
网卡(适配器):重要功能(进行串行/并行转换; 数据封装与解封; 编码与译码; 链路管理,主要是CSMA/CD协议的实现。)
网络层的目的是实现两个端系统之间的数据透明传送,具体功能**包括寻址和路由选 择、连接的建立、保持和终止等。**将数据封装成包。
网络层的三个重要问题
网络层向运输层提供怎样的服务
是否可靠传输:数据包在传输的过程中可能出现误码,也有可能由于路由器繁忙而被路由器丢弃,还 有可能出现按序发送的包不能按序到达接收方。如果网络层对上述出现的错误不采取 任何措施,则提供的是不可靠传输服务,反之并使得接收方能正确接收发送方发送的 数据包,提供的是可靠传输服务。因特网使用的TCP/IP协议体系的网际 层,提供的是无连接的、不可靠的数据包服务。
网络寻址问题
TCP/IP协议体系的网际层使用IP地 址。
IP协议的主要功能有: 无连接数据报传输、数据报路由选择和差错控制。IP协议负责将数据报从源主机发送到目标主机,通过IP地址作为唯一 识别码。
路由选择问题
1、由用户或管理人员设置,适用于规模较小且网络拓扑不改变的小型互联网;
2、实现各种路由选择协议,由路由器执行路由选择协议中所规定的路由选择算法, 而自动得出路由表中的路由记录。适用于规模较大且网络拓扑经常改变的大型互联 网。
传输层负责将上层数据分段并提供端到端的、 可靠的或不可靠的传输。传输层还要处理端到端的差错控制和流量控制问题。利用网络资源,为两个端系统的会话层 之间,提供建立、维护和取消传输连接的功能,负责端到端的可靠数据传输。在这一 层,信息传送的协议数据单元称为段或报文。
传输层的重点
传输层负责将上层数据分段并提供端到端的、可靠的或不可靠的传输以及端到端 的差错控制和流量控制问题;
包含的主要协议:TCP协议(Transmission Control Protocol,传输控制协 议)、UDP协议(User Datagram Protocol,用户数据报协议);
网关:网关,通过字面意思解释就是网络的关口。从技术角度来解释,就是连 接两个不同网络的接口,比如局域网的共享上网服务器就是局域网和广域网的接口。
自动收发包,自动寻址。 会话层作用是「负责建立和断开通信连接」,何时建立,断开连接以及保持多久的连 接。常见的协议有 ADSP、RPC 等
解决「不同系统之间通信语法问题」,在表示层数据将按照网络能理解的方案进行格 式化,格式化因所使用网络的不同而不同。它主要负责数据格式的转换。具体来说,就是讲设备固有的数据格式转换为网络标准 格式。
为操作系统或网络应用程序提供访问网络服务的接口。规定发送方和接收方必须使用一个固定长度的消息头,消息头必须使用某种固定的组 成,消息头中必须记录消息体的长度等信息,方便接收方正确解析发送方发送的数 据。
第一次:客户向服务器发送连接请求段,建立连接请求控制段(SYN=1),表示传输 的报文段的第一个数据字节的序列号是x,此序列号代表整个报文段的序号 (seq=x);客户端进入 SYN_SEND (同步发送状态)
第二次:服务器发回确认报文段,同意建立新连接的确认段(SYN=1),确认序号字 段有效(ACK=1),服务器告诉客户端报文段序号是y(seq=y),表示服务器已经 收到客户端序号为x的报文段,准备接受客户端序列号为x+1的报文段 (ack_seq=x+1);服务器由LISTEN进入SYN_RCVD (同步收到状态)
第三次:客户对服务器的同一连接进行确认.确认序号字段有效(ACK=1),客户此次的 报文段的序列号是x+1(seq=x+1),客户期望接受服务器序列号为y+1的报文段 (ack_seq=y+1);当客户发送ack时,客户端进入ESTABLISHED 状态;当服务收到客户 发送的ack后,也进入ESTABLISHED状态;第三次握手可携带数据;
图示:
通俗理解三次握手:
第一次握手:客户发送请求,此时服务器知道客户能发;
第二次握手:服务器发送确认,此时客户知道服务器能发能收;
第三次握手:客户发送确认,此时服务器知道客户能收。
第一次挥手:处于连接状态的客户端和服务端都可以发起关闭连接请求,假设客户端主动发起连接关闭请求,需要向服务端发起一个FIN包,表示 要关闭连接,自己进入终止等待状态,
第二次挥手:服务端收到FIN包,发送一包ACK包,表示自己进入了关闭等待状态,客户端进入终 止等待2状态,
第三次挥手:服务端此时还可以发送未发送的数据,而客户端还可以接收数据,待服务端发送完数 据后,发送一包FIN包,进入最后确认状态,
可以发起关闭连接请求,假设客户端主动发起连接关闭请求,需要向服务端发起一个FIN包,表示 要关闭连接,自己进入终止等待状态,
第二次挥手:服务端收到FIN包,发送一包ACK包,表示自己进入了关闭等待状态,客户端进入终 止等待2状态,
第三次挥手:服务端此时还可以发送未发送的数据,而客户端还可以接收数据,待服务端发送完数 据后,发送一包FIN包,进入最后确认状态,
第四次挥手:客户端收到之后恢复ACK包,进入超时等待状态,经过超时时间后关闭连接,而服务 端收到ACK包后立即关闭连接。
这里是Ruby新手。完成一些练习后碰壁了。练习:计算一系列成绩的字母等级创建一个方法get_grade来接受测试分数数组。数组中的每个分数应介于0和100之间,其中100是最大分数。计算平均分并将字母等级作为字符串返回,即“A”、“B”、“C”、“D”、“E”或“F”。我一直返回错误:avg.rb:1:syntaxerror,unexpectedtLBRACK,expecting')'defget_grade([100,90,80])^avg.rb:1:syntaxerror,unexpected')',expecting$end这是我目前所拥有的。我想坚持使用下面的方法或.join,
我想在Ruby中创建一个用于开发目的的极其简单的Web服务器(不,不想使用现成的解决方案)。代码如下:#!/usr/bin/rubyrequire'socket'server=TCPServer.new('127.0.0.1',8080)whileconnection=server.acceptheaders=[]length=0whileline=connection.getsheaders想法是从命令行运行这个脚本,提供另一个脚本,它将在其标准输入上获取请求,并在其标准输出上返回完整的响应。到目前为止一切顺利,但事实证明这真的很脆弱,因为它在第二个请求上中断并出现错误:/usr/b
网络编程套接字网络编程基础知识理解源`IP`地址和目的`IP`地址理解源MAC地址和目的MAC地址认识端口号理解端口号和进程ID理解源端口号和目的端口号认识`TCP`协议认识`UDP`协议网络字节序socket编程接口`sockaddr``UDP`网络程序服务器端代码逻辑:需要用到的接口服务器端代码`udp`客户端代码逻辑`udp`客户端代码`TCP`网络程序服务器代码逻辑多个版本服务器单进程版本多进程版本多线程版本线程池版本服务器端代码客户端代码逻辑客户端代码TCP协议通讯流程TCP协议的客户端/服务器程序流程三次握手(建立连接)数据传输四次挥手(断开连接)TCP和UDP对比网络编程基础知识
1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,
Ⅰ软件测试基础一、软件测试基础理论1、软件测试的必要性所有的产品或者服务上线都需要测试2、测试的发展过程3、什么是软件测试找bug,发现缺陷4、测试的定义使用人工或自动的手段来运行或者测试某个系统的过程。目的在于检测它是否满足规定的需求。弄清预期结果和实际结果的差别。5、测试的目的以最小的人力、物力和时间找出软件中潜在的错误和缺陷6、测试的原则28原则:20%的主要功能要重点测(eg:支付宝的支付功能,其他功能都是次要的)80%的错误存在于20%的代码中7、测试标准8、测试的基本要求功能测试性能测试安全性测试兼容性测试易用性测试外观界面测试可靠性测试二、质量模型衡量一个优秀软件的维度①功能性功
项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU
ES一、简介1、ElasticStackES技术栈:ElasticSearch:存数据+搜索;QL;Kibana:Web可视化平台,分析。LogStash:日志收集,Log4j:产生日志;log.info(xxx)。。。。使用场景:metrics:指标监控…2、基本概念Index(索引)动词:保存(插入)名词:类似MySQL数据库,给数据Type(类型)已废弃,以前类似MySQL的表现在用索引对数据分类Document(文档)真正要保存的一个JSON数据{name:"tcx"}二、入门实战{"name":"DESKTOP-1TSVGKG","cluster_name":"elasticsear
我对如何计算通过{%assignvar=0%}赋值的变量加一完全感到困惑。这应该是最简单的任务。到目前为止,这是我尝试过的:{%assignamount=0%}{%forvariantinproduct.variants%}{%assignamount=amount+1%}{%endfor%}Amount:{{amount}}结果总是0。也许我忽略了一些明显的东西。也许有更好的方法。我想要存档的只是获取运行的迭代次数。 最佳答案 因为{{incrementamount}}将输出您的变量值并且不会影响{%assign%}定义的变量,我
给定一个nxmbool数组:[[true,true,false],[false,true,true],[false,true,true]]有什么简单的方法可以返回“该列中有多少个true?”结果应该是[1,3,2] 最佳答案 使用转置得到一个数组,其中每个子数组代表一列,然后将每一列映射到其中的true数:arr.transpose.map{|subarr|subarr.count(true)}这是一个带有inject的版本,应该在1.8.6上运行,没有任何依赖:arr.transpose.map{|subarr|subarr.in
给定两个大小相等的数组,如何找到不考虑位置的匹配元素的数量?例如:[0,0,5]和[0,5,5]将返回2的匹配项,因为有一个0和一个5共同;[1,0,0,3]和[0,0,1,4]将返回3的匹配项,因为0有两场,1有一场;[1,2,2,3]和[1,2,3,4]将返回3的匹配项。我尝试了很多想法,但它们都变得相当粗糙和令人费解。我猜想有一些不错的Ruby习惯用法,或者可能是一个正则表达式,可以很好地回答这个解决方案。 最佳答案 您可以使用count完成它:a.count{|e|index=b.index(e)andb.delete_at