-
计算机网络面试题总结
2020-08-14 20:07:21OSI,TCP/IP,五层协议的体系结构,以及各层协议 1)物理层(Physical Layer) 激活、维持、关闭通信...数据链路层在物理层提供的服务的基础上向网络层提供服务,其最基本的服务是将源自网络层来的数据可靠地传输到OSI,TCP/IP,五层协议的体系结构,以及各层协议
1)物理层(Physical Layer)
激活、维持、关闭通信端点之间的机械特性、电气特性、功能特性以及过程特性。该层为上层协议提供了一个传输数据的可靠的物理媒体。简单的说,物理层确保原始的数据可在各种物理媒体上传输。物理层记住两个重要的设备名称,中继器(Repeater,也叫放大器)和集线器。2)数据链路层(Data Link Layer)
数据链路层在物理层提供的服务的基础上向网络层提供服务,其最基本的服务是将源自网络层来的数据可靠地传输到相邻节点的目标机网络层。为达到这一目的,数据链路必须具备一系列相应的功能,主要有:如何将数据组合成数据块,在数据链路层中称这种数据块为帧(frame),帧是数据链路层的传送单位;如何控制帧在物理信道上的传输,包括如何处理传输差错,如何调节发送速率以使与接收方相匹配;以及在两个网络实体之间提供数据链路通路的建立、维持和释放的管理。数据链路层在不可靠的物理介质上提供可靠的传输。该层的作用包括:物理地址寻址、数据的成帧、流量控制、数据的检错、重发等。
有关数据链路层的重要知识点:
1> 数据链路层为网络层提供可靠的数据传输;
2> 基本数据单位为帧;
3> 主要的协议:以太网协议;
4> 两个重要设备名称:网桥和交换机。
3)网络层(Network Layer)
网络层的目的是实现两个主机系统之间的数据透明传送,具体功能包括寻址和路由选择、连接的建立、保持和终止等。它提供的服务使传输层不需要了解网络中的数据传输和交换技术。如果您想用尽量少的词来记住网络层,那就是“路径选择、路由及逻辑寻址”。
网络层中涉及众多的协议,其中包括最重要的协议,也是TCP/IP的核心协议——IP协议。IP协议非常简单,仅仅提供不可靠、无连接的传送服务。IP协议的主要功能有:无连接数据报传输、数据报路由选择和差错控制。与IP协议配套使用实现其功能的还有地址解析协议ARP、逆地址解析协议RARP、因特网报文协议ICMP、因特网组管理协议IGMP。具体的协议我们会在接下来的部分进行总结,有关网络层的重点为:
1> 网络层负责对子网间的数据包进行路由选择。此外,网络层还可以实现拥塞控制、网际互连等功能;
2> 基本数据单位为IP数据报;
3> 包含的主要协议:
IP协议(Internet Protocol,因特网互联协议);
ICMP协议(Internet Control Message Protocol,因特网控制报文协议);
ARP协议(Address Resolution Protocol,地址解析协议)可看成是跨网络层和链路层的协议;
RARP协议(Reverse Address Resolution Protocol,逆地址解析协议)。
4> 重要的设备:路由器。
4)传输层(Transport Layer)
第一个端到端,即主机到主机的层次。传输层负责将上层数据分段并提供端到端的、可靠的或不可靠的传输。此外,传输层还要处理端到端的差错控制和流量控制问题。
传输层的任务是根据通信子网的特性,最佳的利用网络资源,为两个端系统的会话层之间,提供建立、维护和取消传输连接的功能,负责端到端的可靠数据传输。在这一层,信息传送的协议数据单元称为段或报文。作用:为应用进程之间提供端到端的逻辑通信。
网络层只是根据网络地址将源结点发出的数据包传送到目的结点,而传输层则负责将数据可靠地传送到相应的端口。
有关传输层的重点:
1> 传输层负责将上层数据分段并提供端到端的、可靠的或不可靠的传输以及端到端的差错控制和流量控制问题;
2> 包含的主要协议:TCP协议(Transmission Control Protocol,传输控制协议)、UDP协议(User Datagram Protocol,用户数据报协议);
3> 重要设备:网关。
注:网络层与传输层的区别(形象解释)
5)会话层会话层管理主机之间的会话进程,即负责建立、管理、终止进程之间的会话。会话层还利用在数据中插入校验点来实现数据的同步。
6)表示层
表示层对上层数据或信息进行变换以保证一个主机应用层信息可以被另一个主机的应用程序理解。表示层的数据转换包括数据的加密、压缩、格式转换等。
7)应用层
是最靠近用户的OSI层,为用户的应用程序提供网络服务的接口。将用户的操作通过应用程序转换成为服务,并匹配一个相应的服务协议发送给传输层。
注:我们在传输数据时,可以只使用(传输层)TCP/IP协议,但是那样的话,如果没有应用层,便无法识别数据内容,如果想要使传输的数据有意义,则必须使用到应用层协议。
会话层、表示层和应用层重点:
1> 数据传输基本单位为报文;
2> 包含的主要协议:FTP(文件传送协议)、Telnet(远程登录协议)、DNS(域名解析协议)、SMTP(邮件传送协议),POP3协议(邮局协议),HTTP协议(Hyper Text Transfer Protocol)。
每一层的协议如下:
物理层:RJ45、CLOCK、IEEE802.3 (中继器,集线器,网关)
数据链路:PPP、FR、HDLC、VLAN、MAC (网桥,交换机)
网络层:IP、ICMP、ARP、RARP、OSPF、IPX、RIP、IGRP、 (路由器)
传输层:TCP、UDP、SPX
会话层:NFS、SQL、NETBIOS、RPC
表示层:JPEG、MPEG、ASCII
应用层:FTP、DNS、Telnet、SMTP、HTTP、WWW、NFS注:应用层与传输层之间的关系以及端口号起到的作用。
注:TCP/IP协议与Http协议的区别
IP地址
1)网络地址IP地址由网络号(包括子网号)和主机号组成,网络地址的主机号为全0,网络地址代表着整个网络。
2)广播地址
广播地址通常称为直接广播地址,是为了区分受限广播地址。
广播地址与网络地址的主机号正好相反,广播地址中,主机号为全1。当向某个网络的广播地址发送消息时,该网络内的所有主机都能收到该广播消息。
3)组播地址
D类地址就是组播地址。
先回忆下A,B,C,D类地址吧:
A类地址以0开头,第一个字节作为网络号,地址范围为:0.0.0.0~127.255.255.255;(modified @2016.05.31)
B类地址以10开头,前两个字节作为网络号,地址范围是:128.0.0.0~191.255.255.255;
C类地址以110开头,前三个字节作为网络号,地址范围是:192.0.0.0~223.255.255.255。
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类地址没有划分网络号和主机号。
4)255.255.255.255
该IP地址指的是受限的广播地址。受限广播地址与一般广播地址(直接广播地址)的区别在于,受限广播地址只能用于本地网络,路由器不会转发以受限广播地址为目的地址的分组;一般广播地址既可在本地广播,也可跨网段广播。例如:主机192.168.1.1/30上的直接广播数据包后,另外一个网段192.168.1.5/30也能收到该数据报;若发送受限广播数据报,则不能收到。
注:一般的广播地址(直接广播地址)能够通过某些路由器(当然不是所有的路由器),而受限的广播地址不能通过路由器。
5)0.0.0.0
常用于寻找自己的IP地址,例如在我们的RARP,BOOTP和DHCP协议中,若某个未知IP地址的无盘机想要知道自己的IP地址,它就以255.255.255.255为目的地址,向本地范围(具体而言是被各个路由器屏蔽的范围内)的服务器发送IP请求分组。
6)回环地址
127.0.0.0/8被用作回环地址,回环地址表示本机的地址,常用于对本机的测试,用的最多的是127.0.0.1。
7)A、B、C类私有地址
私有地址(private address)也叫专用地址,它们不会在全球使用,只具有本地意义。
A类私有地址:10.0.0.0/8,范围是:10.0.0.0~10.255.255.255
B类私有地址:172.16.0.0/12,范围是:172.16.0.0~172.31.255.255
C类私有地址:192.168.0.0/16,范围是:192.168.0.0~192.168.255.255
子网掩码及网络划分
随着互连网应用的不断扩大,原先的IPv4的弊端也逐渐暴露出来,即网络号占位太多,而主机号位太少,所以其能提供的主机地址也越来越稀缺,目前除了使用NAT在企业内部利用保留地址自行分配以外,通常都对一个高类别的IP地址进行再划分,以形成多个子网,提供给不同规模的用户群使用。
这里主要是为了在网络分段情况下有效地利用IP地址,通过对主机号的高位部分取作为子网号,从通常的网络位界限中扩展或压缩子网掩码,用来创建某类地址的更多子网。但创建更多的子网时,在每个子网上的可用主机地址数目会比原先减少。
什么是子网掩码?
子网掩码是标志两个IP地址是否同属于一个子网的,也是32位二进制地址,其每一个为1代表该位是网络位,为0代表主机位。它和IP地址一样也是使用点式十进制来表示的。如果两个IP地址在子网掩码的按位与的计算下所得结果相同,即表明它们共属于同一子网中。
在计算子网掩码时,我们要注意IP地址中的保留地址,即“ 0”地址和广播地址,它们是指主机地址或网络地址全为“ 0”或“ 1”时的IP地址,它们代表着本网络地址和广播地址,一般是不能被计算在内的。
子网掩码的计算:
对于无须再划分成子网的IP地址来说,其子网掩码非常简单,即按照其定义即可写出:如某B类IP地址为 10.12.3.0,无须再分割子网,则该IP地址的子网掩码255.255.0.0。如果它是一个C类地址,则其子网掩码为 255.255.255.0。其它类推,不再详述。下面我们关键要介绍的是一个IP地址,还需要将其高位主机位再作为划分出的子网网络号,剩下的是每个子网的主机号,这时该如何进行每个子网的掩码计算。
下面总结一下有关子网掩码和网络划分常见的面试考题:
1)利用子网数来计算
在求子网掩码之前必须先搞清楚要划分的子网数目,以及每个子网内的所需主机数目。
(1) 将子网数目转化为二进制来表示;
如欲将B类IP地址168.195.0.0划分成27个子网:27=11011;
(2) 取得该二进制的位数,为N;
该二进制为五位数,N = 5
(3) 取得该IP地址的类子网掩码,将其主机地址部分的的前N位置1即得出该IP地址划分子网的子网掩码。
将B类地址的子网掩码255.255.0.0的主机地址前5位置 1,得到 255.255.248.0
2)利用主机数来计算
如欲将B类IP地址168.195.0.0划分成若干子网,每个子网内有主机700台:
(1) 将主机数目转化为二进制来表示;
700=1010111100;
(2) 如果主机数小于或等于254(注意去掉保留的两个IP地址),则取得该主机的二进制位数,为N,这里肯定 N<8。如果大于254,则 N>8,这就是说主机地址将占据不止8位;
该二进制为十位数,N=10;
(3) 使用255.255.255.255来将该类IP地址的主机地址位数全部置1,然后从后向前的将N位全部置为 0,即为子网掩码值。
将该B类地址的子网掩码255.255.0.0的主机地址全部置1,得到255.255.255.255,然后再从后向前将后 10位置0,即为:11111111.11111111.11111100.00000000,即255.255.252.0。这就是该欲划分成主机为700台的B类IP地址 168.195.0.0的子网掩码。
3)还有一种题型,要你根据每个网络的主机数量进行子网地址的规划和计算子网掩码。这也可按上述原则进行计算。
比如一个子网有10台主机,那么对于这个子网需要的IP地址是:
10+1+1+1=13
注意:加的第一个1是指这个网络连接时所需的网关地址,接着的两个1分别是指网络地址和广播地址。
因为13小于16(16等于2的4次方),所以主机位为4位。而256-16=240,所以该子网掩码为255.255.255.240。
如果一个子网有14台主机,不少人常犯的错误是:依然分配具有16个地址空间的子网,而忘记了给网关分配地址。这样就错误了,因为14+1+1+1=17,17大于16,所以我们只能分配具有32个地址(32等于2的5次方)空间的子网。这时子网掩码为:255.255.255.224。
ARP/RARP协议
地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。地址解析协议是建立在网络中各个主机互相信任的基础上的,网络上的主机可以自主发送ARP应答消息,其他主机收到应答报文时不会检测该报文的真实性就会将其记入本机ARP缓存;由此攻击者就可以向某一主机发送伪ARP应答报文,使其发送的信息无法到达预期的主机或到达错误的主机,这就构成了一个ARP欺骗。ARP命令可用于查询本机ARP缓存中IP地址和MAC地址的对应关系、添加或删除静态对应关系等。
ARP协议工作流程:
逆地址解析协议,即RARP,功能和ARP协议相对,其将局域网中某个主机的物理地址转换为IP地址,比如局域网中有一台主机只知道物理地址而不知道IP地址,那么可以通过RARP协议发出征求自身IP地址的广播请求,然后由RARP服务器负责回答。
RARP协议工作流程:
(1)给主机发送一个本地的RARP广播,在此广播包中,声明自己的MAC地址并且请求任何收到此请求的RARP服务器分配一个IP地址;
(2)本地网段上的RARP服务器收到此请求后,检查其RARP列表,查找该MAC地址对应的IP地址;
(3)如果存在,RARP服务器就给源主机发送一个响应数据包并将此IP地址提供给对方主机使用;
(4)如果不存在,RARP服务器对此不做任何的响应;
(5)源主机收到从RARP服务器的响应信息,就利用得到的IP地址进行通讯;如果一直没有收到RARP服务器的响应信息,表示初始化失败。
请简述TCP/UDP的区别
TCP和UDP是OSI模型中的运输层中的协议。TCP提供可靠的通信传输,而UDP则常被用于让广播和细节控制交给应用的通信传输。
两者的区别大致如下:TCP面向连接,UDP面向非连接即发送数据前不需要建立链接
TCP提供可靠的服务(数据传输),UDP无法保证
TCP面向字节流,UDP面向报文
TCP数据传输慢,UDP数据传输快
TCP提供一种面向连接的、可靠的字节流服务
在一个TCP连接中,仅有两方进行彼此通信,因此广播和多播不能用于TCP
TCP使用校验和,确认和重传机制来保证可靠传输
TCP使用累积确认
TCP使用滑动窗口机制来实现流量控制,通过动态改变窗口的大小进行拥塞控制
TCP和UDP的应用场景
TCP:当对网络通讯质量有要求的时候,比如:整个数据要准确无误的传递给对方,这往往用于一些要求可靠的应用,比如HTTP、HTTPS、FTP等传输文件的协议,POP、SMTP等邮件传输的协议。
在日常生活中,常见使用TCP协议的应用如:浏览器,用的HTTP;FlashFXP,用的FTP;Outlook,用的POP、SMTP;Putty,用的Telnet、SSH;QQ文件传输UDP:当强调传输性能而不是传输的完整性时, 要求网络通讯速度能尽量的快。如:QQ语音 QQ视频等。
TCP对应的协议和UDP对应的协议
TCP对应的协议:FTP:定义了文件传输协议,使用21端口。
Telnet:一种用于远程登陆的端口,使用23端口,用户可以以自己的身份远程连接到计算机上,可提供基于DOS模式下的通信服务。
SMTP:邮件传送协议,用于发送邮件。服务器开放的是25号端口。
POP3:它是和SMTP对应,POP3用于接收邮件。POP3协议所用的是110端口。
HTTP:是从Web服务器传输超文本到本地浏览器的传送协议,端口默认80。
UDP对应的协议:DNS:用于域名解析服务,将域名地址转换为IP地址。DNS用的是53号端口。
SNMP:简单网络管理协议,使用161号端口,是用来管理网络设备的。由于网络设备很多,无连接的服务就体现出其优势。
TFTP(Trival File TransferProtocal),简单文件传输协议,该协议在熟知端口69上使用UDP服务。
为什么 TCP 叫数据流模式? UDP 叫数据报模式?
所谓的“流模式”,是指TCP发送端发送几次数据和接收端接收几次数据是没有必然联系的,比如你通过 TCP连接给另一端发送数据,你只调用了一次 write,发送了100个字节,但是对方可以分10次收完,每次10个字节;你也可以调用10次write,每次10个字节,但是对方可以一次就收完。
原因:这是因为TCP是面向连接的,一个 socket 中收到的数据都是由同一台主机发出,且有序地到达,所以每次读取多少数据都可以。
所谓的“数据报模式”,是指UDP发送端调用了几次 write,接收端必须用相同次数的 read 读完。UDP是基于报文的,在接收的时候,每次最多只能读取一个报文,报文和报文是不会合并的,如果缓冲区小于报文长度,则多出的部分会被丢弃。
原因:这是因为UDP是无连接的,只要知道接收端的 IP 和端口,任何主机都可以向接收端发送数据。 这时候,如果一次能读取超过一个报文的数据, 则会乱套。
TCP中的流量控制和拥塞控制
注:tcp协议如何保证传输的可靠性流量控制主要针对的是端到端传输中控制流量大小并保证传输可靠性(未收到ack就不滑动)。流量控制往往是指点对点通信量的控制,所要做的是抑制发送端发送数据的速率。
拥塞控制主要是一个全局性过程,涉及到所有主机,路由器,以及与降低网络传输性能有关的所有因素。防止过多的数据注入到网络中。如果有发生丢包则通过拥塞控制减小窗口,确定出合适(慢启动 拥塞避免 快重传 快恢复)的拥塞窗口(增性加乘性减)。
详见博客链接(重点)以及《计算机网络》(谢希仁)。说一说TCP的三次握手和四次挥手
在TCP/IP协议中,TCP协议提供可靠的连接服务,连接是通过三次握手进行初始化的。三次握手的目的是同步连接双方的序列号和确认号并交换TCP窗口大小信息核心思想:让双方都证实对方能发收。知道对方能收是因为收到对方的因为收到信息之后发的回应(ACK)。
详解见一个总结的很好的博客请简单说一下你了解的端口及对应的服务
端口详解链接(百度百科)
端口
注意区别硬件端口。软件端口是应用层的各种协议进程与运输实体进行层间交互的一种地址。
端口号只具有本地意义,它只为标志计算机应用层中的各个进程在和运输层交互时的层间接口,在互联网不同计算机中,相同的端口号是没有关联的。
两个计算机的进程相互通信,不仅需要知道对方的IP地址(为了找到对方计算机),还要知道对方的端口号(为了找到对方计算机中的应用进程)
两大类:1.服务器端使用的端口号(常用熟知)2.客户端使用的端口号(短暂)。TCP如何实现可靠性传输
确认机制、重传机制、滑动窗口。UDP如何实现可靠性传输
传输层无法保证数据的可靠传输,只能通过应用层来实现了。实现的方式可以参照tcp可靠性传输的方式,只是实现不在传输层,实现转移到了应用层。实现确认机制、重传机制、窗口确认机制。
如果你不利用linux协议栈以及上层socket机制,自己通过抓包和发包的方式去实现可靠性传输,那么必须实现如下功能:
发送:包的分片、包确认、包的重发
接收:包的调序、包的序号确认
注:
1)给数据包编号,按照包的顺序接收并存储;
2)接收端接收到数据包后发送确认信息给发送端,发送端接收确认数据以后再继续发送下一个包,如果接收端收到的数据包的编号不是期望的编号,则要求发送端重新发送。目前有如下开源程序利用udp实现了可靠的数据传输。分别为RUDP、RTP、UDT。
在浏览器中输入www.baidu.com后执行的全部过程
一个总结的比较好的博客1、应用层:客户端浏览器通过DNS解析到www.baidu.com的IP地址220.181.27.48,通过这个IP地址找到客户端到服务器的路径。客户端浏览器发起一个HTTP会话到220.161.27.48,然后通过TCP进行封装数据包,输入到网络层。
DNS解析过程
HTTP请求与响应
2、运输层:在客户端的传输层,把HTTP会话请求分成报文段,添加源和目的端口,如服务器使用80端口监听客户端的请求,客户端由系统随机选择一个端口如5000,与服务器进行交换,服务器把相应的请求返回给客户端的5000端口。然后使用IP层(网络层)的IP地址查找目的端。
3、网络层:客户端的网络层不用关心应用层或者传输层的东西,主要做的是通过查找路由表确定如何到达服务器,期间可能经过多个路由器,这些都是由路由器来完成的工作,我不作过多的描述,无非就是通过查找路由表决定通过那个路径到达服务器。
4、链路层:客户端的链路层,包通过链路层发送到路由器,通过邻居协议查找给定IP地址的MAC地址,然后发送ARP请求查找目的地址,如果得到回应后就可以使用ARP的请求应答交换的IP数据包现在就可以传输了,然后发送IP数据包到达服务器的地址。
交换机、路由器的概念,并知道各自的用途
交换机
在计算机网络系统中,交换机是针对共享工作模式的弱点而推出的。交换机拥有一条高带宽的背部总线和内部交换矩阵。交换机的所有的端口都挂接在这条背部总线上,当控制电路收到数据包以后,处理端口会查找内存中的地址对照表以确定目的MAC(网卡的硬件地址)的NIC(网卡)挂接在哪个端口上,通过内部交换矩阵迅速将数据包传送到目的端口。目的MAC若不存在,交换机才广播到所有的端口,接收端口回应后交换机会“学习”新的地址,并把它添加入内部地址表中。
交换机工作于OSI参考模型的第二层,即数据链路层。交换机内部的CPU会在每个端口成功连接时,通过ARP协议学习它的MAC地址,保存成一张ARP表。在今后的通讯中,发往该MAC地址的数据包将仅送往其对应的端口,而不是所有的端口。因此,交换机可用于划分数据链路层广播,即冲突域;但它不能划分网络层广播,即广播域。
路由器
路由器(Router)是一种计算机网络设备,提供了路由与转发两种重要机制,可以决定数据包从来源端到目的端所经过的路由路径(host到host之间的传输路径),这个过程称为路由;将路由器输入端的数据包移送至适当的路由器输出端(在路由器内部进行),这称为转送。路由工作在OSI模型的第三层——即网络层,例如IP协议。
路由器的一个作用是连通不同的网络,另一个作用是选择信息传送的线路。 路由器与交换器的差别,路由器是属于OSI第三层的产品,交换器是OSI第二层的产品(这里特指二层交换机)。
HTTP(超文本传输协议)
HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。HTTP是一个基于TCP/IP通信协议来传递数据,默认端口号为80。
HTTP工作原理
HTTP协议定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端。
HTTP 请求/响应的步骤
1、客户端连接到Web服务器
一个HTTP客户端,通常是浏览器,与Web服务器的HTTP端口(默认为80)建立一个TCP套接字连接。例如,http://www.oakcms.cn。
2、发送HTTP请求
通过TCP套接字,客户端向Web服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求数据4部分组成。
3、服务器接受请求并返回HTTP响应
Web服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取。一个响应由状态行、响应头部、空行和响应数据4部分组成。
4、释放连接TCP连接
若connection 模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求;
5、客户端浏览器解析HTML内容
客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码。然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口中显示。
HTTP消息结构
HTTP是基于客户端/服务端(C/S)的架构模型
客户端发送一个HTTP请求到服务器的请求消息包括以下格式:请求行(request line)、请求头部(header)、空行和请求数据四个部分组成,请求报文的一般格式
HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。
http常见状态码有哪些?
状态码告知从服务器端返回的请求结果。2开头状态码
2xx (成功)表示成功处理了请求的状态代码
200 (成功) 服务器已成功处理了请求。 通常。
3开头状态码
3xx (重定向) 表示要完成请求,需要进一步操作。 通常,这些状态代码用来重定向。
304 (未修改) 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。
4开头状态码
4xx(请求错误) 这些状态代码表示请求可能出错,妨碍了服务器的处理
1:400 (错误请求) 服务器不理解请求的语法。2:403 (禁止) 服务器拒绝请求。
3:404 (未找到) 服务器找不到请求的网页。
5开头状态码
5xx(服务器错误)这些状态代码表示服务器在尝试处理请求时发生内部错误。 这些错误可能是服务器本身的错误,而不是请求出错
500 (服务器内部错误) 服务器遇到错误,无法完成请求。501 (尚未实施) 服务器不具备完成请求的功能。 例如,服务器无法识别请求方法时可能会返回此代码。
502 (错误网关) 服务器作为网关或代理,从上游服务器收到无效响应。
503 (服务不可用) 服务器目前无法使用(由于超载或停机维护)。 通常,这只是暂时状态。
504 (网关超时) 服务器作为网关或代理,但是没有及时从上游服务器收到请求。
505 (HTTP 版本不受支持) 服务器不支持请求中所用的 HTTP 协议版本。
重点:200,304,403,404,500
HTTP与HTTPS区别
1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
HTTPS工作原理
更容易理解的一个链接
HTTP1.0和HTTP1.1的区别
HTTP长连接与短链接在HTTP/1.0中默认使用短连接。也就是说,客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。当客户端浏览器访问的某个HTML或其他类型的Web页中包含有其他的Web资源(如JavaScript文件、图像文件、CSS文件等),每遇到这样一个Web资源,浏览器就会重新建立一个HTTP会话。
而从HTTP/1.1起,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,会在响应头加入这行代码:
Connection:keep-alive
在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接需要客户端和服务端都支持长连接。
HTTP协议的长连接和短连接,实质上是TCP协议的长连接和短连接。
DNS域名系统,简单描述其工作原理。
链接当DNS客户机需要在程序中使用名称时,它会查询DNS服务器来解析该名称。客户机发送的每条查询信息包括三条信息:包括:指定的DNS域名,指定的查询类型,DNS域名的指定类别。基于UDP服务,端口53. 该应用一般不直接为用户使用,而是为其他应用服务,如HTTP,SMTP等在其中需要完成主机名到IP地址的转换。
路由选择协议
路由选择协议的任务就是要确定数据报在源与目的地之间采用的路径。路由选择协议分为:静态的和动态的。Internet中使用的是动态路由选择协议,在Internet的概念中,将整个互联网划分为许多个小的自治系统(AS)。AS的最主要的特征:一个AS对其他AS表现出的是一个单一 和一致的路由选择策略。
由于AS的存在,路由选择协议又分为两种:
内部网关协议(IGP):即在一个AS内部使用的路由选择协议,而这与互联网中其他AS选用什么路由协议无关。比如:RIP,OSPF
外部网关协议(EGP):若源主机和目的主机不再同一个AS中,就需要使用一种协议将路由选择信息传递到另一个AS中,这就是EGP。比如:BGP。
重传机制
网络万一阻塞了呢?发出去的请求包在规定时间内没有收到ACK,不管是请求包丢失,还是ACK包丢失,还是网络延迟,总之,这里都是需要有个重传机制的。TCP的重传机制有两种:超时重传和快速重传。超时重传
说白了就是在请求包发出去的时候,开启一个计时器,当计时器达到时间之后,没有收到ACK,则就进行重发请求的操作,一直重发直到达到重发上限次数或者收到ACK。快速重传
还有一种机制就是快速重传,当接收方收到的数据包是不正常的序列号,那么接收方会重复把应该收到的那一条ACK重复发送,这个时候,如果发送方收到连续3条的同一个序列号的ACK,那么就会启动快速重传机制,把这个ACK对应的发送包重新发送一次。具体可以参考:TCP/IP通信过程(以发送电子邮件为例)
socket通信原理
网络编程中的基本概念TCP粘包问题
1 什么是粘包现象
TCP粘包是指发送方发送的若干包数据到接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾。2 为什么出现粘包现象
(1)发送方原因我们知道,TCP默认会使用Nagle算法。而Nagle算法主要做两件事:1)只有上一个分组得到确认,才会发送下一个分组;2)收集多个小分组,在一个确认到来时一起发送。
所以,正是Nagle算法造成了发送方有可能造成粘包现象。
(2)接收方原因
TCP接收到分组时,并不会立刻送至应用层处理,或者说,应用层并不一定会立即处理;实际上,TCP将收到的分组保存至接收缓存里,然后应用程序主动从缓存里读收到的分组。这样一 来,如果TCP接收分组的速度大于应用程序读分组的速度,多个包就会被存至缓存,应用程序读时,就会读到多个首尾相接粘到一起的包。
3 什么时候需要处理粘包现象
(1)如果发送方发送的多个分组本来就是同一个数据的不同部分,比如一个很大的文件被分成多个分组发送,这时,当然不需要处理粘包的现象;(2)但如果多个分组本毫不相干,甚至是并列的关系,我们就一定要处理粘包问题了。
4 如何处理粘包现象
(1)发送方对于发送方造成的粘包现象,我们可以通过关闭Nagle算法来解决,使用TCP_NODELAY选项来关闭Nagle算法。
(2)接收方
遗憾的是TCP并没有处理接收方粘包现象的机制,我们只能在应用层进行处理。
(3)应用层处理
应用层的处理简单易行!并且不仅可以解决接收方造成的粘包问题,还能解决发送方造成的粘包问题。
解决方法就是循环处理:应用程序在处理从缓存读来的分组时,读完一条数据时,就应该循环读下一条数据,直到所有的数据都被处理;但是如何判断每条数据的长度呢?
两种途径:
1)格式化数据:每条数据有固定的格式(开始符、结束符),这种方法简单易行,但选择开始符和结束符的时候一定要注意每条数据的内部一定不能出现开始符或结束符;
2)发送长度:发送每条数据的时候,将数据的长度一并发送,比如可以选择每条数据的前4字节是数据的长度(一个int来储存数据长度大小),应用层处理时可以根据长度来判断每条数据的开始和结束。
详细还可以参考此博客:链接
TCP协议中的三次握手四次挥手以及11种状态转换
链接地址注:
TIME_WAIT状态的作用:
1、可靠地实现TCP的连接终止。
在终止TCP连接时有4个报文需要交换,其中最后一个ACK报文是由客户端发往服务器。假设这个ACK报文在网络中被丢弃了,那么服务器端收不到这个确认ACK,服务器端会向客户端再次发送FIN。这就是为什么TIME_WAIT状态持续2倍的最长报文段生存时间:1MSL时间留给最后的ACK确认报文段到达服务器端,1MSL时间留给服务器端再次发送的FIN。
2、确保老的重复的报文段在网络中过期失效,这样建立新的连接时将不再接受它们。
TCP协议采用的是出错重传,也就是会生成重复的报文,并且根据路由器的选择,这些重复的报文可能在连接终止后才到达,如果客户端/服务器端收到这个老的报文会把它误认为一个同一连接的新的报文,然后对这个报文进行处理,这样就会出现错误。从状态转换图我们可以看到从TIME_WAIT到连接终止,中间有2MSL,这个时间足以让老的重复的报文段过期失效。 -
计算机网络面试题总结.pdf
2021-04-02 14:19:12计算机网络面试题总结.pdf -
计算机网络面试题总结(持续更新中~)
2019-08-22 21:02:03C/C++面试题总结 数据结构与算法面试题总结 操作系统面试题总结 设计模式面试题总结 数据库面试总结 1、OSI,TCP/IP,五层协议的体系结构,以及各层协议? 参考答案: OSI分层 (7层):物理层、数据链路...以下题目整理自:牛客网
相关总结:
C/C++面试题总结
数据结构与算法面试题总结
操作系统面试题总结
设计模式面试题总结
数据库面试总结
1、OSI,TCP/IP,五层协议的体系结构,以及各层协议?
参考答案:
OSI分层 (7层):物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。
TCP/IP分层(4层):网络接口层、 网际层、传输层、 应用层。
五层协议 (5层):物理层、数据链路层、网络层、传输层、 应用层。
每一层的协议如下:
物理层:RJ45、CLOCK、IEEE802.3 (中继器,集线器)
数据链路:PPP、FR、HDLC、VLAN、MAC (网桥,交换机)
网络层:IP、ICMP、ARP、RARP、OSPF、IPX、RIP、IGRP、 (路由器)
传输层:TCP、UDP、SPX
会话层:NFS、SQL、NETBIOS、RPC
表示层:JPEG、MPEG、ASII
应用层:FTP、DNS、Telnet、SMTP、HTTP、WWW、NFS
每一层的作用如下:
物理层:通过媒介传输比特,确定机械及电气规范(比特Bit)
数据链路层:将比特组装成帧和点到点的传递(帧Frame)
网络层:负责数据包从源到宿的传递和网际互连(包PackeT)
传输层:提供端到端的可靠报文传递和错误恢复(段Segment)
会话层:建立、管理和终止会话(会话协议数据单元SPDU)
表示层:对数据进行翻译、加密和压缩(表示协议数据单元PPDU)
应用层:允许访问OSI环境的手段(应用协议数据单元APDU)2、IP地址的分类?
参考答案:
A类地址:以0开头, 第一个字节范围:1~126(1.0.0.0 - 126.255.255.255);
B类地址:以10开头, 第一个字节范围:128~191(128.0.0.0 - 191.255.255.255);
C类地址:以110开头, 第一个字节范围:192~223(192.0.0.0 - 223.255.255.255);
D类地址:以1110开头,第一个字节范围:224~239(224.0.0.0 - 239.255.255.255);(作为多播使用)
E类地址:保留
其中A、B、C是基本类,D、E类作为多播和保留使用。
以下是留用的内部私有地址:
A类 10.0.0.0--10.255.255.255
B类 172.16.0.0--172.31.255.255
C类 192.168.0.0--192.168.255.255
IP地址与子网掩码相与得到网络号:
ip : 192.168.2.110
&
Submask : 255.255.255.0
----------------------------
网络号 :192.168.2 .0
注:主机号,全为0的是网络号(例如:192.168.2.0),主机号全为1的为广播地址(192.168.2.255)
3、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响应。
4、各种协议的介绍:
参考答案:
ICMP协议: 因特网控制报文协议。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。
TFTP协议: 是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。
HTTP协议: 超文本传输协议,是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。
NAT协议:网络地址转换属接入广域网(WAN)技术,是一种将私有(保留)地址转化为合法IP地址的转换技术,
DHCP协议:动态主机配置协议,是一种让系统得以连接到网络上,并获取所需要的配置参数手段,使用UDP协议工作。
具体用途:给内部网络或网络服务供应商自动分配IP地址,给用户或者内部网络管理员作为对所有计算机作中央管理的手段。
5、描述RARP协议
参考答案:
RARP是逆地址解析协议。
作用:完成硬件地址到IP地址的映射,主要用于无盘工作站,因为给无盘工作站配置的IP地址不能保存。
工作流程:在网络中配置一台RARP服务器,里面保存着IP地址和MAC地址的映射关系,当无盘工作站启动后,就封装一个RARP数据包,里面有其MAC地址,然后广播到网络上去,当服务器收到请求包后,就查找对应的MAC地址的IP地址装入响应报文中发回给请求者。因为需要广播请求报文,因此RARP只能用于具有广播能力的网络。
6、TCP三次握手和四次挥手的全过程
参考答案:
三次握手
第一次握手:客户端发送syn包(syn=x)到服务器,并进入SYN_SEND状态,等待服务器确认;第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(syn=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。
三次握手简化版
第一次握手,发送SYN报文,传达信息:“你好,我想建立连接”;
第二次握手,回传SYN+ACK报文,传达信息:“好的,可以建立链接”;
第三次握手,回传ACK报文,传到信息:“好的,我知道了,那我们连接”。然后就建立连接了。在发送报文之前各方都要确认可以进行连接。
四次挥手
与建立连接的“三次握手”类似,断开一个TCP连接则需要“四次握手”。第一次挥手:主动关闭方发送一个FIN,用来关闭主动方到被动关闭方的数据传送,也就是主动关闭方告诉被动关闭方:我已经不会再给你发数据了(当然,在fin包之前发送出去的数据,如果没有收到对应的ack确认报文,主动关闭方依然会重发这些据),但是,此时主动关闭方还可以接受数据。
第二次挥手:被动关闭方收到FIN包后,发送一个ACK给对方,确认序号为收到序号+1(与SYN相同,一个FIN占用一个号)。
第三次挥手:被动关闭方发送一个FIN,用来关闭被动关闭方到主动关闭方的数据传送,也就是告诉主动关闭方,我的数据也发送完了,不会再给你发数据了。
第四次挥手:主动关闭方收到FIN后,发送一个ACK给被动关闭方,确认序号为收到序号+1,至此,完成四次挥手。
四次挥手简化版
第一次挥手:客户端发送一个FIN包给服务器,说:"我要发的数据发送完了,我关闭数据传输通道了"。
第二次挥手:服务器收到FIN包后,发送一个ACK包给客户端,说:"好的,你传输的数据我都接受到了"。
第三次挥手:服务器发送FIN包给客户端,关闭数据传送通道,"我的数据也发送完了,我的数据传输通道也关闭了"。
第四次挥手:客户端收到FIN,发送一个ACK包给服务器,"好的,你的数据我也都接受完了,拜拜"。
7、为什么要三次握手?而不是两次握手?(为什么客户端最后一次还要发送一次确认)
参考答案:
主要为了防止已失效的连接请求报文段突然又连接到了服务器,因而产生错误。
之所以采取三次握手机制,不过是为了信息传输的可靠性,如果其中某个握手失败,这个过程将会重复,来确保其可靠性。
如果采取两次握手,相当于第二次握手结束便建立连接,如果发送SYN的一方不想连接了,也不会有反馈,另一方却一直在等待,浪费了时间。
当然可以采取4次甚至N次握手,但是有必要吗?建立连接的时间太长,效果也会大打折扣。
所以3次只是折中方案,既保证了可靠性,又节省了建立连接的时间。
已失效的连接请求报文段是指: 客户端发出的第一个连接请求报文段未丢失,而是长时间滞留了,以致延误到连接释放的某个时间才到达服务器。本来这是一个早已失效的报文段。但服务器收到此失效的连接请求报文段后,误以为是客户端又发出一次新的连接请求。于是就向客户端发出确认报文段,同意建立连接。而客户端并未真正发出建立连接请求,因此不会向服务器发送数据,服务器却一直等待客户端发送数据,这样就白白浪费了服务器的许多资源。
8、为什么客户端在TIME-WAIT状态必须等待2MSL的时间?
参考答案:
第一,为了保证客户端发送的最后一个ACK报文段能到达服务器。
第二,为了防止已失效的连接请求报文段连接服务器。
补充:
如果已经建立了连接,但是客户端突然出现故障了怎么办?
TCP还设有一个保活计时器,显然,客户端如果出现故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75秒钟发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。
9、在浏览器中输入www.baidu.com后执行的全部过程
参考答案:
① 客户端浏览器通过DNS解析到www.baidu.com 的IP地址220.181.27.48,通过这个IP地址找到客户端到服务器的路径。客户端浏览器发起一个HTTP会话到220.181.27.48,然后通过TCP进行封装数据包,输入到网络层。
② 在客户端的传输层,把HTTP会话请求分成报文段,添加源和目的端口,如服务器使用80端口监听客户端的请求,客户端由系统随机选择一个端口如5000,与服务器进行交换,服务器把相应的请求返回给客户端的5000端口。然后使用IP层的IP地址查找目的端。
③ 客户端的网络层不用关心应用层或者传输层的东西,主要做的是通过查找路由表确定如何到达服务器,期间可能经过多个路由器,这些都是由路由器来完成的工作,无非就是通过查找路由表决定通过那个路径到达服务器。
④ 客户端的数据链路层,包通过链路层发送到路由器,通过ARP协议查找给定IP地址的MAC地址,然后发送ARP请求查找目的地址,如果得到回应后,就可以使用ARP的请求应答交换的IP数据包,现在就可以传输了,然后发送IP数据包到达服务器的地址。
10、TCP和UDP的区别?
参考答案:
① 区别
- TCP提供面向连接的、可靠的数据流传输,而UDP提供的是非面向连接的、不可靠的数据流传输。
- TCP传输单位称为TCP报文段,UDP传输单位称为用户数据报。
- TCP注重数据安全性,UDP数据传输快,因为不需要连接等待,少了许多操作,但是其安全性却一般。
② TCP对应的协议:
(1) FTP:定义了文件传输协议,使用21端口。
(2) Telnet:一种用于远程登陆的端口,使用23端口,用户可以以自己的身份远程连接到计算机上,可提供基于DOS模式下的通信服务。
(3) SMTP:简单邮件传送协议,用于发送邮件。服务器开放的是25号端口。
(4) POP3:它是和SMTP对应,POP3用于接收邮件。POP3协议所用的是110端口。
(5)HTTP:是从Web服务器传输超文本到本地浏览器的传送协议。
③ UDP对应的协议:
(1) DNS:用于域名解析服务,将域名地址(如www.baidu.com)转换为IP地址(119.75.220.12)。DNS用的是53号端口。
(2) SNMP:简单网络管理协议,使用161号端口,是用来管理网络设备的。由于网络设备很多,无连接的服务就体现出其优势。
(3) TFTP(Trival File Transfer Protocal),简单文件传输协议,该协议在熟知端口69上使用UDP服务。11、DNS域名系统,简单描述其工作原理。
参考答案:
当DNS客户机需要在程序中使用名称时,它会查询DNS服务器来解析该名称。客户机发送的每条查询信息包括三条信息,包括:指定的DNS域名,指定的查询类型,DNS域名的指定类别。基于UDP服务,端口53。 该应用一般不直接为用户使用,而是为其他应用服务,如HTTP,SMTP等在其中需要完成主机名到IP地址的转换。
补充:转自DNS(Domain Name System,域名系统)
1) 什么是 DNS?
DNS(Domain Name System,域名系统),因特网上作为域名和 IP 地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的 IP 数串。通过主机名,最终得到该主机名对应的 IP 地址的过程叫做域名解析(或主机名解析)。通俗的讲,我们更习惯于记住一个网站的名字,比如 www.baidu.com,而不是记住它的 ip 地址,比如:167.23.10.2。而计算机更擅长记住网站的 ip 地址,而不是像www.baidu.com 等链接。因为,DNS 就相当于一个电话本,比如你要找 www.baidu.com这个域名,那我翻一翻我的电话本,我就知道,哦,它的电话(ip)是 167.23.10.2。
2) DNS 查询的两种方式:递归查询和迭代查询
1、递归解析
当局部 DNS 服务器自己不能回答客户机的 DNS 查询时,它就需要向其他DNS 服务器进行查询。此时有两种方式,一种是递归方式。局部 DNS服务器自己负责向其他 DNS 服务器进行查询,一般是先向该域名的根域服务器查询,再由根域名服务器一级级向下查询。最后得到的查询结果返回给局部 DNS服务器,再由局部 DNS 服务器返回给客户端。
2、迭代解析
当局部 DNS 服务器自己不能回答客户机的 DNS 查询时,也可以通过迭代查询的方式进行解析。局部 DNS 服务器不是自己向其他 DNS 服务器进行查询,而是把能解析该域名的其他 DNS 服务器的 IP 地址返回给客户端DNS 程序,客户端 DNS 程序再继续向这些 DNS 服务器进行查询,直到得到查询结果为止。也就是说,迭代解析只是帮你找到相关的服务器而已,而不会帮你去查。
3) DNS 负载均衡
当一个网站有足够多的用户的时候,假如每次请求的资源都位于同一台机器上面,那么这台机器随时可能会崩溃。处理办法就是用 DNS 负载均衡技术,它的原理是在 DNS 服务器中为同一个主机名配置多个 IP 地址,在应答 DNS 查询时,DNS 服务器对每个查询将以DNS 文件中主机记录的 IP 地址按顺序返回不同的解析结果,将客户端的访问引导到不同的机器上去,使得不同的客户端访问不同的服务器,从而达到负载均衡的目的。例如可以根据每台机器的负载量,该机器离用户地理位置的距离等等。
12、了解交换机、路由器、网关的概念,并知道各自的用途。
参考答案:
1)交换机
在计算机网络系统中,交换机是针对共享工作模式的弱点而推出的。交换机拥有一条高带宽的背部总线和内部交换矩阵。交换机的所有的端口都挂接在这条背部总线上,当控制电路收到数据包以后,处理端口会查找内存中的地址对照表以确定目的MAC(网卡的硬件地址)的NIC(网卡)挂接在哪个端口上,通过内部交换矩阵迅速将数据包传送到目的端口。目的MAC若不存在,交换机才广播到所有的端口,接收端口回应后交换机会“学习”新的地址,并把它添加入内部地址表中。
交换机工作于OSI参考模型的第二层,即数据链路层。交换机内部的CPU会在每个端口成功连接时,通过ARP协议学习它的MAC地址,保存成一张 ARP表。在今后的通讯中,发往该MAC地址的数据包将仅送往其对应的端口,而不是所有的端口。因此,交换机可用于划分数据链路层广播,即冲突域;但它不 能划分网络层广播,即广播域。
交换机被广泛应用于二层网络交换,俗称“二层交换机”。
交换机的种类有:二层交换机、三层交换机、四层交换机、七层交换机分别工作在OSI七层模型中的第二层、第三层、第四层和第七层,并因此而得名。
2)路由器
路由器(Router)是一种计算机网络设备,提供了路由与转送两种重要机制,可以决定数据包从来源端到目的端所经过的路由路径(host到host之间的传输路径),这个过程称为路由;将路由器输入端的数据包移送至适当的路由器输出端(在路由器内部进行),这称为转送。路由工作在OSI模型的第三层——即网络层,例如网际协议。
路由器的一个作用是连通不同的网络,另一个作用是选择信息传送的线路。 路由器与交换器的差别,路由器是属于OSI第三层的产品,交换器是OSI第二层的产品(这里特指二层交换机)。
3)网关
网关(Gateway),网关顾名思义就是连接两个网络的设备,区别于路由器(由于历史的原因,许多有关TCP/IP 的文献曾经把网络层使用的路由器(Router)称为网关,在今天很多局域网采用都是路由来接入网络,因此现在通常指的网关就是路由器的IP),经常在家庭中或者小型企业网络中使用,用于连接局域网和Internet。 网关也经常指把一种协议转成另一种协议的设备,比如语音网关。
在传统TCP/IP术语中,网络设备只分成两种,一种为网关(gateway),另一种为主机(host)。网关能在网络间转递数据包,但主机不能转送数据包。在主机(又称终端系统,end system)中,数据包需经过TCP/IP四层协议处理,但是在网关(又称中介系统,intermediate system)只需要到达网际层(Internet layer),决定路径之后就可以转送。在当时,网关 (gateway)与路由器(router)还没有区别。
在现代网络术语中,网关(gateway)与路由器(router)的定义不同。网关(gateway)能在不同协议间移动数据,而路由器(router)是在不同网络间移动数据,相当于传统所说的IP网关(IP gateway)。
网关是连接两个网络的设备,对于语音网关来说,他可以连接PSTN网络和以太网,这就相当于VOIP,把不同电话中的模拟信号通过网关而转换成数字信号,而且加入协议再去传输。在到了接收端的时候再通过网关还原成模拟的电话信号,最后才能在电话机上听到。
对于以太网中的网关只能转发三层以上数据包,这一点和路由是一样的。而不同的是网关中并没有路由表,他只能按照预先设定的不同网段来进行转发。网关最重要的一点就是端口映射,子网内用户在外网看来只是外网的IP地址对应着不同的端口,这样看来就会保护子网内的用户。
13、TCP如何实现可靠传输?
- 校验和:TCP 将保持它首部和数据的检验和,这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP 将丢弃这个报文段和不确认收到此报文段;
- 将数据切割成合理的长度(应用数据被分割成 TCP 最认为适合发送的数据块大小)
- 有序接受(TCP 给发送的每一个包进行编号,接收方对数据包进行排序,把有序数据传送给应用层)
- 丢弃重复的数据(TCP 的接收端会丢弃重复的数据)
- 流量控制: TCP 连接的每一方都有固定大小的缓冲空间,TCP 接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据时,能提示发送方降低发送的速率,防止包丢失。TCP 使用的流量控制协议是可变大小的滑动窗口协议 ( TCP 利用滑动窗口实现流量控制);
- 拥塞控制: 当网络拥塞时,减少数据的发送;
- ARQ 协议: 也是为了实现可靠传输的,它的基本原理就是每发完一个分组就停止发送,并等待对方确认,在收到确认之后,再发下一个分组;
- 超时重传: 当 TCP 发出一个段后,会启动一个定时器,等待目的端确认收到这个报文段,如果不能及时收到这个确认,那么将重发这个报文段。
14、UDP如何实现可靠传输?
- 超时重传(定时器)
- 有序接受 (添加包序号)
- 应答确认 (Seq/Ack应答机制)
- 流量控制 (滑动窗口协议)
-
计算机网络面试题总结(HTTP)
2020-11-21 19:34:501、 简单快速: 客户向服务器请求服务时, 只需传送请求方法和路径。 请求方法常用的有GET、 HEAD、 POST。每种方法规定了客户与服务器联系的类型不同。 2、 灵活: ... 3、 持续连接和非持续连接: ...HTTP协议特点
1、 简单快速:
客户向服务器请求服务时, 只需传送请求方法和路径。 请求方法常用的有GET、 HEAD、 POST。每种方法规定了客户与服务器联系的类型不同。
2、 灵活:
HTTP 允许传输任意类型的数据对象。
3、 持续连接和非持续连接:
非持续连接时,每个TCP连接在服务器发送一个对象后就会关闭,也就是每个TCP只传送一个请求报文和响应报文
持续连接必须为每个请求新建一个TCP连接
4、 无状态:
HTTP 协议是无状态协议。 不存错任何关于该客户的状态信息
5、 默认端口 80
6、 基于 TCP 协议,保证可靠传输HTTP 请求报文格式
HTTP请求报文主要由请求行、请求头部、请求正文3部分组成1、请求行
由3部分组成,分别为:请求方法、URL以及协议版本,之间由空格分隔请求方法包括GET、HEAD、PUT、POST、TRACE、OPTIONS、DELETE以及扩展方法,当然并不是所有的服务器都实现了所有的方法,部分方法即便支持,处于安全性的考虑也是不可用的
协议版本的格式为:HTTP/主版本号.次版本号,常用的有HTTP/1.0和HTTP/1.1
2、请求头部
请求头部为请求报文添加了一些附加信息,由“名/值”对组成,每行一对,名和值之间使用冒号分隔
请求头部的最后会有一个空行,表示请求头部结束,接下来为请求正文,这一行非常重要,必不可少3、请求正文
可选部分,比如GET请求就没有请求正文
HTTP 响应报文
HTTP响应报文主要由状态行、响应头部、响应正文3部分组成1、状态行
由3部分组成,分别为:协议版本,状态码,状态码描述,之间由空格分隔
2、响应头部
与请求头部类似,为响应报文添加了一些附加信息HTTP状态码
- 1xx表示通知信息,如请求收到了或正在进行处理
- 2xx表示成功,如接受或知道了(例:200:请求成功 处理方式:获得响应的内容,进行处理)
- 3xx表示重定向,如要完成请求还必须采取进一步的行动(例:301:请求到的资源都会分配一个永久的URL,这样就可以在将来通过该URL来访问此资源 处理方式:重定向到分配的URL)
- 4xx表示客户的差错,如请求中有错误的语法或不能完成(例:400:非法请求 处理方式:丢弃;404:没有找到 处理方式:丢弃)
- 5xx表示服务器的差错,如服务器失效无法完成请求(例:505:服务器不支持请求报文使用的http版本)
HTTP过程概述
HTTP 请求/响应的步骤如下:
1、 DNS解析
浏览器查询 DNS,获取域名对应的 IP 地址
域名解析过程
依次:
- 浏览器搜索自身的 DNS缓存
- 缓存搜索操作系统的 DNS 缓存
- 主机向本地 DNS 服务器进行查询(递归)
所谓递归查询就是:如果主机所询问的本地域名服务器不知道被查询的域名的 IP 地址,那么本地域名服务器就以 DNS 客户的身份,向根域名服务器继续发出查询请求报文(即替主机继续查询),而不是让主机自己进行下一步查询 - 本地向根/顶级域名服务器进行查询(迭代)
迭代查询的特点:当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出所要查询的 IP 地址,要么告诉本地服务器:“你下一步应当向哪一个域名服务器进行查询”。然后让本地服务器进行后续的查询。
TCP连接
浏览器获得域名对应的 IP 地址以后,浏览器向服务器请求建立链接(IP 地址和默认端口 80),发起三次握手;
发送 HTTP 请求
TCP 连接建立起来后,浏览器向服务器发送 HTTP 请求
服务器处理请求并返回 HTTP 报文
Web 服务器解析请求, 定位请求资源。 服务器将资源写到 TCP 套接字, 由客户端读取
客户端浏览器解析 HTML 内容
浏览器解析并渲染视图,若遇到对 js 文件、css 文件及图片等静态资源的引用,则重复上述步骤并向服务器请求这些资源;浏览器根据其请求到的资源、数据渲染页面,最终向用户呈现一个完整的页面。
释放 TCP 连接
四次挥手
GET 和 POST 的区别
GET 和 POST 本质都是 HTTP 请求,但是作用不同
本质区别:GET 只是一次 HTTP请求,POST 先发请求头再发请求体,实际上是两次请求。
-
功能
GET 一般用来从服务器上获取资源
POST 一般用来更新服务器上的资源
。 -
请求参数形式
get 请求的数据会附在 URL 之后(请求数据放置在 HTTP 报文的 请求头 中),以 ? 分割 URL 和传输数据,参数之间以 & 相连。
post 请求把提交的数据放在HTTP 请求报文的 请求体 中 -
安全性
get 比 post 更不安全, 因为参数直接暴露在 url 中, 所以不能用来传递敏感信息。get 请求只能进行 url 编码, 而 post 支持多种编码方式。 -
长度限制
get 请求在 url 中传递的参数是有长度限制的, 而 post 没有。
域名缓存
为了提高DNS效率,减轻服务器的负荷和减少因特网上的 DNS 查询报文数量
在域名服务器中广泛使用了高速缓存,用来存放最近查询过的域名以及从何处获得域名映射信息的记录(如要查询 y.abc.com,缓存中没有,但是存放着顶级域名服务器dns.com的IP地址,那么本地域名服务器可以不向根域名服务器查询,而是直接向顶级域名服务器发送查询)对比ARP高速缓存,名字到地址的绑定并不经常改变,但是也有时间限制
不仅在本地域名服务器中需要高速缓存,在主机中也需要。许多主机在启动时从本地服务器下载名字和地址的全部数据库,维护存放自己最近使用的域名的高速缓存,并且只在从缓存中找不到名字时才使用域名服务器
DNS负载均衡
问题:DNS返回的IP地址是否每次都一样?
如果每次都一样是否说明你请求的资源都位于同一台机器上面,那么这台机器需要多高的性能和储存才能满足亿万请求呢?其实真实的互联网世界背后存在成千上百台服务器,大型的网站甚至更多
用户需要的只是处理他的请求,哪台机器处理请求并不重要因此,DNS可以返回一个合适的机器的IP给用户,例如可以根据每台机器的负载量,该机器离用户地理位置的距离等等,这种过程就是DNS负载均衡
HTTP是不保存状态的协议,如何保存用户状态?
HTTP是无状态协议,HTTP 协议自身不对请求和响应之间的通信状态进行保存。那么我们如何保存用户状态?
Cookie
HTTP使用Cookie技术,它允许站点对用户进行眼踪
- 用途
- 会话跟踪(如用户登录状态、购物车、游戏分数或其它需要记录的信息)
- 浏览器行为跟踪(如跟踪分析用户行为等)
- 创建方式
在客户端给服务器发送完HTTP请求之后,服务器可以在反馈的HTTP响应报文中包含 Set-Cookie 首部字段,客户端得到响应报文后把 Cookie 内容保存到浏览器中。
HTTP响应报文如下
HTTP/1.0 200 OK
Content-type: text/html
Set-Cookie: user_id=1
Set-Cookie: user_name=kobe
Set-Cookie: role_type=1客户端之后对同一个服务器发送请求时,会从浏览器中取出 Cookie 信息并通过 Cookie 请求首部字段发送给服务器。
再次进行HTTP请求的报文如下
GET /index.html HTTP/1.1
Host: www.test.com
Cookie: user_id=1; user_name=kobe;role_type=1
3. 分类- 会话期 Cookie:浏览器关闭之后它会被自动删除,也就是说它仅在会话期内有效。
- 持久性 Cookie:指定过期时间(Expires)或有效期(max-age)之后就成为了持久性的 Cookie。
Session
Session 的主要作用就是通过服务端记录用户的状态
Cookie 保存在客户端浏览器中,而Session 保存在服务器上
在服务端保存 Session 的方法很多(存储在服务器上的文件、数据库或者内存中),最常用的就是内存和数据库(比如是使用内存数据库redis保存)。
既然 Session 存放在服务器端,那么我们如何实现 Session 跟踪呢?
大部分情况下,我们都是通过在 Cookie 中附加一个 Session ID 来方式来跟踪- Session的创建与使用
(1) 用户进行登录时,用户提交包含用户名和密码的表单,放入 HTTP 请求报文中;
(2) 服务器验证该用户名和密码(此时还没有创建Session),如果正确(此时创建Session,获取Session ID)则把用户信息存储到 Redis 中,它在 Redis 中的 Key 称为 Session ID;
(3) 服务器返回的响应报文的 Set-Cookie 首部字段包含了这个 Session ID,客户端收到响应报文之后将该 Cookie 值存入浏览器中;
(4) 客户端之后对同一个服务器进行请求时会包含该 Cookie 值,服务器收到之后提取出 Session ID,从 Redis 中取出用户信息,继续之前的业务操作Session 机制的存在就是为了解决这个问题,Session 的主要作用就是通过服务端记录用户的状态 - 禁用cookie
如果客户端禁用了Cookie,通常有两种方法实现Session而不依赖Cookie。
- 使用 URL 重写技术,将 Session ID 作为 URL 的参数进行传递。
- Cookie和Session的关系图示
Cookie和Session有什么区别?
-
应用场景
Cookie 和 Session都是用来跟踪浏览器用户身份的会话方式,但是两者的应用场景不太一样。Cookie应用场景
Cookie 一般用来保存用户信息
①我们在 Cookie 中保存已经登录过得用户信息,下次访问网站的时候页面可以自动帮你登录的一些基本信息给填了;
②一般的网站都会有保持登录也就是说下次你再访问网站的时候就不需要重新登录了,这是因为用户登录的时候我们可以存放了一个 Token 在 Cookie 中,下次登录的时候只需要根据 Token 值来查找用户即可(为了安全考虑,重新登录一般要将 Token 重写);
③登录一次网站后访问网站其他页面不需要重新登录Session应用场景
Session 的主要作用就是通过服务端记录用户的状态
典型的场景是购物车,当你要添加商品到购物车的时候,系统不知道是哪个用户操作的,因为 HTTP 协议是无状态的。服务端给特定的用户创建特定的 Session 之后就可以标识这个用户并且跟踪这个用户了 -
数据保存
Cookie 数据保存在客户端(浏览器端),Session 数据保存在服务器端。 -
安全性
Cookie 存储在浏览器中,容易被恶意查看。考虑安全性时首选 Session -
存储量
对于大型网站,如果用户所有的信息都存储在 Session 中,那么开销是非常大的
单个 Cookie 保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个Cookie ,而Session无所谓
谈下 HTTP 1.0 和 1.1、1.2 的主要变化
HTTP1.1 的主要变化:
-
HTTP1.1 提出了长连接(持续连接),HTTP 可以在一次 TCP 连接中不断发送请求。
-
HTTP1.1 支持只发送 header 而不发送 body。原因是发两次,先用 header 判断能否成功,再发数据
HTTP2.0 的主要变化:
- HTTP2.0 支持多路复用
HTTP1.0 短连接,传输速率低(每次都要三次握手,慢启动)
HTTP1.1 长连接,允许我们建立一次 HTTP 连接,来返回多次请求数据,但是基于串行文件传输数据,因此这些请求必须是有序的,所以实际上我们只是节省了建立连接的时间,而获取数据的时间并没有减少
因此,HTTP2.0 支持多路复用
同一个连接可以并发处理多个请求,方法是把 HTTP数据包拆为多个帧,并发有序的发送,根据序号在另一端进行重组,而不需要一个个 HTTP请求顺序到达-
HTTP2.0 支持服务端推送,就是服务端在 HTTP 请求到达后,除了返回数据之外,还推送了额外的内容给客户端;
-
HTTP2.0 使用报头压缩
-
HTTP/2采用二进制格式而非文本格式
-
HTTP2.0 适用于 HTTPS 场景,因为其在 HTTP和 TCP 中间加了一层 SSL 层。
什么是HTTPS
HTTP 有以下安全性问题:
- 使用明文进行通信,内容可能会被窃听;
- 不验证通信方的身份,通信方的身份有可能遭遇伪装;
- 无法证明报文的完整性,报文有可能遭篡改
- 层级
HTTPS 并不是新协议,而是在HTTP与TCP中加了一层SSL/TLS。HTTPS是运行在SSL/TLS之上的HTTP协议,SSL/TLS 运行在TCP之上 - 端口
HTTPS的URL由“https://”起始且默认使用端口443 - 安全性
通过使用 SSL,HTTPS 具有了加密(防窃听)、认证(防伪装)和完整性保护(防篡改)。
加密,认证,完整性保护是三要素
对称加密/非对称加密
- 对称密钥加密
加密和解密使用同一密钥
- 优点:运算速度快
- 缺点:无法安全地将密钥传输给通信方
- 非对称密钥加密
加密和解密使用不同的密钥。
公开密钥所有人都可以获得,通信发送方获得接收方的公开密钥之后,就可以使用公开密钥进行加密,接收方收到通信内容后使用私有密钥解密。
- 优点:可以更安全地将公开密钥传输给通信发送方
- 缺点:运算速度慢
HTTPS 加密
HTTPS 采用混合的加密机制
对称加密无法安全传送密钥,所以使用非对称加密传送密钥,然后使用密钥进行对称加密
- 使用非对称密钥加密方式,传输对称密钥加密方式所需要的 Secret Key,从而保证安全性
- 获取到 Secret Key 后,再使用对称密钥加密方式进行通信,从而保证效率
HTTPS 认证
通过使用 证书 来对通信方进行认证
数字证书认证机构(CA,Certificate Authority)是客户端与服务器双方都可信赖的第三方机构
服务器的运营人员向 CA 提出公开密钥的申请,CA 在判明提出申请者的身份之后,会对已申请的公开密钥做数字签名,然后分配这个已签名的公开密钥,并将该公开密钥放入公开密钥证书后绑定在一起。
进行 HTTPS 通信时,服务器会把证书发送给客户端。客户端取得其中的公开密钥之后,先使用数字签名进行验证,如果验证通过,就可以开始通信了。
HTTPS 完整性保护
SSL 提供报文摘要功能来进行完整性保护。
HTTP 也提供了 MD5 报文摘要功能,但不是安全的。例如报文内容被篡改之后,同时重新计算 MD5 的值,通信接收方是无法意识到发生了篡改。
HTTPS 的报文摘要功能之所以安全,是因为它结合了加密和认证这两个操作。试想一下,加密之后的报文,遭到篡改之后,也很难重新计算报文摘要,因为无法轻易获取明文。
HTTPS 的缺点
因为需要进行加密解密等过程,因此速度会更慢;
需要支付证书授权的高额费用 -
【笔记】计算机网络面试题总结
2020-10-15 21:06:12负责网络寻址,根据ip地址将数据报从当前网络发送到目标网络,最终发送给目标主机。ip数据报首部保存了源ip地址和目标主机ip地址。 TCP:传输层协议。因为建立连接的是主机中的具体进程,所以借助IP协议将数据发送到...目录
为什么TCP挥手(如B像A发送fin消息)只需要两次?TCP握手能不能也使用2MSL机制,从而实现只有两次握手?
为什么A在发送释放连接的报文段后必须要等待2MSL的时间才能进入CLOSED状态?
当你用浏览器打开一个网址,然后显示网页内容,这中间发生了什么?
说一下OSI模型各层的作用?
OSI模型有7层,TCP/IP模型只有4层,不过两个模型所表达的思想都是一样的。
- 物理层:主要规定比特收发的规则。如发送方用多大的电压来代表“1”或“0”,接收方如何识别接收到的比特。
- 数据链路层:数据链路层主要将网络层交下来的IP数据报组装成MAC帧;同时也规定了如何在接收到的比特流中准确识别帧数据。MAC帧由:首部、IP数据报和尾部组成,其中首部包含了计算机的MAC地址。
- 网络层:首先将传输层产生的数据封装成IP数据报;然后通过IP地址将消息进行路由,找到目的主机所处的子网。IP数据包由两部分组成:首部和TCP报文(UDP数据包),首部包含了源主机和目标主机的IP地址。
- 传输层:为两台主机之间的进程提供数据传输服务。数据传输协议主要有TCP和UDP两种,发送的报文(TCP)或数据报(UDP)的首部包含源进程端口和目的进程端口。
- 应用层(应用层、表示层、会话层):主要规定了应用进程间通信和交互的规则。比如使用HTTP协议的话,请求数据要包含请求行、请求头、请求体,响应数据要包含:响应头和响应体。应用层还有FTP、DNS、SMTP(邮件传输协议)等。
UDP和TCP的区别?
- 使用UDP协议发送数据不需要建立连接,使用TCP协议必须建立连接。
- UDP不保证可靠传输,对于丢失或发生错误的数据不会重传;TCP保证可靠传输,确保数据正确、有序到达。
- UDP是面向报文,对于应用层交下来的报文,在添加首部后全部下交给网络层;TCP是面向字节流的,对于应用层交下来的报文,会分批交付,因为要考虑接收端缓存、网络拥堵等情况。
- UDP首部开销比TCP小。UDP首部为8个字节,TCP首部为20个字节,
TCP连接如何保证可靠性?
假设A(客户端)和B(服务端)之间建立了TCP连接:
- 发送确认:对于A发送的数据,B必须给出确认并在报文段中指定A下次发送数据的规则。
- 超时重传:若A向B发送数据后,没有及时收到回复,A会重新发送。
- 重复丢弃:当B检测到A重复发送的数据时会将重复数据丢弃。
- 数据校验:B会根据TCP报文段首部中的校验和字段来判断数据在传输过程中是否发生错误,是就丢弃,然后通知A重传。
- 流量控制:B会根据缓存空间的大小和网络情况来通知发送端发送数据流量的大小。(TCP头部中的“窗口”值)
说一下TCP三次握手和四次挥手的流程?
三次握手
假设有两台机器A(客户端)和B(服务端)要建立TCP连接,B首先处于监听状态(LISTEN)。建立过程如下:
- 一次握手:A首先向B发送建立连接请求的TCP报文段,连接请求中包含同步标识(SYN=1)和第一个字节的序号(seq),表示这是一个建立连接的请求。发送后A进入同步发送状态(SYN-SENT)。
- 二次握手:B收到A的连接建立请求后,向A发送接受连接的报文段,其中包括同步标识(SYN=1)和确认字段ACK=1,表示这是一个接受连接的确认。报文段还包括发送的第一个字节的序号(seq)和期望收到A下一个字节的序号(ack)。发送完后B进入同步接受状态(SYN-RCVD)。
- 三次握手:A收到B的确认后,再对B进行回复,这一次就是正常数据发送,主要包括:第一个字节的序号(seq)和期望收到B的下一个报文段的第一个字节(ack)的序号。A发送后进入连接建立状态(ESTABLISHED),B收到A的发送后也进入连接建立状态(ESTABLISHED)。
四次挥手
假设有两台机器A(客户端)和B(服务端)要断开TCP连接,此时A和B都处于建立连接状态(ESTABLISHED)。断开过程如下:
- 一次挥手:A向B发送终止连接报文段,里面有终止标识FIN=1,表示发送方没有数据再要发送了。发送后A进入终止等待的1阶段(FIN-WAIT-1)。
- 二次挥手:B对A的终止连接请求进行回复。回复之后,B进入CLOSE-WAIT状态,A收到回复后进入终止等待的2阶段(FIN-WAIT-2),这段期间A不再给B发送消息,但是B可以给A发送消息。
- 三次挥手:当B没有数据再要发送时,B像A一样发送终止连接的请求,里面有终止表示FIN=1。B发送后进入最后确认阶段(LAST-ACK)。
- 四次握手:A收到B的终止连接请求后,向B发送确认回复,然后进入TIME-WAIT状态。若A在发送的报文段过期之前都没有收到B的重传请求,A进入CLOSED状态,B在收到A的确认回复后直接进入CLOSED状态。
TCP握手如果只有前两次会出现什么情况?
如果TCP握手只有两次,那么B向A发送接收连接报文段后就进入连接状态,A在收到B的回复后也进入连接状态。这样就会有一个问题,假如A第一次向B发送的建立连接报文段因为网络延迟没有被B接收到,A在过一段时间没有收到B的回复后就会重新发送。假设第二次发送成功,TCP连接也建立了,然后数据传输完后连接断开。如果此时B又收到了之前丢失的建立连接请求,就会向A发送确认,发送完后B进入连接状态,而A因为没有向B发送建立连接请求,所以会忽略B的回复,不会进入连接状态。这样,B就一直处于单方面的连接建立状态,浪费系统资源。
为什么TCP挥手(如B像A发送fin消息)只需要两次?TCP握手能不能也使用2MSL机制,从而实现只有两次握手?
TCP挥手只需要两次,即使出现了像握手中的过期消息(fin),这个消息也不会起作用,不会把下一次的连接断开,因为这个过期消息的seq与此次连接的seq不一致;而握手就不一样了,如果B收到了A发送的过期的建立握手的连接,因为第一次握手的seq是随机产生的,所以不回去校验seq,因此能连接成功。
为什么断开TCP连接要四次挥手?
四次挥手是为了保证客户端和服务端的数据都能正常发送完毕。当A没有数据发送时,就发送终止连接报文给B,然后进入等待终止状态,不再发送数据;同理,当B没有数据发送时,也发送终止连接报文给A,B收到A的回复后再统一断开连接。如果单方面同时终止连接,可能造成某一方数据丢失。
为什么A在发送释放连接的报文段后必须要等待2MSL的时间才能进入CLOSED状态?
为了保证A发送的释放连接报文段能被B接收到。假设A发送后立刻进入CLOSED状态,如果发送的释放连接报文段在传输过程中丢失了,那B之后就再也不可能收到A发送的释放连接报文段,B也就不能进入CLOSED状态,从而导致资源浪费。当B没有收到A的确认时,会通知A重新发送,而A发送后预留的这段时间正是为了能让A收到B发出的重新确认请求,保证连接正常关闭。
TIME_WAIT和CLOSE_WAIT的区别?
B对A的终止连接请求回复后进入CLOSE_WAIT状态,此时B可以给A发送数据。当A收到B的终止连接请求且回复后,A进入TIME_WAIT状态,若在一段时间内没有收到B的消息则进入关闭连接状态。
TCP的拆包和粘包问题?为什么UDP没有?如何解决?
本小节内容来自:https://www.cnblogs.com/panchanggui/p/9518735.html
拆包和粘包是在socket编程中经常出现的情况,在socket通讯过程中,如果通讯的一端一次性连续发送多条数据包,tcp协议会将多个数据包打包成一个tcp报文发送出去,这就是所谓的粘包。而如果通讯的一端发送的数据包超过一次tcp报文所能传输的最大值时,就会将一个数据包拆成多个最大tcp长度的tcp报文分开传输,这就叫做拆包。
什么是拆包和粘包?
假设客户端向服务端连续发送了两个数据包,用packet1和packet2来表示,那么服务端收到的数据可以分为三种,现列举如下:
第一种情况,接收端正常收到两个数据包,即没有发生拆包和粘包的现象,此种情况不在本文的讨论范围内。
第二种情况,接收端只收到一个数据包,由于TCP是不会出现丢包的,所以这一个数据包中包含了发送端发送的两个数据包的信息,这种现象即为粘包。这种情况由于接收端不知道这两个数据包的界限,所以对于接收端来说很难处理。
第三种情况,这种情况有两种表现形式,如下图。接收端收到了两个数据包,但是这两个数据包要么是不完整的,要么就是多出来一块,这种情况即发生了拆包和粘包。这两种情况如果不加特殊处理,对于接收端同样是不好处理的。
为什么会发生拆包、粘包问题?
1. 应用程序写入的数据大于套接字缓冲区大小,这将会发生拆包。
2.应用程序写入数据小于套接字缓冲区大小,网卡将应用多次写入的数据发送到网络上,这将会发生粘包。
3.进行MSS(最大报文长度)大小的TCP分段,当TCP报文长度-TCP头部长度>MSS的时候将发生拆包。
为什么UDP没有问题?
UDP首部中有一个“长度”字段,指出了整个UDP数据报的长度,而UDP首部的长度又固定是8个字节,所以接收端能根据长度来读取UDP数据报,不会发生错误。
如何解决拆包、粘包问题?
1、发送端给每个数据包添加包首部,首部中应该至少包含数据包的长度,这样接收端在接收到数据后,通过读取包首部的长度字段,便知道每一个数据包的实际长度了。
2、发送端将每个数据包封装为固定长度(不够的可以通过补0填充),这样接收端每次从接收缓冲区中读取固定长度的数据就自然而然的把每个数据包拆分开来。
3、可以在数据包之间设置边界,如添加特殊符号,这样,接收端通过这个边界就可以将不同的数据包拆分开。
说说你知道的几种HTTP响应码以及排查方法
- 200:success,表示请求成功。
- 301:Moved Permanently。表示请求的资源已经永久移动到某个位置,有必要将页面请求的url地址改成response header中的location属性的值。
- 302:Moved Temporarily。表示请求的资源已经临时移动到某个位置,不用修改页面请求的url地址。
- 400:Bad Request。发送的请求语法错误,服务器无法解析;或者服务器接收参数的类型不匹配,如用Integer接收String。检查后台接受到的请求URL是否正确,比如IE浏览器中会将“-”转换成“ ”,将中文转换成带“%”的一串特殊字符。
- 403:Forbidden,禁止访问。客户端没有权利访问请求内容。检查客户端是否因为访问次数过多等原因被加入黑名单,或者系统因为连接的用户太多而主动忽略这个用户的请求。
- 404:Not Found,服务器找不到请求的资源。检查资源是否存在或路径是否匹配请求的URL。【URI是统一资源标识符,能唯一地表示一种资源,是抽象的概念,如石刀、黄金、货币等;URL是同一资源定位符,也是表示一种资源,是URI的具体实现,是具体的石刀、黄金、货币中的一种】
- 414:Request-url too long,客户端请求所包含的URI地址太长,以至于服务器无法处理。检查产生URI的代码,比如将参数拼接到URL上时,是否有重复拼接的情况。
- 500:Internal server error,服务器内部发生错误。查看服务器后台日志。
TCP、IP、HTTP的联系和区别?
- IP:网络层协议。负责网络寻址,根据ip地址将数据报从当前网络发送到目标网络,最终发送给目标主机。ip数据报首部保存了源ip地址和目标主机ip地址。
- TCP:传输层协议。因为建立连接的是主机中的具体进程,所以借助IP协议将数据发送到目标主机后,还必须通过TCP连接建立具体进程间的可靠通信。数据报首部包括源端口和目标端口。
- Http:应用层协议。主要定义了浏览器怎么向服务器请求数据,以及服务器怎样把数据传送给浏览器,必须通过TCP协议与服务器进行通信。
当你用浏览器打开一个网址,然后显示网页内容,这中间发生了什么?
一、URL解析
- 判断你输入的URL是不是一个合法的URL
- 然后做安全检查,比如你访问的网站的安全证书是不是有问题,是不是风险网站。
- 都没问题的话就检查缓存,如果存在并且是可用的(未过期等),那么就直接返回缓存,否则就向服务器进行请求。
二、DNS查询
向服务器发送请求首先要知道服务器的IP地址,这时就要通过DNS来或取域名所对应的IP地址。如果浏览器、操作系统、路由器以及ISP DNS都没有缓存的话,就要向根DNS服务器进行查询,最终获得IP地址。
三、网络通信
从客户端到服务器,要经过应用层、传输层、网络层、数据链路层、物理层,客户端是将数据层层打包,服务端是将数据层层拆包,最终获得传输的数据。
- 物理层:主要规定比特收发的规则。如发送方用多大的电压来代表“1”或“0”,接收方如何识别接收到的比特。
- 数据链路层:数据链路层主要将网络层交下来的IP数据报组装成MAC帧;同时也规定了如何在接收到的比特流中准确识别帧数据。MAC帧由:首部、IP数据报和尾部组成,其中首部包含了计算机的MAC地址。
- 网络层:首先将传输层产生的数据封装成IP数据报;然后通过IP地址将消息进行路由,找到目的主机所处的子网。IP数据包由两部分组成:首部和TCP报文(UDP数据包),首部包含了源主机和目标主机的IP地址。
- 传输层:为两台主机之间的进程提供数据传输服务。数据传输协议主要有TCP和UDP两种,发送的报文(TCP)或数据报(UDP)的首部包含源进程端口和目的进程端口。
- 应用层(应用层、表示层、会话层):主要规定了应用进程间通信和交互的规则。比如使用HTTP协议的话,请求数据要包含请求行、请求头、请求体,响应数据要包含:响应头和响应体。应用层还有FTP、DNS、SMTP(邮件传输协议)等。
四、服务器处理请求
在网络通信之后,客户端和服务器进程建立起TCP连接,服务器进程收到了客户端发来的请求数据,然后创建子进程去处理这个请求,最终向客户端返回http响应。
五、浏览器接收到响应并渲染页面
- 浏览器接收到服务器的响应资源后,首先会对资源进行解析,比如查看响应头,根据不同的状态码做不同的事情,像301表示冲定向,浏览器就会重新发送请求。
- 然后对响应资源进行缓存。
- 之后进行HTML解析,渲染成页面进行展示。
Http长连接和短连接有什么区别?
- 短连接:客户端每发起一次http请求就建立一次连接,请求结束就连接就关闭。当浏览器访问某个web页面时,页面中每一个js、css、图片等文件的传输都会建立一次TCP连接。HTTP/1.0中默认使用短连接。
- 长连接:当一次http请求完成时,TCP连接不会关闭,客户端的后续访问都会使用这条连接。这条连接不会永久存在,他有一个保持时间,在不同的容器应用(如tomcat)中可以设置这个时间。从HTTP/1.1起,默认使用长连接,使用长连接的HTTP协议会在响应头中加入:Connection:keep-alive。
Http1.0、Http1.1、Http2.0有什么区别?
下面内容来自:https://blog.csdn.net/qq_40742428/article/details/90444748。
HTTP1.0最早在网页中使用是在1996年,那个时候只是使用一些较为简单的网页上和网络请求上,而HTTP1.1则在1999年才开始广泛应用于现在的各大浏览器网络请求中,同时HTTP1.1也是当前使用最为广泛的HTTP协议。 主要区别主要体现在:
- 长连接 : 在HTTP/1.0中,默认使用的是短连接,也就是说每次请求都要重新建立一次连接。HTTP 是基于TCP/IP协议的,每一次建立或者断开连接都需要三次握手四次挥手的开销,如果每次请求都要这样的话,开销会比较大。因此最好能维持一个长连接,可以用个长连接来发多个请求。HTTP 1.1起,默认使用长连接 ,默认开启Connection: keep-alive。 HTTP/1.1的持续连接有非流水线方式和流水线方式 。流水线方式是客户在收到HTTP的响应报文之前就能接着发送新的请求报文。与之相对应的非流水线方式是客户在收到前一个响应后才能发送下一个请求。
- 错误状态响应码 :在HTTP1.1中新增了24个错误状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除。
- 缓存处理 :在HTTP1.0中主要使用header里的If-Modified-Since,Expires来做为缓存判断的标准,HTTP1.1则在header中引入了更多的缓存控制策略,例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略。
- 带宽优化及网络连接的使用 :HTTP1.0中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能,HTTP1.1则在请求头引入了range头域,它允许只请求资源的某个部分,即返回码是206(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接。
Http2.0是对Http1.0的增强,主要基于SPDY协议,目标是优化HTTP协议的性能,通过压缩、多路复用和优先级等技术,缩短网页的加载事件并提高安全性。
https://www.zhihu.com/question/34074946。https://blog.csdn.net/yexudengzhidao/article/details/98207149。
- 首部压缩:使用压缩算法对HTTP头部进行压缩,减小了传输数据的大小。
- 多路复用:Http1.1中一个连接同一时间只能允许一个请求或响应,而HTTP2.0可以做到一个连接中多个请求并发执行。因为HTTP2.0中通信的基本单位缩小成了帧,HTTP的消息被拆分成一个个帧去发送,这就好比一条公路,走大车只能走一辆,但是走小车能同时走多辆。
- 服务端推送:之前HTTP1.1,如果我请求一个页面,对于图片、js、css等数据,每一个都是一次请求一次响应,那就要来回请求很多次;现在利用多路复用机制,服务端可以在一次响应中同时把js、css等文件传输过来,这样就提升了效率。
Http中get请求和post请求有什么区别?
http请求数据包括两部分:请求头(request line【GET /index.html HTTP/1.1】 + header) + 请求体(data)。
Get请求
- 请求的参数包含在URL中。
- 传输的数据量小,因为受到URL长度的限制。(不同浏览器的限制不同)
- 安全性较差,因为请求服务器的参数直接显示在浏览器中,且容易被篡改。
Post请求
- 请求的参数包含在http请求体中。
- 传输的数据量大,没有限制。
- 安全性较高。
谈一下Http的报文格式?
Http报文分为请求报文和响应报文。
请求报文(request)
请求体是采用post请求方式时的表单类参数。
POST /index.html HTTP/1.1 HOST: www.XXX.com User-Agent: Mozilla/5.0(Windows NT 6.1;rv:15.0) Firefox/15.0 Username=admin&password=admin
响应报文(response)
响应体是从服务器返回的页面信息。
HTTP/1.1 200 OK Content-Encoding: gzip Content-Type: text/html;charset=utf-8 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <title>Document</title> </head> <body> <p>this is http response</p> </body> </html>
Http和Https的区别(SSL加密)?
https://www.jianshu.com/p/33d0f8631f90
超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,HTTP协议不适合传输一些敏感信息,比如:信用卡号、密码等支付信息。
为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS,为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。
客户端在使用HTTPS方式与Web服务器通信时有以下几个步骤,如图所示。
(1)客户使用https的URL访问Web服务器,要求与Web服务器建立SSL连接,会提供自己支持的加密算法。
(2)Web服务器收到客户端请求后,选出一个自己支持的安全性较高的加密算法,将算法信息和证书信息(证书中包含公钥)传送给客户端。
(3)客户端通过本地保存的证书信息来验证收到的证书的合法性,验证通过就产生一个会话秘钥。
(4)客户端利用网站的公钥将会话密钥加密,并传送给网站。
(5)Web服务器利用自己的私钥解密出会话密钥。
(6)Web服务器利用会话密钥加密与客户端之间的通信。
Session和Cookie的联系和区别?
联系
因为Http协议是无状态的,所以任意两次http请求之间是没有任何关联的,这次的请求不知道上次请求的相关信息。但是在真实场景下我们又需要知道用户上次请求的状态,比如:是否已经登录。所以我们需要通过其它方法来保存用户的请求状态,Session和Cookie就是最常用的两种。
区别
- Cookie:Cookie是浏览器的保存机制,数据保存在浏览器中。每次用户访问产生Cookie的域或子域时,就会将Cookie信息发送给服务器。
- Session:Session是服务器的保存机制,数据保存在服务器中,但是需要配合Cookie来使用。当用户第一次请求时,会在服务器中开辟一块空间来保存该客户端的Session信息,同时将能定位到该Session数据的id存入客户端浏览器的Cookie中,每次浏览器请求该服务器都会带上sessionId,这样就能获取该用户之前的请求状态了。
网络层
假设A给B发送消息。
消息发送过程:
- 直接交付:如果A和B处在同一个局域网中,则A可以将数据分组直接交付给B。
- 间接交付:如果A和B不处在同一个局域网中,A要通过路由的方式先将分组发送到B所在的局域网中,然后将数据交付给B。
- 广播:A在自己所在的局域网中广播消息,该局域网上的所有计算机都会收到消息,收到后比对MAC地址,是就接受,不是就丢弃。
- 子网、路由的由来:如果全球都只有一个网络,那广播的消息会造成严重的网络拥堵,所以将全球网络分成一个个子网,AB处于同一子网可以广播,不同子网则要先将分组转发到B所在子网,然后广播。
- IPv4:全球唯一,共32位,前8/16/24位是网络号,后24/16/8是主机号,用来找到目的主机所在的局域网。路由仅仅根据网络号进行转发,不看主机号,这样就减小了路由表占用的空间和查找时间。
- MAC:全球唯一,48位,用来找到具体的主机。
路由
路由表
是一个存储在路由器或者联网计算机中的电子表格(文件)或类数据库。
路由器
路由器:
- 执行路由功能的计算机;
- 因为路由器至少要连接到两个网络,所以通常配备多张网卡;
- 内部维护了一张路由表,每项的主要信息是:(目的网络地址,目的网络地址的子网掩码【当划分子网时】,下一跳地址)。
特定主机路由和默认路由
- 特定主机路由:可以认为指定将分组发往哪一个路由器。
- 默认路由:指定某一个路由器为默认路由器,当路由器中没有找到目的主机IP所对应的下一跳地址,可以将分组发往默认路由指定的路由器。
路由转发分组
这里的路由转发不仅仅局限于从路由器转发,因为联网计算机内部也有路由表,这里也可以从源主机进行路由转发。
不划分子网时路由转发:
注意:不划分子网时,路由表中的网络都是A类网络地址,只有划分了子网才会有B、C类地址。
- 从收到的分组中提取目的主机IP地址。
- 判断是否可以直接交付。判断目标IP是否和属于路由器直连的网络,是的话就直接交付(当然还要通过ARP寻址找到MAC地址);没有就执行3.
- 判断路由表中有没有指定目的IP的特定路由地址,有的话就转发分组到特定路由地址;没有就执行4.
- 遍历路由表的所有表项,将目的IP与每一项的地址进行比较,看目的IP是否属于该网络,是就转发到指定路由器;否就执行5.
- 若路由表中有默认路由,就将分组转发到默认路由器。
- 报告转发分组出错。
划分子网时路由转发:
- 从收到的分组中提取目的主机IP地址。
- 判断是否可以直接交付。将目的IP与路由器直联网络的子网掩码作“&”操作,判断结果是否和响应网络地址匹配,是的话就直接交付(当然还要通过ARP寻址找到MAC地址);没有就执行3.
- 判断路由表中有没有指定目的IP的特定路由地址,有的话就转发分组到特定路由地址;没有就执行4.
- 遍历路由表的所有表象,将目的IP与每一项的子网掩码与操作,比较网络是否相同,是就转发到指定路由器;否就执行5.
- 若路由表中有默认路由,就将分组转发到默认路由器。
- 报告转发分组出错。
下图中128.30.33.0和128.30.33.128属于不同的子网。
ARP地址解析协议
发送方和接收方在同一个局域网
- 作用:同一个局域网中,知道一个机器的IP地址,怎么知道它的MAC地址?
- 解决:在每台机器上动态维护一个ARP高速缓存,里面保存了本机所在局域网上其它机器和路由器的IP地址和MAC地址的映射信息;同时为每条缓存信息设置一个过期时间,如20分钟,到期删除。
- 为什么设置过期时间:因为同一台主机MAC地址是可以变化的,如更换网络适配器。
怎么维护ARP缓存:
- 当A向B发送消息时,先检查cache中有没有指定IP地址的映射信息,有就获取MAC地址,然后发送MAC帧,结束;没有就执行2。
- A在本局域网中广播一条ARP请求分组信息,里面包含了A的IP地址和MAC地址、B的IP地址。
- B收到后,就将A的信息存入自己的cache中,然后向A单播响应分组,里面包含了自己的MAC地址。
- A收到后将B的MAC地址存入cache中。
注意A发送时广播,B响应是单播。
发送方和接收方不在同一个局域网
当发送方和接收方不是在同一个局域网中时,ARP没法根据远程主机的IP找出MAC地址,也没必要,发送方只需要将数据发送给本局域网中的路由器即可(IP地址和MAC地址是路由器的地址),如下图:
数据链路层
数据链数层的协议有多种,但都要解决三个基本问题:封装成帧、透明传输和差错检测。
封装成帧
- 介绍:在IP数据包的前后分别添加首部和尾部,然后就构成了一个帧。
- 首部、尾部作用:帧的定界。
- 数据分片:如果IP数据报的长度超过了MTU(最大传输单元),要进行分片,每个分片的头部与原头部基本一致(标志和片偏移不同)。
透明传输
- 背景:当数据部分是可打印的文本时,帧定界符可以使用ASCII码中的不可打印字符的二进制来表示;但是如果数据部分是二进制时,帧界定符可能与数据部分冲突。
- 概念介绍:帧界定符可能与数据部分冲突,就是不透明传输;不会冲突,就是透明传输。
- 解决:在数据部分中,在与帧界定符相同的数据前面加上转义字符。
差错检测
- 介绍:数据链路层只检错,不纠错。检错是检测传过来的MAC帧的比特有没有差错,如果有错,丢弃;无错,接受。
- 检测方法:循环冗余检验(CRC)。发送和接受方约定一个除数P,然后发送方生成一个冗余校验码FCS,将FCS放到MAC帧的尾部进行发送。接收方收到后,用这个帧的二进制除以P,如果能整除,就说明没问题,否则说明发生错误。
如何生成冗余校验码?
- 假设帧的字节是M=101001,将M = M << n,假设n=3,M = 101001000。
- 约定除数P=1101,P的长度必须为n+1。
- 用M除以P,得到R,R就是FCS。然后R = M/P = 001,R的长度为n。
- 将R加到M尾部,M = M+R = 101001001,此时M(101001001 )mod P(1101) = 0
- 将M(101001001 )发送。
信道通信
点对点通信
PPP协议
我们知道互联网用户通常都要连接到某个ISP才能接入到互联网。PP协议就是用户计算机和ISP进行通信时所使用的数据链路层协议。
广播通信
使用CSMA/CD协议。
-
计算机网络面试题总结之一
2017-08-07 17:12:05OSI分层 (7层):物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。 TCP/IP分层(4层):网络接口层、 网际层、运输层、 应用层。 五层协议 (5层):物理层、数据链路层、网络层、运输层、 应用层... -
计算机网络面试题总结《持续更新》
2019-10-27 18:44:00总结来说就是为了保证客户端发送的最后一个ACK报文段能够到达服务器。因为这个ACK有可能丢失,从而导致处在LAST-ACK状态的服务器收不到对FIN-ACK的确认报文。 为什么是2MSL? MSL表示的是报文段在网络中的最长... -
计算机网络面试题总结(精简版)
2019-10-04 19:19:07OSI分层(7层):物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。 TCP/IP分层(4层):网络接口层、网际层、运输层、应用层。 2、IP地址的分类 IP地址是指互联网协议地址,是IP协议提供的一种... -
计算机网络常见面试题总结
2021-01-19 20:04:06计算机网络常见面试题总结 1.OSI,TCP/IP,五层协议的体系结构 OSI分层(7层):物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。 TCP/IP分层(4层):网络接口层、网际层、运输层、应用层。 五层... -
计算机网络——计算机网络常见面试题总结
2018-08-29 11:47:24一个局域网的网络协议,使用UDP协议工作,用途:给内部网络或网络服务供应商自动分配IP地址,给用户或者内部网络管理员作为对所有计算机作中央管理的手段。 3.6 NAT协议:网络地址转换属接入广域网(WAN)技术,...