希望通过自己做的这个总结,面试全过,笔试全AC哈哈哈哈哈哈

计算机网络体系

分层体系结构

物理层:通过媒介来传输比特流集线器,中继器
数据链路层:将比特组装成帧和点到点的传递交换机
网络层:负责数据包从源主机到目的主机的传递和网际互连路由器
传输层:为应用进程提供端到端的报文通信和差错检测网关
会话层:建立、管理和终止会话(会话协议数据单元SPDU)
表示层:对数据进行翻译、加密和压缩(表示协议数据单元PPDU)
应用层:允许访问OSI环境的手段(应用协议数据单元APDU)
应用层:为应用进程之间的通信确立规范。

访问一个网页的全流程

现在假设如果我们在客户端(客户端)浏览器中输入http://www.baidu.com,而baidu.com为要访问的服务器(服务器),下面详细分析客户端为了访问服务器而执行的一系列关于协议的操作:

1, 在应用层,客户端浏览器通过域名解析协议(DNS)将网址解析为Ip地址220.181.27.48,(通过这个ip地址来寻找客户端到服务端的路径),客户端浏览器发起一个HTTP会话,交给传输层处理

2, 在运输层,客户端的传输层将http会话请求分成tcp报文段,添加源端口和目的端***给网络层

3, 在网络层,客户端网络层不关心传输层和应用层,只是向上提供简单的,无连接的,尽最大努力交付的数据报服务,主要工作是通过查找路由表确定如何到达服务器。具体点到点的通信交给数据链路层

4, 在数据链路层,包通过链路层发送到路由器,通过邻居协议查找给定IP地址的MAC地址,然后发送ARP请求查找目的地址,如果得到回应后就可以使用ARP的请求应答交换的IP数据包现在就可以传输了,然后发送IP数据包到达服务器的地址。

5, 在物理层被封装成比特流传送

应用层考点

域名解析协议过程

1,主机向本地域名服务器的查询采用递归查询。如果主机所询问的本地域名服务器不知道所要解析的目的域名ip地址,那么本地域名服务器就以DNS客户的方式(代理主机进行查询)代替主机向其他根域名服务器继续发出查询请求报文,而不是让主机自己进行下一步查询。

2, 本地域名服务器采用迭代查询。它先向一个根域名服务器查询

3, 根域名服务器告诉本地域名服务器,下一次应查询的顶级域名服务器的ip地址

4, 本地域名服务器向顶级域名服务器查询

5, 顶级域名服务器告诉本地域名服务器,下一次应查询的权限域名服务器的ip地址

6, 本地域名服务器向权限域名服务器查询

7, 权限域名服务器告诉本地域名服务器,所查询的主机ip地址

8, 本地域名服务器把查询结果告诉主机

基于tcp和udp的应用层协议有哪些

基于TCP的有FTP、Telnet、SMTP、HTTP、POP3
基于UDP的有TFTP、DHCP、SNMP
其中DNS既可以基于TCP,也可以基于UDP。
##关于http的一些问题

http缺点和https优势

a、通信使用明文不加密,内容可能被窃听
b、不验证通信方身份,可能遭到伪***r> c、无法验证报文完整性,可能被篡改

http1.0和2.0的区别

1.HTTP2使用的是二进制传送,HTTP1.X是文本(字符串)传送。
大家都知道HTTP1.X使用的是明文的文本传送,而HTTP2使用的是二进制传送,二进制传送的单位是帧和流。帧组成了流,同时流还有流ID标示,通过流ID就牵扯出了第二个区别

2.HTTP2支持多路复用
因为有流ID,所以通过同一个http请求实现多个http请求传输变成了可能,可以通过流ID来标示究竟是哪个流从而定位到是哪个http请求

3.HTTP2头部压缩
HTTP2通过gzip和compress压缩头部然后再发送,同时客户端和服务器端同时维护一张头信息表,所有字段都记录在这张表中,这样后面每次传输只需要传输表里面的索引Id就行,通过索引ID就可以知道表头的值了

4.HTTP2支持服务器推送
HTTP2支持在客户端未经请求许可的情况下,主动向客户端推送内容

http请求中get和post的区别

1, 从功能上来说

Get是向服务器发索取数据的一种请求,是安全的和幂等的,POST是修改服务器上的数据,是向服务器提交数据的一种请求。

所谓 安全的 意味着该操作用于获取信息而非修改信息。换句话说,GET请求一般不应产生副作用。就是说,它仅仅是获取资源信息,就像数据库查询一样,不会修改,增加数据,不会影响资源的状态。
幂等 的意味着对同一URL的多个请求应该返回同样的结果。

