【面试】对网络的了解

1.终端

终端跟服务器相对应,连接到服务器上的东西都叫做终端。

比如:

  • pc

  • 手机

  • IP电视

  • 空调

  • 冰箱

  • 电话

终端就是一个节点的意思,网络中有很多节点。

网络就是把各种终端连在一起,就成了网络。

那么问题来了?这么多各式各样的终端要怎么连?

2.终端连接方式(共同构成网络)

1.按拓扑结构分类

  • 总线型

  • 环形

  • 星型:中间是核心的节点

  • 网状

3.网络按覆盖范围分

  • 局域网LAN (作用范围一般为几米到几十公里) :家里的路由器

  • 城域网MAN(介于WAN与LAN之间)

  • 广域网WAN(作用范围一般为几十到几千公里):一般说的外网

4.网络按连接介质分

  • 无线

  • 有线

  • 光纤

5.网络按连接协议分

  • 手机

  • http

  • 。。。  

6.网络的历史

1.军方

战争造就网络,美国军方首先设计使用(分散的指挥系统)-----必须有一个个分散的指挥点组成,当部分只会点被摧毁

后其他带你仍能正常工作,而这些点又能通过某种形式的通讯网取得联系。(该理论类似于分布式)

后面,美国国防部某研究局开始建立一个命名为ARPAnet的网络,把美国几个军事及研究用电脑主机联接起来(只有4台),

此时并不具备向外推广的条件。

2.科技

美国某科学基金会利用ARPAnet发展出来的TCP/IP通讯协议,建立了NSFnet广域网。后很多大学,政府资助甚至私营研究机构

纷纷把自己的局域网并入到NSFnet中。那时,ARPAnet军用部分已脱离母网,建立自己的网络---MilnetARPAnet--网络之父,逐步被NSFnet所替代,到1990年,ARPAnet已退出历史舞台。如今NSFnet已成为Internet的重要骨干网之一。

3.后续发展

1989年,由CERN(欧洲核子研究组织)开发成功www,为Internet实现广域超媒体信息截取/检索奠定了基础。

4.商用

1991年6月,在连通Internet的计算机中,商业用户首次超过了学术界用户。21世纪,网络平台应用于电子商务领域,

网商成为潮流。

7.网络协议

网络协议有两种,一种叫做OSI七层参考模型,一种叫做TCP/IP四层应用模型。

OSI:一个标准组织,给出了一个七层参考模型,希望这样建立网络。

它说的这个协议包括整个参与网络的硬件也在其中。

1.OSI七层参考模型

  1. 物理层 (网线,网线接口,)

  2. 数据链路层(处理通过网线传过去的一个个字节)

  3. 网络层(确定IP地址)

  4. 传输层(处理怎么传?通常网络数据包是分块的,一块可能是多少K,64K应该是最大,比如一篇文章分成几块,再到那边合起来)

  5. 会话层

  6. 表达层

  7. 应用层

这只是OSI这个组织给出的一个标准,是希望被参考,但实际往往和标准有些出入。

2.TCP/IP四层应用模型

而现实中真正在用的就是这个TCP/IP四层应用模型。

这个四层的协议参考了七层的协议,最后把它变成四层,这四层分别包括以下模块:

  1. 网络接口层 (负责硬件,最底层的数据相关)

  2. Internet层(IP地址)

  3. 传输层(做传输控制)

  4. 应用层(http 比方说用http协议做网页)

