计算机网络重要面试知识点

计算机网络重要面试知识点


补充:常用端口号了解:

(1)http 80 https 443 ftp 21 telnet 23 tomcat 8080 mysql 3306
(2)http get/post基本区别:

在这里插入图片描述

(一)传输层
UDP特点:
1.基于IP协议:复用、分用。可以实现简单的错误校验。
2.尽最大努力交付:可能丢失,非按需达到。
3.无连接:发送方与接收方不需要握手,每个UDP段的处理独立于其他段。

UDP为什么存在(意义):
1.不需要连接,减少延迟。
2.实现简单,无需维护连接状态。
3.头部开销小,只有8个字节。
4.没有拥塞控制:应用可以更好地控制发送时间和速率,而TCP如果拥塞,则会自动调整速度,所以不好控制。因此对于要控制发送速率的应用,用UDP会更好。

应用:DNS、SNMP、流媒体应用
(仍然可以通过)

首部字段:
1.源端口(source port):2字节
2.目的端口(dest port):2字节
3.长度:UDP段的整体长度,包括头部,占用2字节
4.校验和字段:2个字节

UDP校验和:checksum字段作用:
(1)发送方:将段的内容视为16位证书,进行校验和计算,按位取反,并放入到校验和字段。
(2)接收方:计算所收到的校验和,与校验和字段进行对比。若不等,则证明出错。若相等,则未检测出错误,但仍然有可能出错,比如两位同时翻转,则无法检测出来。

整个网络的重点 TCP:
1.特点
在这里插入图片描述2.首部各个字段
在这里插入图片描述
序列号:指的是segment第一个字节的编号,而不是segment的编号。建立TCP链接的时候,双方随机选择序列号。

ACKs:
希望接收到的下一个字节的序列号。
累计确认:(跟GBN很像)
在这里插入图片描述在这里插入图片描述3.TCP的可靠数据传输
在这里插入图片描述这里要注意的是,超时时间设置,是用统计学方法求出来得。
在这里插入图片描述
上图左:如果在timeout时间内,没有收到ACK,则会重传。
上图右:timeout设置短了,在收到ACK前又重传了,此时重传后,陆续收到了原来来迟了的ACK,最后收到重传后返回的ACK的值,由于是累积确认机制,所以此时ACK值为最大收到的值,为120。
在这里插入图片描述
而以上情况,由于累积机制,会出问题。

TCP连接控制 三次握手、四次挥手、同时打开、同时关闭、半关闭

参考链接:https://blog.csdn.net/smileiam/article/details/78226816(三次握手,四次挥手)
①三次握手:https://mp.weixin.qq.com/s/mhIaC-Eyk5XCPH_rfrE-wg
在这里插入图片描述
②四次挥手:
在这里插入图片描述
③半打开连接:两方连接上后,其中有一边突然掉电而没有发FIN给对方,所以对方一边单独处于连接状态,这种情况叫做半打开连接。
④同时打开:(变成了四次握手)
简单理解为,A给B发SYN包请求建立连接,但是在A的包还没到达B的时候,B就发送了SYN包给A请求建立连接,那么接下来双方都会返回一次ACK包给对方,此时进行了四次握手(很少会出现这样的情况)。
在这里插入图片描述
⑤同时关闭:
同时关闭跟同时打开原理相似,也是双方同时请求关闭。
在这里插入图片描述
⑥半关闭:
简单理解为,A向B发送了FIN结束请求,B同意了并返回ACK。但是B没有发送FIN给A,因为B可能还要发送消息,或者A还想要从B接受消息。此时的状态成为半关闭。
在这里插入图片描述
半打开和半关闭区别:半打开是在双方建立连接后,一段发生了异常掉电,另一端并不知道,此时处于半打开状态。对于半关闭,是一端发送一个请求告诉另一段进行关闭,而另一端未发送fin请求关闭,此时叫半关闭。

TCP保证可靠传输总结
1.应用数据被分割成 TCP 认为最适合发送的数据块。
2.TCP 给发送的每一个包进行编号,接收方对数据包进行排序,把有序数据传送给应用3层。
3.校验和: TCP 将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP 将丢弃这个报文段和不确认收到此报文段。
4.TCP 的接收端会丢弃重复的数据。
5.流量控制: TCP 连接的每一方都有固定大小的缓冲空间,TCP的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。TCP 使用的流量控制协议是可变大小的滑动窗口协议。 (TCP 利用滑动窗口实现流量控制,流量控制是针对两个端点的计算机的)
6.拥塞控制: 当网络拥塞时,减少数据的发送。(拥塞控制是针对网络的)
7.停止等待协议 也是为了实现可靠传输的,它的基本原理就是每发完一个分组就停止发送,等待对方确认。在收到确认后再发下一个分组。 超时重传: 当 TCP 发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。