2, 从使用形式上来说

GET请求的数据会附在URL之后,POST把提交的数据则放置在是HTTP包的包体中。

3, 从安全性上来说
Get请求的数据因为会附在url之后,所以是不安全的,post数据则放置在http包体里,所以是安全的

4, 从数据量上来说
GET方式提交的数据最多只能是1024字节,理论上POST没有限制,可传较大量的数据

http响应的状态码

1XX Informational(信息性状态码)

2XX Success(成功状态码)。例如:200 OK 表示从客户端发来的请求在服务器端被正常处理了。

3XX Redirection(重定向状态码)例如:302,客户请求的文档转移到了一个新的地址,请求被重定向了。

4XX Client Error(客户端错误状态码)。例如:**404 Not Found 该状态码表明服务器上无法找到请求的资源。**除此之外,也可以在服务器端拒绝请求且不想说明理由时使用。

5XX Server Error(服务器错误状态码)。例如:500 Internal Server Error 该状态码表明服务器端在执行请求时发生了错误。

运输层考点

TCP(点对点全双工)和UDP的区别

1, 从可靠性上来说

TCP提供面向连接的、可靠的数据流传输,而UDP提供的是非面向连接的、不可靠的数据流传输。

2, 从报文的传递形式来说
TCP传输单位称为TCP报文段,是一种无结构的字节流。UDP传输单位称为用户数据报。

3, 从传输速度上来说

TCP注重数据安全性,UDP数据传输快,因为不需要连接等待,少了许多操作

TCP可靠传输的实现

发送窗口一定小于接收窗口

1,如果32,33没有按序到达,说明31丢失了,所以接收方给出的确认号是31,说明31之前的都按序到达了,从31开始发。

2,如果31,32,33按序到达,则接收窗口向前滑动,并给出新的确认号34,发送方收到后也将自己的窗口向前滑动3,,发送方和接收方的可用窗口都增大了

3,如果A连续发送42-53之后,发送窗口内序号用完了,也就是一直没收确认,这个时候发送窗口的可用序号已经用完了,所以A需要超时重传

4, 发送缓存和接收缓存

发送缓存用来暂时存放:
(1)发送应用程序传送给发送方TCP准备发送的数据;
(2)TCP已发送出但尚未收到的确认的数据。

接受缓存用来暂时存放:
(1)按序到达的、但尚未被接受应用程序读取的数据;
(2)未按序到达的数据。
##TCP拥塞控制
传输轮次:把拥塞窗口cwnd 所允许发送的报文段都发送出去,并且收到了对己发送的最后一个字节的确认,也就是全部发送完毕并且收到确认

慢开始算法:每经历一个轮次把窗口翻倍增大

拥塞避免算法:每经过一个轮次,cwnd加1(缓慢增大)
快重传算法:接收方每收到一个失序的报文段,都要给发送方进行重复确认,让发送方及早知道自己发送的报文段丢失了,发送方只要连续收到三个重复确认就不需要等待超时重传定时器到期,立即重传报文

快恢复算法:发送方收到三个重复确认就开始“乘法减小”,把慢开始门限ssthresh减半,接下来开始执行拥塞避免

终极流程

只有超时和建立连接时的情况下才执行慢开始,否则执行快恢复算法

TCP三次握手

开始A和B都处于CLOSED状态然后B先进入LISTEN状态,等待请求

  • 首先,Client端发送连接请求报文(SYN同步位置1,seq请求序号为x),A发送后A进入SYN-SENT状态

  • 然后, Server段接受连接后回复ACK报文)(ACK确认位置1,ack确认号为x+1,SYN同步位置1,seq序号为y),并为这次连接分配资源,B发送后B进入SYN-RCVD状态

  • 最后,Client端接收到ACK报文后也向Server段发送ACK报文(Ack确认位置1,ack为y+1,序号为x+1),并分配资源。A发送后A进入ESTAB-LISHED状态,B收到后也进入该状态,这样TCP连接就建立了。

为什么不是两次握手

