网络通信面试知识点总结:

 

1.一个Http请求的流程:

        DNS域名解析 –> 发起TCP的三次握手 –> 建立TCP连接后发起http请求 –> 服务器响应http请求,浏览器得到html代码 –> 浏览器解析html代码,并请求html代码中的资源(如javascript、css、图片等) –> 浏览器对页面进行渲染呈现给用户

--->在浏览器中输入www.baidu.com后执行的全部过程:

(1) 浏览器获取输入的域名www.baidu.com

(2) 浏览器向DNS请求解析www.baidu.com的IP地址

(3) 域名系统DNS解析出百度服务器的IP地址

(4) 浏览器与该服务器建立TCP连接(默认端口号80)

(5) 浏览器发出HTTP请求,请求百度首页

(6) 服务器通过HTTP响应把首页文件发送给浏览器

(7) TCP连接释放

(8) 浏览器将首页文件进行解析,并将Web页显示给用户。

 

涉及到的协议:

(1) 应用层:HTTP、DNS

(2) 传输层:TCP、UDP

(3)网络层:IP(IP数据数据包传输和路由选择),ICMP(提供网络传输过程中的差错检测),ARP(将本机的默认网关IP地址映射成物理MAC地址)

 

2.Session和Cookie的原理和区别

     参考:https://www.xuebuyuan.com/3238971.html

        Cookie,是指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。由服务端生成的,发送给客户端(通常是浏览器)的。Cookie总是保存在客户端中。

        Session代表服务器与浏览器的一次会话过程,这个过程是连续的,也可以时断时续的。Session是一种服务器端的机制,Session 对象用来存储特定用户会话所需的信息。由服务端生成,保存在服务器的内存、缓存、硬盘或数据库中。

 

区别:

 1、session保存在服务器,客户端不知道其中的信息;cookie保存在客户端,服务器能够知道其中的信息。  

  2、session中保存的是对象,cookie中保存的是字符串。     

  3、session不能区分路径,同一个用户在访问一个网站期间,所有的session在任何一个地方都可以访问到。而cookie中如果设置了路径参数,那么同一个网站中不同路径下的cookie互相是访问不到的。

 

        如果客户端禁用cookie,会使用URL重写技术进行会话跟踪;同一用户从同一系统中同时打开多个相同的页面,会共享session,如果修改,会覆盖。

        浏览器第一次请求服务器时,服务器会生成一个sessionId,并返回给浏览器,这个sessionId会被保存在浏览器的会话cookie中。在浏览器不关闭的情况下,之后的每次请求请求头都会携带这个sessionId到服务器。session在服务器的默认有效时间是30分钟,可以通过3种方式去设置session的过期时间。当sessionid 过期,服务器会生成一个新的sessionId返回给浏览器,并替换掉cookie中之前的sessionId,浏览器再次请求,cookie就会携带新的sessionId到服务器。通过sessionId我们可以做登陆过期,会话期间无需二次登陆等功能。

 

3.HTTP状态码:

     消息(1字头):指定客户端应相应的某些动作,代表请求已被接受,需要继续处理。

      成功(2字头):200状态码:表示请求已成功,请求所希望的响应头或数据体将随此响应返回;201状态码:表示请求成功并且服务器创建了新的资源,且其 URI 已经随Location 头信息返回;202状态码:服务器已接受请求,但尚未处理

      重定向(3字头):301状态码:被请求的资源已永久移动到新位置。服务器返回此响应时,会自动将请求者转到新位置;302状态码:请求的资源临时从不同的URI响应请求,但请求者应继续使用原有位置来进行以后的请求;304:自从上次请求后,请求的网页未修改过。服务器返回此响应时,不会返回网页内容。

      请求错误(4字头):401状态码:请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应;403状态码:服务器已经理解请求,但是拒绝执行它;404状态码:请求失败,请求所希望得到的资源未被在服务器上发现。

       服务器错误(5、6字头):500状态码:服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理;503状态码:由于临时的服务器维护或者过载,服务器当前无法处理请求。

 