停止等待协议
①连续ARQ协议(连续发几个,然后接收方返回连续收到的最后一个包)
②自动重传请求 ARQ 协议(发一个确认一个)

流量控制
①TCP 利用滑动窗口实现流量控制。
②流量控制是为了控制发送方发送速率,保证接收方来得及接收。
③接收方发送的确认报文中的窗口字段可以用来控制发送方窗口大小,从而影响发送方的发送速率。将窗口字段设置为 0,则发送方不能发送数据。

拥塞控制
①为了进行拥塞控制,TCP 发送方要维持一个 拥塞窗口(cwnd) 的状态变量。拥塞控制窗口的大小取决于网络的拥塞程度,并且动态变化。发送方让自己的发送窗口取为拥塞窗口和接收方的接受窗口中较小的一个。
②慢启动(只是初值为1,后期增长还是比较快的):由于发送速度太慢,所以前期使用指数增长阶段。
③拥塞避免:当指数增长达到一个慢启动门限(ssthresh),当达到此门限,就结束慢启动,进入拥塞避免,开始使用线性增长方式。
即使使用拥塞避免,但是始终还是会达到MAX,到达max后,将阈值减半,并设置拥塞窗口N=1,再开始慢启动以及拥塞避免。

首先来看TCP是如何确定网络进入了拥塞状态的,TCP认为网络拥塞的主要依据是它重传了一个报文段。上面提到过,TCP对每一个报文段都有一个定时器,称为重传定时器(RTO),当RTO超时且还没有得到数据确认,那么TCP就会对该报文段进行重传,当发生超时时,那么出现拥塞的可能性就很大,某个报文段可能在网络中某处丢失,并且后续的报文段也没有了消息,在这种情况下,TCP反应比较“强烈”:
1.把ssthresh降低为cwnd值的一半
2.把cwnd重新设置为1
3.重新进入慢启动过程。

④快速重传:当接收方未收到一个包(或者接收到乱序的包,说明就有某个包丢失了),接收方则采用快速重传机制,连续发三次ACK包(期待接受到的包的上一个序号),告诉发送方,该包还未收到。
快速重传机制:发送了1,2,3,但是每次接收到的ACK都显示是1,如果重复ACK达到3次,则重传1,说明了1没接收到。
(1)发送的时候:采用流水线发送,可以连续发多个包。
(2)接收的时候:采用累积接收机制,这个跟GBN机制比较像。

快速重传是接受方的,快速重传引发后,立刻引发快速恢复,快速恢复是针对发送方的。

⑤快速恢复:此时,会把阈值设置为MAX的一半,但是此时(拥塞)不设置为1,使得ssthresh等于cwnd的一半,然后使得cwnd等于ssthresh,这样起点就已经很高了,接下来采用线性增长。
在这里插入图片描述TCP超时重传机制:四个定时器
(1)重传计时器:(简单理解为,在计时器内,你不返回ACK,那我就重传,重传时间2RTT)
重传定时器:为了控制丢失的报文段或丢弃的报文段,也就是对报文段确认的等待时间。当TCP发送报文段时,就创建这个特定报文段的重传计时器,可能发生两种情况:若在计时器超时之前收到对报文段的确认,则撤销计时器;若在收到对特定报文段的确认之前计时器超时,则重传该报文,并把计时器复位;
(2)坚持计时器:persistent timer(专门为对付零窗口通知而设立的,就是当接收方窗口为0时,那么我每过一段时间发个探测报给你,看看你是否有空间,计时器每次增长一倍,并当达到60S就不再增长)0
当发送端收到零窗口的确认时,就启动坚持计时器,当坚持计时器截止期到时,发送端TCP就发送一个特殊的报文段,叫探测报文段,这个报文段只有一个字节的数据。探测报文段有序号,但序号永远不需要确认,甚至在计算对其他部分数据的确认时这个序号也被忽略。探测报文段提醒接收端TCP,确认已丢失,必须重传。
坚持计时器的截止期设置为重传时间的值,但若没有收到从接收端来的响应,则发送另一个探测报文段,并将坚持计时器的值加倍和并复位,发送端继续发送探测报文段,将坚持计时器的值加倍和复位,知道这个值增大到阈值为止(通常为60秒)。之后,发送端每隔60s就发送一个报文段,直到窗口重新打开为止;
(3)保活计时器:keeplive timer(接收方在2小时时间内陆续发探测报给发送方,看看发送方是否有数据要传,若过了2小时未收到发送方信息,则主动断开连接。)
每当服务器收到客户的信息,就将keeplive timer复位,超时通常设置2小时,若服务器超过2小时还没有收到来自客户的信息,就发送探测报文段,若发送了10个探测报文段(没75秒发送一个)还没收到响应,则终止连接。
(4)时间等待计时器:Time_Wait Timer(就是党关闭连接后,会有一段过渡时间,在过渡时间内,如果再次收到FIN报文段就可以直接丢弃)
在连接终止期使用,当TCP关闭连接时,并不认为这个连接就真正关闭了,在时间等待期间,连接还处于一种中间过度状态。这样就可以时重复的fin报文段在到达终点后被丢弃,这个计时器的值通常设置为一格报文段寿命期望值的两倍。