为什么要三次握手:防止失效的连接请求报文段突然又传送到主机B。
场景:A首先发送一个连接请求,但是该请求在网络节点上滞留了,没有收到确认。于是A重传了一次请求,并且收到了B的确认,于是连接建立,数据传输完成后,释放连接,假定A发出的第一个请求报文段并没有丢失,而是在某些网络节点上滞留,本来是一个失效的请求,但B收到后误认为是A再次发出一个新请求,于是向A发送确认,同意建立连接。
假定采用两次握手,那么只要B发出确认,则新的连接就建立了。由于A并没有发出请求,因此不理会B的确认,也不会向B发送数据,但B却以为新的连接已经建立,并一直等待A的数据,B的许多资源就这样白白浪费了。
假定采用三次握手,则B发出确认,但A因为并没有发请求,所以不理会B的确认,B没有收到A的确认,则连接建立失败,B知道连接建立失败。会回收资源。

极端的情况可能由于Client端多次重新发送请求数据而导致Server端最后建立了N多个响应在等待,因而造成极大的资源浪费!所以,“三次握手”很有必要!

为什么不用四次握手

握手握的是序列号,四次握手的过程是
1,A发送给B 同步序号SYN+A的seq为x
2,B收到后确认收到ACK发给A,然后令ack=x+1,确认A的seq按序到达
3,B向A发送SYN+自己的序列号seq为y
4, A收到B的序列号,存储到本地,发送ack=y+1,确认收到了,发送ACK+ack和自己的新序号seq为x+1

其中2,3两步是完全可以归为一次发送的,所以不需要四次握手

TCP四次挥手

  1. 开始的时候A和B都处于ESTAB-LISHED状态

  2. 假设Client端发起中断连接请求,也就是发送FIN报文(FIN=1,seq=u,)。Server端接到FIN报文后,意思是说”我Client端没有数据要发给你了”,但是如果你还有数据没有发送完成,则不必急着关闭Socket,可以继续发送数据。A发完后A进入FIN-WAIT-1状态(FIN=1, seq=u)

  3. 所以你先发送ACK,”告诉Client端,你的请求我收到了,但是我还没准备好,请继续你等我的消息”。B收到后向A发送ack(ACK=1,seq = v,ack = u+1),B发完后B进入COLSE-WAIT状态(ACK=1,seq=v,ack = u+1)

  4. A收到B的确认后进入FIN-WAIT-2状态

  5. 当B确定数据已发送完成,则向A发送FIN报文,”告诉Client端,好了,我这边数据发完了,准备好关闭连接了”。A收到B的ack就进入Client端收到FIN报文后, “就知道可以关闭连接了。B发完后B进入 LAST-ACK状态(FIN=1,ACK=1,seq=w,ack = u+1)

  6. 但是他还是不相信网络,怕Server端不知道要关闭,所以发送ACK后进入TIME_WAIT状态,如果Server端没有收到ACK则可以重传。“,Server端收到ACK后,”就知道可以断开连接了”。Client端等待了2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,我Client端也可以关闭连接了。Ok,TCP连接就这样关闭了!(ACK=1,seq = u+1,ack = w+1)

为什么设置2MSL时间

Msl是最长报文寿命

1,为了保证A发送的最后一个ACK能到达B。因为这个ACK可能丢失,因为使B收不到确认,无法关闭,有个这段时间,B就可以超时重传FIN+ACK,然后A就重传一次ACK,然后重置定时器。最后A,B都能顺利关闭,如果没有这段时间,A发送完ACK就关闭,B不一定能顺利关闭。

2,防止“已失效连接请求报文段”出现在本连接中,A在发送完最后一个ACK后,再经过2MSL,就可以使本链接持续的时间内所产生的所有报文段都在网络中消失,这样就可以使下一个连接中不再出现这种旧的请求报文段

网络层考点

分组转发算法

(1) 从数据报的首部提取目的主机的 IP 地址 D, 得出目的网络地址为 N。

(2) 若网络 N 与此路由器直接相连。则把数据报直接交付目的主机 D。否则是间接交付,运行(3)。

(3) 若路由表中有目的地址为 D 的特定主机路由。则把数据报传送给路由表中所指明的下一跳路由器。否则,运行(4)。

(4) 若路由表中有到达网络 N 的路由,则把数据报传送给路由表指明的下一跳路由器。否则,运行(5)。

(5) 若路由表中有一个默认路由。则把数据报传送给路由表中所指明的默认路由器;否则,运行(6)。

(6) 报告转发分组出错。

特定主机路由:这样的路由是为特定的目的主机指明一个路由。采用特定主机路由可使网络管理人员能更方便地控制网络和測试网络,同一时候也可在须要考虑某种安全问题时采用这样的特定主机路由。

默认路由:
作用:路由器还可采用默认路由以降低路由表所占用的空间和搜索路由表所用的时间。仅仅要目的网络在路由表中匹配不到,就一律选择默认路由(详情见后面:分组转发规则)