3.TCP/IP四层应用模型细节

  1. 接口层(各种物理通信网络接口)

  2. 网络层(IP,ICMP,ARP,RARP)

  3. 传输层(TCPUDP

  4. 应用层(HTTP,DNS,FTP,SMTP,TELNET)  

8.TCP/IP协议传输说明

如果要从QQ1发送消息给QQ2,比如发送"你好"两个字。

发送端:

应用层:首先在应用层上qq(socket)这个软件,可能定义了一些格式作用在发送的消息"你好"上。

传输层:到了TCP层,tcp又会加一些自己的控制和数据,这样到了接收端才能区分出来。

网络层:到了IP层,tcp要知道传给哪个ip地址,于是把这个数据包又加上了ip,所以数据局变得越来越大了。

数据链路层:(偏物理)数据包是分成一块一块发的,这层又会给块加上帧头帧尾,一帧就是一块,加上并封装成一个一个小包。

其他:

然后传给网卡(qq1),网卡传给路由器(中间可能经过n个路由器),转到了qq2最近的路由器。

然后传给qq2的网卡。

接收端:

数据链路层:它的数据链路层收到了我们发过去的帧头帧尾,链路层根据帧头帧尾判断数据是不是完整的,然后把数据掐头去尾给IP层(网络层)。

网络层:IP层去掉数据的IP,剩下的给传输层。

传输层:传输层给到qq这个软件,软件拿到消息后,根据软件内定规则处理数据,即得到最终的数据"你好"。

整个解析过程像是加码解码。

示意图:

提出问题:

tcp怎么加码?ip怎么加码?dns怎么解析ip?

9.IP地址/IP协议

IP(Internet Protocol 网络之间互连的协议)

相当于网络中的一个节点,类似于地址,我们称之为IP地址,同一个网络中,IP地址具有唯一性。

1.IPv4

IPv4网络使用32位地址,以点分十进制表示,如192.168.0.1。

  • 127.0.0.1 本机

  • 192.168.*.* 局域网

  • 10.*.*.* 内部局域网

  • 其他:外部广域网

缺点:4个字节,32位地址来表示能表示的网络地址有限

怎么解决?

然后就出现了IPv6地址

2.IPv6

IPv6地址的128位(16个字节)写成8个16位的无符号整数,每个整数用四个十六进制位表示,这些书之间用冒号(:)分开

例如:3ffe:1401:1280:c8ff:fe4d:db39:1984

3.路由

路由:想去哪里(目标地址),那就先去哪个关口(gateway)

tips:这里不详细,稍后再翻阅资料

4.如何获得IP

IP分为:

  1. 静态IP

  2. 动态IP(DHCP)

一般手机上网,无线网肯定是动态IP。DHCP,一旦连到了一个局域网,会跟路由器申请要一个IP地址,路由器会动态的给他分配一个

IP地址。

也可以再路由器上设置不要动态IP,要静态IP分配,在路由器上可以分配一些IP地址给某些电脑。

10.TCP/UDP(传输层协议)

 传输层协议,主要由tcp和udp两个协议组成。它主要控制传输。tcp比较靠谱,而udp比较快一点。

1.TCP(传输控制协议)

全称:Transmission Control Protocol

  • 连接建立

  • 可靠性传输

  • 连接终止

简单地说,就是两点之间的可靠连接。

tcp协议有个著名的三次握手和四次挥手。

1.三次握手

三次握手其实不准确,官网文档使用“handshake”一词描述tcp建立整个连接的过程,所以说,建立整个tcp连接只握了一次手,所以日常中说的三次握手建立连接是不准确的。它说的三次是发送三个报文。所以可以说他是三报文握手。

建立tcp连接之前,客户机处于closed(关闭)的状态,服务器也是closed(关闭)的状态。客户机主动打开,向服务器

发送一次报文(SYN=1,seq[序列号]=x),它携带的信息是一个同步号为1,序列号为x,到达服务器。服务器被动打开了tcp连接之后,就主语监听状态。等待客户机发送第一次报文。收到之后,立刻向客户机发送一个确认的报文,这个报文头携带的信息是(SYN=1,ACK[确认位]=1,seq=y,ack=x+1)同步号是1,大写的ACK是,本次报文序列号是y,小写axk是x+1。在tcp连接中,大写ACK为1代表这个确认报文是有意义的,等于0则没有意义,可以忽略。小写ack代表确认位字段的值。客户端这边收到确认报文了。客户端再发送一次握手的报文给服务器端,这一次是来确认客户端是否收到了刚刚服务器发送的确认报文。这次的报文信息是(ACK=1,seq=x+1,ack=y+1),序列号是连续的代表客户机和服务端之间其他的连接。服务器端收到这次确认报文之后,那就建立连接好了,这样连接就建立好了。

问题:为什么客户端已经收到了服务器端已经发送的确认报文确认已经接收到了需要连接的请求,还是需要客户端再发一次确认刚刚收到服务端确认报文的报文?

答:因为第一次发送报文可能是失效的,不是说这个报文没有作用了,而是发送的过程中由于网络中的某种原因而导致这条报文发生滞留或阻塞,就停留在了网络中。但是tcp连接整个过程是有超时,重传这样的机制;所以客户机因为这些原因又去发送一遍,但是这次整个握手过程成功了,建立连接了。这个时候,刚刚滞留的那条连接突然又生效了,它到达服务器了,服务器收到了,给客户机发送确认报文,如果没有第三次确认报文的发送,那么tcp连接岂不是建立了。但是这条旧的连接我们已经不需要建立了,因为刚刚已经重传过了,所以会有第三次确认报文的发出。

三次握手示意图:

2.四次挥手

首先客户机主动关闭,关闭之前还是建立状态,客户机需要关闭tcp连接的时候,就发送一个报文给服务器端,这个报文携带

信息是(FIN=1,seq=u),服务器接收后知道客户机需要断开连接了。然后服务器端就发送一个确认报文(ACK=1,seq=v,ack=u+1)给到客户机,客户机收到确认报文后,这个时候,客户端到服务器端方向的tcp连接已经断开了。此时客户端已无法向服务器端发送其他任何的信息。但是服务器到客户端的方向的tcp还是可以连接的。

之后呢,服务器端又再次发送一个报文(FIN[挂关闭]=1,ACK=1,seq=w,ack=u+1)给到客户端,这里之所以seq为w不是v+1,是因为这时候服务端依然有报文向客户端发送,所以是不连续的。客户端接收后发送确认刚刚收到了服务器要关闭的报文的报文,这次报文携带的信息是(ACK=1,seq=u+1,ack=w+1)。

问题:最后一次报文都要关闭连接到了,为什么客户端要等待一定时间?

因为最后一次报文服务器端可能没有接收到,服务器就可能认为是不是我发送的通知关闭的报文是没发出去的,所以客户端才没有发送确认过来。那么服务端又发送一个关闭报文过来,如果不加这个等待时长,这条连接就关闭了。

示意图:

2.UDP(用户数据报协议)

全称:User Datagram Protocol

一种非连接,不可靠的传输方式。

优点:效率高,速度快,比较适合音频和视频

阐述udp建立连接过程:

不事先和服务器端沟通和握手,就直接发过去了,这样会比较快。

11.DNS,DHCP(应用层协议)

DNS,DHCP是应用层协议,应用层协议是非常多的

1.DNS

全称:Domain Name System 域名解析系统

在Internet上域名与IP地址是一一对应的。

域名虽便于人们记忆,但机器之间只能互相认识IP地址。

域名与IP地址之间的转换工作称为域名解析。

域名解析需要由专门的域名解析服务器来完成,DNS就是进行域名解析的服务器。

提问:dns解析ip地址的过程是怎样的?如何解析?

2.DHCP

全称:Dynamic Host Configuration Protocol 动态主机配置协议

阐述分配过程:

主机在网络广播,谁可以提供DHCP服务?

DHCP服务器收到后,先给临时IP。

主机就会给DHCP服务器发送请求,要求正式IP。

DHCP提供正式IP。

12.http(超文本传输协议)

全称:HyperText Transfer Protocol 超文本传输协议

http协议是基于tcp/ip协议来传递数据的。

http协议工作于客户端-服务端架构上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求

http默认端口号为80

1.http请求(request)

示意图:

对示意图进行阐述:

  1. 请求行(Request line):包括动词get,get什么(url),http协议的版本

  2. 请求头(Request Headers):

    第一行:Host 去哪请求,服务器的地址

    第二行:Accept:接收哪些东西

    第三行:Accept-Language 接收的语言有哪些

    第四行:Accept-Encoding 接收的编码

    第五行:User-Agent 浏览器版本

    第六行:Content-Length 发过去的内容有多长

  3. 空行

  4. 请求数据

http请求的特点:

  1. 无状态:协议对客户端没有状态存储,对事物处理没有记忆能力,比如访问一个网站需要反复进行登录操作。

  2. 无连接:http/1.1之前,由于无状态特点,每次请求需要通过tcp三次握手,四次挥手,和服务器重新建立连接。

    比如某个客户机在短时间多次请求同一个资源,服务器并不能区别是否已经响应过用户的请求,所以每次需要重新响应

    请求,耗费不必要的时间和流量。

  3. 基于请求和响应:这是基本的特性,由客户端发起请求,服务端响应。

  4. 通信使用明文,请求和响应不会对通信方进行确认,无法保护数据的完整性。

  5. 简单快速,灵活。

提问:http和https有什么区别?

  • http的url是http://开头的,https的url是https://开头的。

  • http是不安全,https是安全的。

  • http的端口是80,https的端口是443。

  • 在OSI网络模型中,http工作于应用层;而https的安全传输机制工作在传输层。

  • http明文传输,不能对传输内容进行加密;而https对传输的数据进行加密。

  • https需要CA机构(wosign)颁发的SSL证书。

网上解释:

超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加 密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,HTTP协议不适合传输一些敏感信 息,比如:信用卡号、密码等支付信息。

为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS,为了数据传输的安全,HTTPS在HTTP的基 础上加入了SSL/TLS协议,SSL/TLS依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。

HTTPS协议是由SSL/TLS+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全

HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。

个人总结:

http是超文本传输协议,https是安全套接字层超文本传输协议。由于http协议使用明文方式发送内容,不提供任何方式的数据加密,所以http不适合传输一些敏感信息,如信用卡号,密码等。为了解决这一缺陷,就使用了另一种协议,https协议,就是在http的基础上加入了SSL/TLS协议,SSL依靠证书来验证服务器的身份,并为浏览器之间的通信加密。所以https的主要作用可以分为两种,一种是建立一个信息安全通道,保证数据的安全;另一种就是确认网站的真实性。

2.http响应(response)

http响应示意图:

http response组成部分:

  1. 状态行(Status Line):http版本 http状态码

  2. 响应头(Response Headers):

    第一行:Date 时间 什么时候给的

    第二行:Server 服务器 什么服务器给的

    第三行:Last-Modified 最后一次修改时间

    第四行:ETag 暂不清楚

    第五行:Accept-Range 接收范围

    第六行:Content-Length 接收大小

    第七行:Connection 连接状态

    第八行:Content-Type 响应文本类型

  3. 空行

  4. 响应正文

3.http请求传参方式

两种方式

  • URL:?参数名1=参数值1&参数名2=参数值2

  • request Body

tips:这里缺一个http缓存的模块

4.http请求类型(动词)

http协议中共定义了八种方法或者叫“动作”来表明对 Request-URI 指定的资源的不同操作方式,具体介绍如下:

  • OPTIONS:返回服务器针对特定资源所支持的HTTP请求方法。也可以利用向Web服务器发送'*'的请求来测试服务器的功能性。

  • HEAD:向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以在不必传输整个响应内容的情况下,就可以获取包含在响应消息头中的元信息。

  • GET:向特定的资源发出请求。

  • POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的创建和/或已有资源的修改。

  • PUT:向指定资源位置上传其最新内容。

  • DELETE:请求服务器删除 Request-URI 所标识的资源。

  • TRACE:回显服务器收到的请求,主要用于测试或诊断。

  • CONNECT:HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。

虽然 HTTP 的请求方式有 8 种,但是我们在实际应用中常用的也就是 getpost,其他请求方式也都可以通过这两种方式间接的来实现。

13.常见响应状态码

200:ok/success 请求成功

301:Permanent 永久重定向,你要的东西换地方了,你应该去请求另外一个地方,会给你另外的地址让你请求

302:Temparary 临时重定向

404:Not Found 未找到资源

500:Server Error 服务器错误

503:Unavailable 暂时不可用 比如网站请求人数多,提示稍后再来

 示意图:

14.web服务器

web服务器是一个服务器端软件

可以把静态页面部署到web服务器上

web服务器通常只能运行静态网页

应用服务器可以运行动态页面

web服务器通常和应用服务器一起使用

web服务器请求示意图:

 web服务器与应用服务器一同使用示意图:

常用web服务器:

  • Apache :可以运行在linux,windows,Mac

  • IIS:Internet Information Server(网络信息服务),是微软主推的服务器,只能运行在windows电脑上

  • nginx:只能运行在linux/unix

这是我根据b站上找的一个视频看了之后写的一份关于网络的笔记,我的目的其实是在于面试中问到的http相关的问题,我想做一个比较彻底的了解。该笔记中一些截图来自于网络(三次握手/四次挥手),一些截图来自于b站上那个视频(其他)。 

有空我会贴一下那个视频的链接。

第二个就是,我发现这些理论知识真是容易忘,其实看完视频后,感觉非常通透,一周后,又记忆模糊。所以在这里也提出一个问题,这种理论知识要怎样才能持久化记忆?

我这里给出一个我认为有效的答案:练习将知识点口语化表达并进行串联(但是一个人的时候真的尴尬),所以想寻求下别的方式

猜你喜欢

转载自blog.csdn.net/THcoding_Cat/article/details/108898856