三、网络层
1.掌握IP首部格式:如16位分片标识、DF不分片标识、MF更多片标识、13位片偏移、8位生存时间TTL、16位首部检验和等等
(1)16位分片标识:IP软件在存储器中维持一个计数器,每产生一个数据报,计数器就加1,并将此值赋给标识字段。但这个“标识”并不是序号,因为IP是无连接服务,数据报不存在按序接收的问题。当数据报由于长度超过网络的MTU而必须分片时,这个标识字段的值就被复制到所有的数据报的标识字段中。相同的标识字段的值使分片后的各数据报片最后能正确地重装成为原来的数据报。
(2)标志(flag) 占3位,但目前只有2位有意义。
● 标志字段中的最低位记为MF(More Fragment)。MF=1即表示后面“还有分片”的数据报。MF=0表示这已是若干数据报片中的最后一个。
● 标志字段中间的一位记为DF(Don’t Fragment),意思是“不能分片”。只有当DF=0时才允许分片,所以不能分片的DF=1。
(3)片偏移 占13位。片偏移指出:较长的分组在分片后,某片在原分组中的相对位置。也就是说,相对用户数据字段的起点,该片从何处开始。片偏移以8个字节为偏移单位。这就是说,每个分片的长度一定是8字节(64位)的整数倍。
(4)生存时间 占8位,生存时间字段常用的的英文缩写是TTL(Time To Live),表明是数据报在网络中的寿命。由发出数据报的源点设置这个字段。其目的是防止无法交付的数据报无限制地在因特网中兜圈子,因而白白消耗网络资源。最初的设计是以秒作为TTL的单位。每经过一个路由器时,就把TTL减去数据报在路由器消耗掉的一段时间。若数据报在路由器消耗的时间小于1秒,就把 TTL值减1。当TTL值为0时,就丢弃这个数据报。
(5)协议 占8位,协议字段指出此数据报携带的数据是使用何种协议,以便使目的主机的IP层知道应将数据部分上交给哪个处理过程。
(6)首部检验和 占16位。这个字段只检验数据报的首部,但不包括数据部分。这是因为数据报每经过一个路由器,路由器都要重新计算一下首部检验和(一些字段,如生存时间、标志、片偏移等都可能发生变化)。不检验数据部分可减少计算的工作量。

2.IP分片、IP选路
(1)IP分片:MTU(最大传输单元)
MTU前面已经说过了,是链路层中的网络对数据帧的一个限制,依然以以太网为例,MTU为1500个字节。一个IP数据报在以太网中 传输,如果它的长度大于该MTU值,就要进行分片传输,使得每片数据报的长度小于MTU。分片传输的IP数据报不一定按序到达,但IP首部中的信息能让这些数据报片按序组装。IP数据报的分片与重组是在网络层进完成的。
总结:UDP不会分段,就由IP来分。TCP会分段,当然就不用IP来分了!
(2)IP选路:总结为三点。一,优先查找主机地址。二,主机地址没找到,再找网络地址。三,网络地址也没找到,则按照默认路由。