ARP协议工作流程

APR协议是解决同一个局域网上的主机或者路由器的IP地址和硬件地址的映射问题。

主机A的IP地址为192.168.1.1,MAC地址为0A-11-22-33-44-01;
主机B的IP地址为192.168.1.2,MAC地址为0A-11-22-33-44-02;
当主机A要与主机B通信时,地址解析协议可以将主机B的IP地址(192.168.1.2)解析成主机B的MAC地址,以下为工作流程:

1, 根据主机A上的路由表内容,IP确定用于访问主机B的转发IP地址是192.168.1.2。然后A主机在自己的本地ARP缓存中检查主机B的匹配MAC地址。

2, 如果主机A在ARP缓存中没有找到映射,它将询问192.168.1.2的硬件地址,从而将ARP请求帧广播到本地网络上的所有主机。源主机A的IP地址和MAC地址都包括在ARP请求中。本地网络上的每台主机都接收到ARP请求并且检查是否与自己的IP地址匹配。如果主机发现请求的IP地址与自己的IP地址不匹配,它将丢弃ARP请求。

3, 主机B确定ARP请求中的IP地址与自己的IP地址匹配,则将主机A的IP地址和MAC地址映射添加到本地ARP缓存中。

4, 主机B将包含其MAC地址的ARP回复消息直接发送回主机A。

5, **当主机A收到从主机B发来的ARP回复消息时,会用主机B的IP和MAC地址映射更新ARP缓存。**本机缓存是有生存期的,生存期结束后,将再次重复上面的过程。主机B的MAC地址一旦确定,主机A就能向主机B发送IP通信了。

注意:ARP是广播发送,ARP响应是单播发送的

RARP协议工作流程

逆地址解析协议,即RARP,功能和ARP协议相对,其将局域网中某个主机的物理地址转换为IP地址,比如局域网中有一台主机只知道物理地址而不知道IP地址,那么可以通过RARP协议发出征求自身IP地址的广播请求,然后由RARP服务器负责回答。

RARP是逆地址解析协议,作用是完成硬件地址到IP地址的映射,主要用于无盘工作站,因为给无盘工作站配置的IP地址不能保存。RARP协议工作流程:

1, 给主机发送一个本地的RARP广播,在此广播包中**,声明自己的MAC地址并且请求任何收到此请求的RARP服务器分配一个IP地址**

2, 本地网段上的RARP服务器收到此请求后,检查其RARP列表,查找该MAC地址对应的IP地址

3, 如果存在,RARP服务器就给源主机发送一个响应数据包并将此IP地址提供给对方主机使用,如果不存在,RARP服务器对此不做任何的响应

4, 源主机收到从RARP服务器的响应信息,就利用得到的IP地址进行通讯;如果一直没有收到RARP服务器的响应信息,表示初始化失败。

注意

1, 路由器只是根据目的站点的ip地址的网络号进行路由选择,在局域网的链路层,只能看到MAC帧

2, 在局域网的传送过程中,只能看见mac帧,变化的(源地址与目的地址)也是mac帧的地址。

子网划分

主机数减2是因为要扣除全0或者全1的主机号

A类地址(50%)以0开头,第一个字节作为网络号,
地址范围为:1.0.0.1 到126.255.255.254
每个A类子网最大主机数2^24-2 = 16777214

B类地址(25%)以10开头,前两个字节作为网络号,默认128.0.0.0不指派

地址范围为:128.0.0.1到191.255.255.254
每个B类子网最大主机数2^16 -2 = 65534

C类地址(12.5%)以110开头,前三个字节作为网络号,默认192.0.0.0不指派

地址范围为:192.0.0.1~223.255.255.254。
每个C类子网最大主机数2^8 -2 = 254

D类地址以1110开头

地址范围是224.0.0.0~239.255.255.255,D类地址作为组播地址(一对多的通信);

E类地址以1111开头,地址范围是240.0.0.0~255.255.255.255,E类地址为保留地址,供以后使用。

注意:注:只有A,B,C有网络号和主机号之分,D类地址和E类地址没有划分网络号和主机号。

将网络掩码与ip地址按位求与即可求出该ip地址的网络地址来

子网划分主要就是将主机位拿出一部分来用作子网的划分。

CIDR构造超网

无分类的两极编址:ip地址::={<网络前缀>,<主机号>}
CIDR还使用斜线记发,在ip地址后加斜线,然后写上网络前缀所占位数
比如说128.14.35.7/20 =

当然以上两个特殊主机号是全0或者全1的地址,一般不使用