4.TCP三次握手和四次挥手的全过程:

         三次握手 ----1.客户端发送syn包(syn=x)到服务器,并进入SYN_SEND状态;2.服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(syn=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;3.客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

 

         四次挥手 ---- 1:主动关闭方发送一个FIN,用来关闭主动方到被动关闭方的数据传送 ;2:被动关闭方收到FIN包后,发送一个ACK给对方,确认序号为收到序号+1;3:被动关闭方发送一个FIN,用来关闭被动关闭方到主动关闭方的数据传送;4:主动关闭方收到FIN后,发送一个ACK给被动关闭方,确认序号为收到序号+1,至此,完成四次挥手。

 

--->为什么客户端在TIME-WAIT状态必须等待2MSL的时间?

1)为了保证客户端发送的最后一个ACK报文段能够达到服务器。 

2)防止已失效的连接请求报文段出现在本连接中。

 

--->握手为什么是3次不是2次?

三次握手主要是为了防止已失效的连接请求报文突然到达服务器,造成服务器的等待和资源的浪费。

 

--->挥手为什么是4次不是3次?

建立连接的时候, 服务器在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。而关闭连接时,服务器收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,而自己也未必全部数据都发送给对方了,所以己方可以立即关闭,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接,因此,己方ACK和FIN一般都会分开发送,从而导致多了一次。

 

--->如果已经建立了连接,但是客户端突然出现故障了怎么办?

TCP还设有一个保活计时器,服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75分钟发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。

 

 

5.分层模型:

     OSI分层(7层):物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。

     TCP/IP分层(4层):网络接口层、 网际层、运输层、 应用层。

      五层协议 (5层):物理层、数据链路层、网络层、运输层、 应用层。

 

每一层的协议、作用如下:

物理层:通过媒介传输比特,确定机械及电气规范(比特Bit):RJ45、CLOCK、IEEE802.3 (中继器,集线器)

数据链路层:将比特组装成帧和点到点的传递(帧Frame):PPP、FR、HDLC、VLAN、MAC (网桥,交换机)

网络层:负责数据包从源到宿的传递和互连(包Package):IP、ICMP、ARP、RARP、OSPF、IPX、RIP、IGRP、(路由器)

传输层:提供端到端的可靠报文传递和错误恢复(段Segment):TCP、UDP、SPX

会话层:建立、管理和终止会话(会话协议数据单元SPDU):NFS、SQL、NETBIOS、RPC

表示层:对数据进行翻译、加密和压缩(表示协议数据单元PPDU):JPEG、MPEG、ASII

应用层:允许访问OSI环境的手段(应用协议数据单元APDU):FTP、DNS、Telnet、SMTP、HTTP、WWW、NFS

 

https://blog.csdn.net/ns_code/article/details/30109789

      IP分片的原因是MTU,最大传输单元,IP数据报的分片与重组是在网络层进完成的。TCP分段的原因是MSS,最大分段大小,TCP报文段的分段与重组是在运输层完成的。由于一直有MSS<=MTU,分段后的每一段TCP报文段再加上IP首部后的长度不可能超过MTU,因此也就不需要在网络层进行IP分片了。因此TCP报文段很少会发生IP分片的情况。

       IP数据报分片后,只有第一片带有UDP首部或ICMP首部,其余的分片只有IP头部,到了端点后根据IP头部中的信息再网络层进行重组。而TCP报文段的每个分段中都有TCP首部,到了端点后根据TCP首部的信息在传输层进行重组。IP数据报分片后,只有到达目的地后才进行重组,而不是向其他网络协议,在下一站就要进行重组。

 

6.TCP和UDP的区别:

1.TCP提供面向连接的、可靠的数据流传输,传输速度慢,而UDP提供的是非面向连接的、不可靠的数据流传输,传输速度快;

2.TCP面向字节流,UDP面向报文;

3.TCP有流量控制和拥塞控制,保证数据正确性及数据顺序,UDP可能丢包,不保证数据顺序。

4.UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性有较高要求的通信系统中;

5.TCP连接只能是点到点,UDP支持一对一,一对多,多对一,多对多的交互通信

 

实现TCP的可靠传输有以下机制:

1、应用数据被分割成TCP认为最适合发送的数据块。这和UDP完全不同,应用程序产生的数据报长度将保持不 变。 (将数据截断为合理的长度)

2、超时重发:当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。

3、TCP给发送的每一个包进行编号,接收方对数据包进行排序,把有序数据传送给应用层。

4、校验和:TCP将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP将丢弃这个报文段 和不确认收到此报文段。

5、TCP的接收端会丢弃重复的数据。

6、流量控制: TCP的流量控制是利用滑动窗口机制实现的,接收方在返回的ACK中会包含自己的接收窗口的大小,以控制发送方的数据发送。但是当某个ACK报文丢失了,就会出现A等待B确认,并且B等待A发送数据的死锁状态。为了解决这种问题,TCP引入了持续计时器(Persistence timer),当A收到rwnd=0时,就启用该计时器,时间到了则发送一个1字节的探测报文,询问B是很忙还是上个ACK丢失了,然后B回应自身的接收窗口大小,返回仍为0(A重设持续计时器继续等待)或者会重发rwnd=x。

7、拥塞控制。 当网络拥塞时,减少数据的发送。常用方法:慢启动(2倍增加方式来增大拥塞窗口cwnd)、拥塞避免(在一个时间往返RTT一次只增加1的方式更加缓慢的增大拥塞窗口)、快速重传(接受方连续给发送方发出3个重复的ACK)、快恢复(更改cwnd的值为ssthresh一半,再执行拥避免算法,缓慢的增大拥塞窗口)。

 

TCP对应的协议: FTP(21)、Telnet(23)、SMTP(25)、POP3(110)、HTTP(80)

UDP对应的协议: DNS(53)、SNMP(161)、TFTP(69)、DHCP、NFS、RIP。

 

7.IP地址的分类:

       IP地址由两部分组成,即网络地址和主机地址。网络地址表示其属于互联网的哪一个网络,主机地址表示其属于该网络中的哪一台主机。二者是主从关系。

A类地址:(1.0.0.0 - 126.0.0.0);

B类地址:(128.0.0.0 - 191.255.255.255);

C类地址:(192.0.0.0 - 223.255.255.255);

D类地址用于多点广播,供特殊协议向选定的节点发送信息时用;

E类地址为保留地址;

 

8.各种协议:

ICMP协议: 因特网控制报文协议。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。

TFTP协议: 是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。

HTTP协议: 超文本传输协议,是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。

DHCP协议: 动态主机配置协议,是一种让系统得以连接到网络上,并获取所需要的配置参数手段。

NAT协议:网络地址转换属接入广域网(WAN)技术,是一种将私有(保留)地 址转化为合法IP地址的转换技术;

FTP协议: 是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。

 

9.ARP:地址解析协议:

1 首先,每个主机都会在自己的ARP缓冲区中建立一个ARP列表,以表示IP地址和MAC地址之间的对应关系。

2 当源主机要发送数据时,首先检查ARP列表中是否有对应IP地址的目的主机的MAC地址,如果有,则直接发送数据,如果没有,就向本网段的所有主机发送ARP数据包,该数据包包括的内容有:源主机IP地址,源主机MAC地址,目的主机的IP地址;

3 当本网络的所有主机收到该ARP数据包时,首先检查数据包中的IP地址是否是自己的IP地址,如果不是,则忽略该数据包,如果是,则首先从数据包中取出源主机的IP和MAC地址写入到ARP列表中,如果已经存在,则覆盖,然后将自己的MAC地址写入ARP响应包中,告诉源主机自己是它想要找的MAC地址

4 源主机收到ARP响应包后。将目的主机的IP和MAC地址写入ARP列表,并利用此信息发送数据。如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。广播发送ARP请求,单播发送ARP响应。

 

10.DNS域名系统,简单描述其工作原理:

  当DNS客户机需要在程序中使用名称时,它会查询DNS服务器来解析该名称。客户机发送的每条查询信息包括三条信息:指定的DNS域名,指定的查询类型,DNS域名的指定类别。基于UDP服务,端口53. 该应用一般不直接为用户使用,而是为其他应用服务,如HTTP,SMTP等在其中需要完成主机名到IP地址的转换。

 

