1.背景
在测试过程中,出现的问题,除了代码问题,还有很多的网络问题,所以需要了解网络知识,这样能发现网络问题,尽快解决就能提高效率。
2.计算机网络体系结构
OSI七层模型:物理层,数据链路层,网络层,传输层,会话层,表示层,应用层。
OSI七层模型只是理想的,实际实现的只有4层。
3.TCP/IP协议(传输控制协议/因特网互联协议)
由网络层的IP协议和传输层的TCP协议组成,协议采用了4层的层级结构,也就是说实际上实现了链路层,网络层,传输层,应用层。
测试的过程中我们重点关注的是网络层和应用层。网络层IP,应用层HTTP,DNS是我们接触到最多的。
4.应用层协议(简单了解)
-
TFTP(Trivial File Transfer Protocol,简单文件传输协议)
用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。端口号为69。TFTP是一个传输文件的简单协议,它基于UDP协议而实现,但是我们也不能确定有些TFTP协议是基于其它传输协议完成的。此协议设计的时候是进行小文件传输的。比如当需要将程序或者文件同时向许多机器下载时就往往需要使用到TFTP协议。 -
HTTP(Hyper Text Transfer Protocol,超文本传输协议)
是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII形式给出;而 [9] 消息内容则具有一个类似MIME的格式。 -
SNMP(Simple Network Management Protocol,简单网络管理协议)
SNMP 使网络管理员能够管理网络效能,发现并解决网络问题以及规划网络增长。通过 SNMP 接收随机消息(及事件报告)网络管理系统获知网络出现问题。SNMP是管理进程(NMS)和代理进程(Agent)之间的通信协议。 -
FTP(File Transfer Protocol,文件传输协议)
FTP允许用户以文件操作的方式(如文件的增、删、改、查、传送等)与另一主机相互通信,使用 TCP 传输。然而, 用户并不真正登录到自己想要存取的计算机上面而成为完全用户, 可用FTP程序访问远程资源, 实现用户往返传输文件、目录管理以及访问电子邮件等等, 即使双方计算机可能配有不同的操作系统和文件存储方式。比如,在大学时期,老师会在他自己的电脑建一个ftp,然后将ftp地址给学生,让学生将作业上传到ftp,老师就可以批阅。 -
SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)
SMTP是一种提供可靠且有效的电子邮件传输的协议。SMTP是建立在FTP文件传输服务上的一种邮件服务,主要用于系统之间的邮件信息传递,并提供有关来信的通知。 -
DNS(Domain Name System,域名系统)
它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS使用UDP端口53。当前,对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。比如访问www.baidu.com,这是个域名,方便人们记忆,实际映射的是一个ip,IP不便于人们记忆。 -
Telnet
是Internet远程登录服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。在终端使用者的电脑上使用telnet程序,用它连接到服务器。终端使用者可以在telnet程序中输入命令,这些命令会在服务器上运行,就像直接在服务器的控制台上输入一样。可以在本地就能控制服务器。要开始一个telnet会话,必须输入用户名和密码来登录服务器。Telnet是常用的远程控制Web服务器的方法。
应用层的这些协议没有谁更厉害,只是在不同的场景使用不同的协议,就像有的护肤品适合干性皮肤,有的适合油性皮肤。
5.传输层协议(理解端口号)
-
TCP
是面向连接的、可靠的流协议,通过三次握手建立连接,通讯完成时要拆除连接。 -
UDP
是面向无连接的通讯协议,UDP通讯时不需要接收方确认,属于不可靠的传输,可能会出现丢包现象。
TFTP协议使用的UDP传输,HTTP,FTP,SMTP使用TCP传输。
传输层是通过端口号,端口号用来识别同一台计算机中进行通信的不同应用程序。因此,它也被称为程序地址。
通俗来说,端口号表示计算机里面的一个app,由于计算机里面有很多app,那服务器要把信息传给哪个app呢,就是通过端口号识别的,我们把每个app都设置一个端口号。
下面的图是重点记住的知识点
6.网络层协议(简单了解)
- IP(Internet Protocol,网际互连协议)
它可以向传输层提供各种协议的信息,例如TCP、UDP等;对下可将IP信息包放到链路层,通过以太网、令牌环网络等各种技术来传送。 - ICMP(Internet Control Message Protocol,=控制报文协议)
用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。 - RIP(Routing Information Protocol,路由信息协议)
是基于距离矢量算法的路由协议,利用跳数来作为计量标准。在带宽、配置和管理方面要求较低,主要适合于规模较小的网络中。 - OSPF(Open Shortest Path First,路由协议)
OSPF适合在大范围的网络:OSPF协议当中对于路由的跳数,它是没有限制的,所以OSPF协议能用在许多场合,同时也支持更加广泛的网络规模。只要是在组播的网络中,OSPF协议能够支持数十台路由器一起运作。
7.三次握手和四次挥手
- 客户端与服务端传输数据—三次握手
首先要连接起来,然后再传数据。
《三次握手》的故事:
客户端:服务器,我有请求的能力,可以连接吗?(伸手)
服务器端:客户,我有接收消息和回复的能力,快来连上。(伸手)
客户端:好勒,连上成功。(握手)
传输层的TCP协议需要三次握手。
- 客户端与服务端断开联系—四次挥手
《四次挥手》的故事:
旁白:客户端和服务端信息交流结束,到了要分开的时候了。
客户端:服务器,我走了,可以吗?(示意挥手)
服务器端:你等我一下,我还没忙完。(示意稍等)
旁白:一会儿,服务器端忙完,于是去告诉客户端。
服务器端:我忙完了,你走吧,我先下线了。(示意挥手并收回手)
客户端:好的,那我走了。(示意挥手并收回手)
客户端等了一会儿消息,由于服务器下线了,没有回复客户端,于是客户端也下线了。
这个请求头里面的字段Connection: keep-alive。意思就是保持客户端和服务器端连接,不要断开,否则,服务器在一段时间没有得到请求,就会断开,用户再操作的时候又要建立连接。
8.TCP/IP中的数据包
TCP首部:源IP端口号,目标IP端口号。
IP首部:源IP地址,目标IP地址,传输协议TCP
以太网包首部:里面有MAC地址,每台手机或电脑都有MAC地址来标识。查询手机电脑的MAC地址方法
场景:用户A给用户B发送信息
9.HTTP请求
- HTTP请求的传输过程。
- HTTP 报文结构
报文结构:报文首部,空行,报文主体。
报文格式:请求报文,响应报文
报文首部:服务器端或客户端需处理的请求或响应的内容及属性。在客户端和服务器处理时起至关重要作用的信息几乎都在这里。
空行:回车符,换行符
报文主体:应被发送的数据。所需要的用户和资源的信息都在这里。
(1)请求报文结构:请求行,请求头部,回车换行,请求数据
方法 | 内容 |
---|---|
Get:从服务器端获取资源或数据。 | a.Get请求一般用于向服务器请求获取一个资源,没有副作用,一般会在客户端做缓存。b.Get请求发送数据的时候,一般会将请求数据放在url字符串中发送给服务器端,所以从安全性角度来看相对没有Post请求安全性搞,所以get请求一般不会用于比较隐私数据的传输。 |
Post:向服务器端提交数据 | a.Post请求一般用于向服务器提交数据并让其去完成一件事,所以这个操作是有副作用的,不会在客户端做缓存。b.Post请求时将请求数据放在请求体body里面,所以一般用于表单数据,登录数据等数据的传输。 |
(2)响应报文结构:状态行,响应头部,回车换行,消息体
响应状态码:1,2,3开头的状态码都表示没问题,只需要等服务器即可。4开头的状态码就是客户端错误,看看客户端请求数据是否有问题,5开头的状态码就是服务器端出现错误。
常见状态码 | 含义 | 解决方案 |
---|---|---|
404 | (Not Found)服务器无法找到请求的页面或资源。 | a.此类报错首先考虑我们的接口写的是否正确。b.其次可以检查资源的路径是否出错。 |
405 | (Method Not Allowed )方法不允许,方法禁用。 | a.一般出现在servlet中比较常见.就是自己的service函数写错了。b.方法名称写错,方法参数类型与标准不一致。c.方法异常、返回值类型与标准不一致。(这一般是前台的问题,我们的解决方案是:把post请求换成get请求) |
500 | (Internal Server Error) 服务器内部错误,不能完成客户的请求。 | a.500报错一般是后端服务器问题,但也不排除前端出错,例如后台报序列化错误,可能是因为前端没有设置content-Type=application/json。b.重要的是要查看自己写的后端业务逻辑代码有没有问题,根据报错提示查找bug。c.常见的错误位置:NullPointException,据库中提取的数据没有提取到而给另一个对象,传递了空值或注入某个对象,过程中出现空值.,没有正确获取到对象的而出现异常。 |
501 | ( Not Implemented)尚未实施,或请求格式错误。 | a.一般考虑我们前端写的ajax中的type:"post/get"是否出错或者from表单中的method:"post/get"是否书写错误 |
- HTTP工作过程
浏览器输入
dns域名解析:域名与IP映射(第一次访问去DNS找对应IP,不是第一次访问则本机存有IP)
建立tcp连接(三次握手)
发送http request:请求信息
web服务器接收请求
应用服务器处理业务逻辑
关闭tcp连接:请求响应完成。如果浏览器在其头部信息中加入了connection:keep-alive,则tcp连接将任然保持打开状态。
浏览器:渲染响应页面
10.网络联通问题
-
查看源ip地址目的IP地址是否联通
如果源ip地址是本机,在cmd命令里面输入:ping 目的IP地址
如果源ip地址不是本机,用ip连接工具,如用MobaXterm连接源IP地址,然后命令里面输入:ping 目的IP地址
-
查看源ip地址与目的ip地址里面的应用(比如app)是否联通
输入命令: telnet IP地址 端口号
有时候两个ip联通了,但是目的ip地址的应用没有对外开放,导致源ip地址不能访问。
如果网络没联通,需要开通网策(即越过防火墙),或者开白名单(即授权使用)。