3.ICMP协议:主要掌握报文格式
报文分为2种查询报文+5种差错报文
(0)什么是ICMP: https://blog.csdn.net/u011784495/article/details/71743516
(1)为什么需要ICMP?
因为IP协议不提供可靠性且不能保证信息传递,因此发生问题时,通知发送人是很重要的。(IP协议是一种不可靠的协议,无法进行差错控制。但IP协议可以借助其他协议来实现这一功能,如ICMP)
(2)ICMP差错报告报文共有5种:
1、终点不可达:终点不可达分为:网络不可达,主机不可达,协议不可达,端口不可达,需要分片但DF比特已置为1,以及源路由失败等六种情况,其代码字段分别置为0至5。当出现以上六种情况时就向源站发送终点不可达报文。
说明:
端口不可达:UDP的规则之一是:如果收到UDP数据报而且目的端口与某个正在使用的进程不相符,那么UDP返回一个ICMP不可达报文。
2、 源站抑制:当路由器或主机由于拥塞而丢弃数据报时,就向源站发送源站抑制报文,使源站知道应当将数据报的发送速率放慢。
3、 时间超过:当路由器收到生存时间为零的数据报时,除丢弃该数据报外,还要向源站发送时间超过报文。当目的站在预先规定的时间内不能收到一个数据报的全部数据报片时,就将已收到的数据报片都丢弃,并向源站发送时间超过报文。
4、参数问题:当路由器或目的主机收到的数据报的首部中的字段的值不正确时,就丢弃该数据报,并向源站发送参数问题报文。
5、改变路由(重定向)路由器将改变路由报文发送给主机,让主机知道下次应将数据报发送给另外的路由器。

4.ICMP的查询报文:PING,traceroute(不知道正确与否)

四、数据链路层
1、以太网帧
首先,以太网帧有两种格式IEEE802.3帧格式和Ethernet_II 帧格式,目前大多用的是第二种格式。
从网络层传下来的数据报,在数据链路层加上帧头和帧尾,构成一个数据帧。

帧传输的方式:
在这里插入图片描述

MAC地址48位,前24位代表该供应商代码,由IEEE管理和分配。剩下的24位序列号由厂商自己分配。

局域网上的帧可以通过三种方式发送
注意是发送方式:下面讨论的都是目的MAC地址,第一个字节的最后一个bit是0啊,是1啊,所有字节全部是f啊这样的情况。目的地址是发送方自己写的。
1.单播:
2.广播
3.组播

如果目的MAC地址是本机MAC地址,则接受该帧,检查帧校验序列(FCS)字段,并与本机计算的值对比来确定帧在传输过程中是否保持了完整性。如果帧的FCS值与本机计算的不同,那么就会丢弃该帧。如果该帧通过了FCS校验,则主机会根据帧头部中的Type字段来确定该帧发送给上层(或者本层)哪个协议处理。

2、MTU的概念
以太网和8 0 2 . 3对数据帧的长度都有一个限制,其最大值分别是1 5 0 0和1 4 9 2字节。链路层的这个特性称作M T U,最大传输单元。不同类型的网络大多数都有一个上限。
如果I P层有一个数据报要传,而且数据的长度比链路层的M T U还大,那么I P层就需要进行分片( f r a g m e n t a t i o n),把数据报分成若干片,这样每一片都小于M T U。

扩充:
在这里插入图片描述
3、ARP和RARP:主要是报文和ARP查询原理
(地址解析协议 ARP和逆地址解析协议RARP)
https://blog.csdn.net/zln99/article/details/51050472(这个网址讲得恨透彻)
1.报文:

2.ARP查询原理:
在这里插入图片描述3.RARP介绍:
在这里插入图片描述
五、应用层
1、DNS:DNS的名字空间、DNS指针查询(反向查找或逆向解析)的原理、DNS缓存。https://blog.csdn.net/gavin_john/article/details/53264549(推荐网址)
(1)名字空间:(记住几个关键词:根域、顶级域、二级域、子域、主机名)
在这里插入图片描述
1.DNS指针查询

正向查找(域名àIP地址)
在这里插入图片描述在这里插入图片描述在这里插入图片描述
反向查找(IPà域名)(以下为含义及作用)
在这里插入图片描述2.DNS缓存:
如果每次DNS解析都要走完上面介绍的整个流程,就会带来网络带宽的消耗和时延,这对于用户和DNS解析系统都是不友好的。

所以当本地DNS服务器在完成一次查询后就会将得到的主机名到IP地址的映射缓存到本地,从而加快DNS的解析速度。实际上,你的访问的解析大多数都是在本地服务器上完成的。

由于主机名和IP地址之间的映射不是永久的,DNS服务器在一段时间后,通常是两天,就会丢弃缓存信息。