11.交换机与路由器有什么区别:

①工作所处的OSI层次不一样,交换机工作在OSI第二层数据链路层,路由器工作在OSI第三层网络层

②寻址方式不同:交换机根据MAC地址寻址,路由器根据IP地址寻址

③转发速不同:交换机的转发速度快,路由器转发速度相对较慢。

 

12.HTTP1.0 HTTP 1.1 HTTP 2.0主要区别:

HTTP1.0与HTTP 1.1的主要区别 :

长连接:HTTP 1.0需要使用keep-alive参数来告知服务器端要建立一个长连接,而HTTP1.1默认支持长连接。

节约带宽: HTTP 1.1支持只发送header信息(不带任何body信息),如果服务器认为客户端有权限请求服务器,则返回100,否则返回401。客户端如果接受到100,才开始把请求body发送到服务器,这样当服务器返回401的时候,客户端就可以不用发送请求body了,节约了带宽。

host域: HTTP1.0是没有host域的,HTTP1.1才支持这个参数。web server上的多个虚拟站点可以共享同一个ip和端口。

 

HTTP1.1与HTTP 2.0的主要区别:

多路复用:HTTP2.0使用了多路复用的技术,做到同一个连接并发处理多个请求,而且并发请求的数量比HTTP1.1大了好几个数量级。

二进制分帧:在应用层(HTTP/2)和传输层(TCP or UDP)之间增加一个二进制分帧层,改进传输性能;

首部压缩:HTTP1.1不支持header数据的压缩,HTTP2.0使用HPACK算法对header的数据进行压缩,这样数据体积小了,在网络上传输就会更快。

服务器推送:服务端推送是一种在客户端请求之前发送数据的机制。在 HTTP/2 中,服务器可以对客户端的一个请求发送多个响应。web server请求数据的时候,服务器会顺便把一些客户端需要的资源一起推送到客户端,免得客户端再次创建连接发送请求到服务器端获取。这种方式非常合适加载静态资源。

 

13.防止表单重复提交的策略:

       点击提交按钮两次、点击刷新按钮、使用浏览器后退按钮重复之前的操作、使用浏览器历史记录重复提交表单、浏览器重复的HTTP请求都会造成表单的重复提交。

      解决方案:1) 通过提交后禁用提交按钮; 2) 生成一个令牌保存在用户session中,在form中加一个hidden域,显示该令牌的值,form提交后重新生成一个新的令牌,将用户提交的令牌和session 中的令牌比较,如相同则是重复提交; 3) 设置一个表单提交后重定向,提交成功后,跳转到成功信息页面。4)接口幂等性: 无论多少次操作,结果都一样。HTTP GET方法就是幂等的,而POST方法不是幂等的,数据库操作中,select、delete操作时天然的幂等性,对于更新操作,可以使用添加version来保证幂等,对于新增数据,可以通过添加唯一索引或者联合索引的方式来实现幂等操作。

 

14.http请求头与相应头:

 

常用请求头:

Accept:浏览器能够处理的内容类型

Accept-Charset:浏览器能够显示的字符集

Accept-Encoding:浏览器能够处理的压缩编码

Accept-Language:浏览器当前设置的语言

Connection:浏览器与服务器之间连接的类型

Cookie:当前页面设置的任何Cookie

Host:发出请求的页面所在的域

Referer:发出请求的页面的URL

User-Agent:浏览器的用户代理字符串

 

HTTP响应头部信息:

Date:表示消息发送的时间,时间的描述格式由rfc822定义

server:服务器名字。

Connection:浏览器与服务器之间连接的类型

content-type:表示后面的文档属于什么MIME类型

Cache-Control:控制HTTP缓存

 

15.长连接、短连接:

         短连接:客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。像WEB网站的http服务一般都用短链接。

        长连接:当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。多用于操作频繁,点对点的通讯,而且连接数不能太多情况

 

 

16.HTTP请求方法:

    HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。

    HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。

 

没有更多推荐了,返回首页