2、了解FTP:控制流与数据流、两种工作模式:PASV和PORT、断点续传、匿名FTP
1.控制流和数据流:
2.两种工作模式:https://blog.csdn.net/ygqygq2/article/details/53264916(很透彻)
在这里插入图片描述
(3)断点续传 https://www.cnblogs.com/duanxz/p/5127105.html
在这里插入图片描述(4)匿名FTP

(5)如何知道FTP传送一个文件结束?
前面说过,通用传输方式是流方式,并且文件的结尾是以关闭数据连接为标志,这意味着对每一个文件传输或目录列表来说都要建立一个全新的数据连接,而当文件结束时,该数据连接也就断开了。

3、HTTP:1.报文格式:请求报文和响应报文的报文头各种字段
https://www.cnblogs.com/biyeymyhjob/archive/2012/07/28/2612910.html(讲的非常透彻)
在这里插入图片描述在这里插入图片描述
补充:HTTP握手过程实际上就是普通的TCP可靠通信的握手过程(三次握手,四次挥手),但是HTTP是明文传输,因此是不安全的,而HTTPS在HTTP基础上添加了SSL协议,正式解决安全的一个问题。

4、可以了解一下HTTPS:详细的握手过程、摘要算法、数字签名、数字证书的原理和过程 https://www.zhihu.com/question/52493697(看刘志军的,讲得很好)

(1)HTTPS握手过程:https://blog.csdn.net/cout__waht/article/details/80859369(对比HTTP和HTTPS的握手过程,注意HTTPS是在传输层完成的)
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
摘要算法:简单记忆为将任意长度文本变化为固定长度文本,以便于进行判断原文本是否被修改。
在这里插入图片描述
数字签名:----数字签名是通过服务器的私钥和公钥来确保传输内容是OK的。
在这里插入图片描述
数字证书的原理和过程-----数字证书的目的是确保服务器的公钥匙正确的
【我的理解】数字证书相当于是第三方机构,担心服务器发过来的公钥被替换了
在这里插入图片描述
为什么有了非对称加密,还需要对称加密呢?
回答:虽然非对称加密比对称加密更加安全,但是非对称加密效率没有对称加密高,所以在HTTps请求中,
一开始握手的时候使用非堆成加密,后面传输信息的时候,还是会使用对称加密,以便提高效率。

HASH的原理?
https://blog.csdn.net/qq_38936579/article/details/81486670
常见的hash方式是开链法,也就是hashtable的原理,注意在扩容的时候,以原来的两倍进行扩容,需要rehash。
在这里插入图片描述JDK8 hashMap 为什么在桶节点数量为8时转红黑树 - 简书
现在为了提高hashmap的效率,当桶里面的节点数量超过8的时候,就把原来的链表转换为红黑树。
在这里插入图片描述为什么会有Time_wait这个状态?
在这里插入图片描述在这里插入图片描述在这里插入图片描述
为什么客户端在timewait状态必须等待2MSL的时间?
(MSL为包在网络上传送的最长时间)
解答:
为了保证客户端发送的最后一个ACK报文段能够达到服务器。 这个ACK报文段可能丢失,因而使处在LAST-ACK状态的服务器收不到确认。服务器会超时重传FIN+ACK报文段,客户端就能在2MSL时间内收到这个重传的FIN+ACK报文段,接着客户端重传一次确认,重启计时器。最好,客户端和服务器都正常进入到CLOSED状态。如果客户端在TIME-WAIT状态不等待一段时间,而是再发送完ACK报文后立即释放连接,那么就无法收到服务器重传的FIN+ACK报文段,因而也不会再发送一次确认报文。这样,服务器就无法按照正常步骤进入CLOSED状态。(即在第一个MSL,如果ACK包无法送到,则马上服务端就会再发一个fin包,此时在第二个MSL结束前,如果客户端收到了fin包则可以再发送ack并且再次启动timewait,如果在第二个MSL结束了还没有收到fin包,说明ACK发送成功。)
防止已失效的连接请求报文段出现在本连接中。客户端在发送完最后一个ACK确认报文段后,再经过时间2MSL,就可以使本连接持续的时间内所产生的所有报文段都从网络中消失。这样就可以使下一个新的连接中不会出现这种旧的连接请求报文段。

timewait带来的危害?
1、服务器上会有大量的连接处于TIME_WAIT状态
在这里插入图片描述
什么是长连接,什么是短连接?
在这里插入图片描述在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43337444/article/details/114435290