计算机网络面试题

文章目录

OSI参考模型

应用层
它解决的也是最高层次,即程序应用过程中的问题,它直接面对用户的具体应用。应用层包含用户应用程序执行通信任务所需要的协议和功能,如电子邮件和文件传输等,在这一层中TCPIP协议中的FTP (File Tanfer Pocol文件传输协议) SMTP (Simple Mail Transfer Poco,简单邮件传输协议)、POP3 (Post fe Protoeol -Version3,邮局协议版本3)等协议得到了充分应用。针对特定应用的协议,比如HTTP

表示层
设备固有数据格式和网络标准数据格式的转换,比如字符集。
表示层用于数据管理的表示方式,如用于文本文件的ASCII码( American Standard Code foInfomation Interchange, 美国信息交换标准代码)、用于表示数字的补码表示形式。如果通信双方用不同的数据表示方法,它们就不能互相理解,表示层就是用于屏蔽这种不同之处。
表示层的功能主要有数据语法转换、语法表示、表示连接管理、数据加密和数据压缩。(翻译成能够相互理解的格式)

会话层
通信管理。负责建立和断开通信连接。

传输层
管理两个节点之间的数据传输,负责可靠传输。如TCP协议。

网络层
地址管理与路由选择。即从网络地址A到网络地址B。IP协议

数据链路层
互联设备之间传送和识别数据帧。

物理层
高低电平,网线规格等。
设备、电缆、物理端口、传输媒介

四层协议

1.应用层

应用层( Application Layer)包含了OSI 参考模型中的会话层、表示层和应用层的所有功能。它使应用程序能够直接运行于传输层之上,直接为用户提供服务。目前,互联网上常用的应用层协议主要有以下几种:

(1)简单邮件传输协议( Simple Mail Transfer Protocol, SMTP)。负责控制互联网中电子邮件的传输。

(2)超文本传输协议( Hyper Text Transfer Protocol, HTTP)。 提供Web服务。

(3)文件传输协议(File Transfer Prolocol, FTP)。 用于交互式文件传输,如下载软件使用的就是这个协议。

(4)简单网络管理协议(Simple Network Management Prolocol, SMP)。对网络设备和应用进行管理。

(5)远程登录协议(Tecomniceation Netwrk, Telnet )。允许用户与使用TELNET协议的远程计算机通信,为用户提供了在本地计算机上完成远程计算机工作的能力。常用的电子公告牌系统BBS使用的就是这个协议。

(6)域名系统服务( Domin Name System, DNS)。实现IP地址与城名地址之间的转换。

(7)路由信息协议(Rouing Ifomation Proro, RIP ):完成网络设备间路由信息的交换和更新

2. 传输层 :

传输层( Transport Layer)相当于OSI参考模型中的传输层,用于实现从源主机到目的主机的端到端的通信。同样,有了传输层提供的服务,可将底层的实现细节完全屏蔽掉。它的主要功能是对应用层传递过来的用户信息分成若干数据报,加上报头,便于端到端的通信

传输层定义了两个主要的端到端协议:传输控制协议( Transport Control Protocol, TCP )、用户数据报协议( User Datagram Protocol, UDP )。

TCP是一种可靠的、面向连接的协议,但响应速度较慢,适用于可靠性要求较高、数据量大的应用。如应用层的SMTP、FTP等服务是利用传输层的TCP协议进行传输。

UDP是一种不可靠的、无连接的协议,其特点是传输效率高、开销小,但传输质量不高。UDP主要用于不要求数据分组顺序到达的传输环境中,同时也被广泛地用于对数据精确度要求不高而对响应时间要求较高的网络传输(如传输语音或影像)中

3. 网络层 :

网络层(Internet Layer) 相当于OSI参考模型中的网络层,其主要功能是解决主机到主机的通信问题,以及建立互联网络,负责为数据分组选择路由、将数据上交给传输层或接收从传输层传来的数据。该层定义了正式的IP数据报格式和协议。

IP协议是网际层的核心协议,网际层的功能主要由IP完成。IP定义了数据分组的格式、寻址方式、数据分组的合并和拆装规则等。
除了IP协议,网际层还定义了其他协议,如地址解析协议( Address Resolution Protocol, ARP )、反向地址解析协议( Reverse Address Resolution Protocol,RARP )、因特网控制报文协议( Internet Control Message Protocol, ICMP )等。

4. 网络接口层:

网络接口层( Network Interface Layer)也称主机-网络层( Hosl-to Network Layer),相当于OSI参考模型中的物理层和数据链路层。
网络接口层在发送端将上层的IP数据报封装成帧后发送到网络上;数据帧通过网络到达接收端时,该结点的网络接口层对数据帧进行拆封,并检查帧中包含的硬件地址。如果该地址就是本机的硬件地址或者是广播地址,则上传到网络层,否则丢弃该帧。

网络接口层是TCP/IP与各种LAN或WAN的接口。TCP/IP模型没有为该层定义专用协议,实际应用时根据网络类型和拓扑结构可采用不同的协议。如局域网普遍采用的IEEE80系列协议,广域网经常采用的帧中继、X.25、点对点协议( Point-to- Point Protocol, PPP)。

PPP协议是一种行之有效的点到点通信协议,可以支持多种网络层协议(如IP、IPX等),支持动态分配的IP地址,并且PPP帧设置了校验字段,因而PPP在网络接口层具有差错校验功能。

五层协议:
(就是把上面的网络接口成分为数据链路层和物理层,保持OSI中的结构)

数据链路层:负责与物理传输的连接媒介打交道,主要功能是接收数据报,并把接收到的数据报发送到指定的网络中去。该层需要执行不同协议的局域网,通过网关实现协议与TCP/IP的转换,使数据穿过多个互联的网络正确地传输,实现异种网络接入Internet。
物理层

物理层利用物理媒介为比特流提供物理连接。物理网包含的协议有IEEE 802.3以太网;面向连接的X.25 公用数据网及X.75虚通路无连接协议;ARPANET网络;ATM网络;令牌环网等。

以太网

1.1 以太网:不可靠、无连接服务
无连接(connectionless):发送帧的网卡与接收帧的网卡间没有"握手”过程

不可靠(unreliable):接收网卡不向发送网卡进行确认,差错帧直接丢弃,丢弃帧中的数据恢复依靠高层协议(e.g., TCP),否则,发生数据丢失

以太网的MAC协议:采用二进制指数退避算法的CSMA/CD(载波监听多路访问/冲突检测)

  1. NIC从网络层接收数据报
    创建数据帧。
  2. 监听信道:
    如果NIC监听到信道空闲,则开始发送帧;
    如果NIC监听到信道忙, 则一直等待到信道空闲,然后发送帧。
  3. NIC发送完整个帧,而没有检测到其他结点的数据发送,则NIC确认帧发 送成功!
  4. 如果NIC检测到其他结点传输数据,则中止发送,并发送堵塞信号(jam signal)
  5. 中止发送后,NIC进入二进制指数退避:
    ■第m次连续冲突后:
    ●取n = min(m, 10)
    ●NIC从{0,1,2, … 2"-1}中随机选择一个数K
    ●NIC等待K*512比特的传输延迟时间,再返回第2步
    ■连续冲突次数越多,平均等待时间越长。

1.2 以太网帧格式
在这里插入图片描述
前导码
0,1组成,7个字节,每个字节都为10101010 (0xAA)
是以太网帧的开始,用于发送端和接收端的时钟同步。
最后一个字节是起始帧分隔符(SFD, Start Frame Delimiter)时,SFD的固定值0xAB,10101011。就是说前面都是10101010,检测到10101011就说明要开始发送了。

基本帧格式:
包括48位(6字节)的目的MAC地址(DST)和源MAC地址(SRC)字段。

类型:保存的是上层网络协议的类型,TCP/IP网络使用的常见值包括IPv4(0x0800)、IPv6(0x86DD)和ARP(0x0806)。

数据:指上层协议载荷,最小是46字节。

FCS(帧检测序列)
在这里插入图片描述
在这里插入图片描述
总结:一般是有前导码、SFD、目标MAC地址、源MAC地址、类型、标签、数据、FCS(帧检测序列)

ARP协议

ARP协议 Address Resolution Protocol,即地址解析协议, 用于实现从 IP 地址到 MAC 地址的映 射,即询问目标IP对应的MAC地址
(1) 首先,每台主机都会在自己的ARP缓冲区( ARP Cache )中建立一个ARP列表,以表示IP地址和MAC地址的对应关系。

(2)当源主机需要将一个数据包要发送到目的主机时,会首先检查自己ARP列表中是否存在该IP地址对应的MAC地址,如果有﹐就直接将数据包发送到这个MAC地址;如果没有,就向本地网段发起一个ARP请求的广播包,查询此目的主机对应的MAC地址。此ARP请求数据包里包括源主机的IP地址、硬件地址、以及目的主机的IP地址。

(3)网络中所有的主机收到这个ARP请求后,会检查数据包中的目的IP是否和自己的IP地址一致。如果不相同就忽略此数据包;如果相同,该主机首先将发送端的MAC地址和IP地址添加到自己的ARP列表中,如果ARP表中已经存在该IP的信息,则将其覆盖,然后给源主机发送一个ARP响应数据包,告诉对方自己是它需要查找的MAC地址

(4)源主机收到这个ARP响应数据包后,将得到的目的主机的IP地址和MAC地址添加到自己的ARP列表中,并利用此信息开始数据的传输。如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。

为什么要用ARP协议
OSI把网络分成7层,每层之间不直接交流,只有特定接口有交流。 IP在第三层网络层,MAC地址工作在第二层数据链路层。协议发包时需要封装IP地址和 MAC地址,但只知道IP,又不能跨层直接找,所以得用ARP协议的服务帮助获取目的节点 的MAC地址

ARP协议注意到的问题

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

如果所要找的主机和源主机不在同一个局域网上,那么就要通过 ARP 找到一个位于本局域网上的某个路由器的硬件地址,然后把分组发送给这个路由器,让这个路由器把分组转发给下一个网络。剩下的工作就由下一个网络来做。

参考此博文

二层交换机、三层交换机

第二层交换机和第三层交换机的区别

1、二层交换机工作于OSI模型的第2层(数据链路层),故而称为二层交换机。

2、二层交换技术的发展已经比较成熟,二层交换机属数据链路层设备,可以识别数据包中的MAC地址信息,根据MAC地址进行转发,并将这些MAC地址与对应的端口记录在自己内部的一个地址表中

3、三层交换机就是具有部分路由器功能的交换机,三层交换机的最重要目的是加快大型局域网内部的数据交换,所具有的路由功能也是为这目的服务的,能够做到一次路由,多次转发。

4、对于数据包转发等规律性的过程由硬件高速实现,而像路由信息更新、路由表维护、路由计算、路由确定等功能,由软件实现。三层交换技术就是二层交换技术+三层转发技术。

5、传统交换技术是在OSI网络标准模型第二层–数据链路层进行操作的,而三层交换技术是在网络模型中的第三层实现了数据包的高速转发,既可实现网络路由功能,又可根据不同网络状况做到最优网络性能。

http://www.360doc.com/showweb/0/0/908341406.aspx

VLAN

VLAN是什么?VLAN,是英文Virtual Local Area Network的缩写,中文名为"虚拟局域网", VLAN是一种将局域网(LAN)设备从逻辑上划分(注意,不是从物理上划分)成一个个网段(或者说是更小的局域网LAN),从而实现虚拟工作组(单元)的数据交换技术。 VLAN内的主机间可以直接通信,而VLAN间不能直接通信,从而将广播报文限制在一个VLAN内。

VLAN这一新兴技术主要应用于交换机和路由器中,但目前主流应用还是在交换机之中。不过不是所有交换机都具有此功能,只有三层以上交换机才具有此功能。

目的
以太网是一种基于CSMA/CD(Carrier Sense Multiple Access/Collision Detection)的共享通讯介质的数据网络通讯技术。当主机数目较多时会导致冲突严重、广播泛滥、性能显著下降甚至造成网络不可用等问题。通过交换机实现LAN互连虽然可以解决冲突严重的问题,但仍然不能隔离广播报文和提升网络质量

在这种情况下出现了VLAN技术,这种技术可以把一个LAN划分成多个逻辑的VLAN,每个VLAN是一个广播域,VLAN内的主机间通信就和在一个LAN内一样,而VLAN间则不能直接互通,这样,广播报文就被限制在一个VLAN内。

VLAN的作用:

(1)端口的分隔。即便在同一个交换机上,处于不同VLAN的端口也是不能通信的。这样一个物理的交换机可以当作多个逻辑的交换机使用。
  
(2)增强局域网的安全性:不同VLAN内的报文在传输时是相互隔离的,即一个VLAN内的用户不能和其它VLAN内的用户直接通信

(3)提高了网络的健壮性:故障被限制在一个VLAN内,本VLAN内的故障不会影响其他VLAN的正常工作

(4)灵活的管理。更改用户所属的网络不必换端口和连线,只更改软件配置就可以了。

VLAN技术的出现,使得管理员根据实际应用需求,把同一物理局域网内的不同用户逻辑地划分成不同的广播域,每一个VLAN都包含一组有着相同需求的计算机工作站,与物理上形成的LAN有着相同的属性。由于它是从逻辑上划分,而不是从物理上划分,所以同一个VLAN内的各个工作站没有限制在同一个物理范围中,即这些工作站可以在不同物理 LAN网段。

VLAN的特点:
一个VLAN内部的广播和单播流量都不会转发到其他VLAN中,从而有助于控制流量、减少设备投资、简化网络管理、提高网络的安全性。

VLAN能将网络划分为多个广播域,从而有效地控制广播风暴的发生

使网络的拓扑结构变得非常灵活的优点外

可以用于控制网络中不同部门、不同站点之间的互相访问。

VLAN标签:
要使设备能够分辨不同VLAN的报文,需要在报文中添加标识VLAN信息的字段。IEEE 802.1Q协议规定,在以太网数据帧的目的MAC地址和源MAC地址字段之后、协议类型字段之前加入4个字节的VLAN标签(又称VLAN Tag,简称Tag),用以标识VLAN信息。

VLAN帧格式:
在这里插入图片描述
在一个VLAN交换网络中,以太网帧主要有以下两种格式:

有标记帧(Tagged帧):加入了4字节VLAN标签的帧。
无标记帧(Untagged帧):原始的、未加入4字节VLAN标签的帧。

https://blog.csdn.net/qq_38265137/article/details/80390759
https://product.pconline.com.cn/itbk/wlbg/network/1107/2474493.html

(1) 建立TCP服务器的各个系统调用

客户端和服务器进行通信的过程如下:

首先运行的一定是服务器,在WinSock 环境下,
首先会调用WSAStartup函数,
再调用socket函数创建套接字,
再调用bind函数为套接字绑定本地地址和端口号,
再调用listen将套接字设为监听模式
再调用accept函数等待客户请求到来

再看客户端,在在WinSock 环境下,
首先会调用WSAStartup函数,
同样调用socket函数创建套接字,
(注意,客户端一般是不需要调用blind函数的,因为客户端发送连接的时候,内核会自动分配一个端口号给它。)
再调用connect函数向服务器发送连接请求

此时服务器的accept函数发现请求到来,返回一个新的对用于此次连接的套接字,并且通过这个新的套接字和客户端进行连接确认

此时连接建立,服务器调用rece函数,通过这个新创建的套接字接收客户端的数据,客户端调用send函数,利用已连接的套接字向服务器发送一个request

客户端再调用rece函数接收服务器通过send函数发回的响应

假如客户端认为这次通信到此结束了,就调用closesocket函数将这个套接字释放掉,
如果服务器也认为这个连接结束,也会调用closesocket函数释放这个新创建的套接字(注意是ns,s还在)

客户端最后会调用WSADtartup函数清除
而客户端会再次回到accept函数,继续等待下一个客户端的连接请求。

如果服务器要终止,也会调用WSADtartup函数
在这里插入图片描述
首先客户端调用connect函数,函数进入阻塞状态,发送syn给服务器端,服务器端响应,accept请求进入阻塞状态,返回ack,syn给客户端,客户端收到,此时connect阻塞返回,connect过程结束,发生在1 2次握手,然后返回ack给服务器端,服务器端收到请求,此时accept返回,服务器收到,accept发生在1 2 3次握手。
在这里插入图片描述

所以 建立TCP服务器的各个系统调用如下:

服务器调用主要包括:socket(),bind(),listen(),accept(),recv(),send()以及close()。
建立TCP客户端时函数调用主要为:socket(),connect(),send(),recv()以及close()。

(2) 继上一题,说明socket网络编程有哪些系统调用?其中close是一次就能直接关闭的吗,半关闭状态是怎么产生的?

close并不是一次就能直接关闭,调用close只能将套接字的引用计数减1,可能其他进程还在使用这个套接字,所以并不是直接关闭

同时在TCP协议中,发送关闭请求时,需要对方回复确认请求,否则不能确认,就会造成一个半关闭的状态,这个时候可以接收,不能发送。

半关闭的定义:
TCP提供了连接的一端在结束它的发送后,还能接收来自另一端发来的数据的能力,这就是TCP的半关闭。
当一方关闭发送通道后,仍可接受另一方发送过来的数据,这样的情况叫“半关闭”。(拆除TCP连接是:你关闭你的发送通道,我关闭我的发送通道)。

调用shutdown,shutdown的第二个参数为SHUT_WR时,为半关闭。shutdow函数可以立即关闭进程,不用考虑套接字的引用计数

(3) 对路由协议的了解与介绍。内部网关协议IGP包括RIP,OSPF,和外部网关协议EGP和BGP.

RIP:基于距离向量的路由协议,通过计算距离来选择路由的路径
OSPF:基于链路状态型的路由,给每一个路径有一个权重,并计算路径的代价最小值,选择这条路径
EGP:外部网关协议
BGP:一种常见的外部网关协议,一种矢量的路由协议,它通过维护IP路由表或‘前缀’表来实现自治系(AS)之间的可达性。

(4) 路由协议所使用的算法。

静态路由和动态路由,静态路由用于局域网,内部网络,动态路由用于大型的交换式路由

(5) TCP和UDP的区别

TCP是一种可靠的、面向连接、面向数据流的协议,但响应速度较慢,适用于可靠性要求较高、数据量大的应用。如应用层的SMTP、FTP等服务是利用传输层的TCP协议进行传输。

UDP是一种不可靠的、无连接、面向数据报的协议,其特点是传输效率高、开销小,但传输质量不高。

TCP的数据时有序的,UDP数据有可能是无序因为UDP没有拥塞控制,自由度比较高,所以传输效率就会很高。

它们的适用场景也存在差异?
UDP更加适用于对数据的安全性要求不高的的应用,或者对有网络传输速率要求和延迟要求较高的应用。
TCP更加适用于对数据的安全性要求较高的应用。

QQ使用的那种传输协议?
QQ这类的即时通信应用使用的较多的UDP协议,它们对网络延时的要求较高,但是为了提高数据的安全性,我认为可能对UDP进行了封装(在应用层增加了UDP应答包),这也是UDP的优势一方面的体现,他提供了较为自由的输出方式,我们根据自己的优化需要在使用UDP的时候在应用层进行封装。

UDP的优势在哪?
现如今我们的网络质量越来越好,随着网速的提升,一定程度上降低了UDP数据的丢包率,如果使用在应用层能实现重传,就能保证传输的可靠性。

TCP为了实现网络通信的可靠性,使用了复杂的拥塞控制算法,频繁的握手过程,由于TCP内置的系统协议栈,极难对其进行改进。

(6) TCP和UDP相关的协议与端口号

  1. 运行在TCP上的协议有

HTTP(Hypertext Transfer Protocol,超文本传输协议),是从Web服务器传输超文本到本地浏览器的传送协议,使用80端口。

HTTPS(Hypertext Transfer Protocol over Secure Socket Layer, or HTTP over SSL,安全超文本传输协议, HTTP协议的安全版本,使用443端口

FTP(File Transfer Protocol,文件传输协议),用于文件传输,使用21端口。

SMTP(Simple Mail Transfer Protocol,简单邮件传输协议),用来发送电子邮件,服务器开放的是25号端口。

POP3(Post Office Protocol, version 3,邮局协议),是和SMTP对应,POP3用于接收邮件。POP3协议所用的是110端口。

TELNET(Teletype over the Network,网络电传),一种用于远程登陆的端口,用户可以以自己的身份远程连接到计算机上,可提供基于DOS模式下的通信服务,使用23端口。

SSH(Secure Shell,用于替代安全性差的TELNET),用于加密安全登陆用,使用22端口。

  1. 运行在UDP上的协议

DNS:用于域名解析服务,将域名地址转换为IP地址,DNS用的是53号端口。

SNMP:简单网络管理协议,是用来管理网络设备的。使用161号端口,由于网络设备很多,无连接的服务就体现出其优势。

TFTP(Trival File Transer Protocal),简单文件传输协议,该协议在熟知端口69。

BOOTP(Boot Protocol,启动协议),应用于无盘设备。

NTP(Network Time Protocol,网络时间协议),用于网络时间同步,使用123端口,。

DHCP(Dynamic Host Configuration Protocol,动态主机配置协议),动态配置IP地址。

参考TCP与UDP之端口号

(7) TCP(UDP,IP)等首部的认识(http请求报文构成)

IP
在这里插入图片描述
1、第一个4字节(也就是第一行):
(1)版本号(Version),4位;用于标识IP协议版本,IPv4是0100,IPv6是0110,也就是二进制的4和6。
(2)首部长度(Internet Header Length),4位;用于标识首部的长度,单位为4字节,所以首部长度最大值为:(2^4 - 1) * 4 = 60字节,但一般只推荐使用20字节的固定长度。
(3)服务类型(Type Of Service),8位;用于标识IP包的优先级,但现在并未使用。
(4)总长度(Total Length),16位;标识IP数据报的总长度,最大为:2^16 -1 = 65535字节。
2、第二个四字节:
(1)标识(Identification),16位;用于标识IP数据报,如果因为数据链路层帧数据段长度限制(也就是MTU,支持的最大传输单元),IP数据报需要进行分片发送,则每个分片的IP数据报标识都是一致的。
(2)标识(Flag),3位,但目前只有2位有意义;最低位为MF,MF=1代表后面还有分片的数据报,MF=0代表当前数据报已是最后的数据报。次低位为DF,DF=1代表不能分片,DF=0代表可以分片。
(3)片偏移(Fragment Offset),13位;代表某个分片在原始数据中的相对位置。
3、第三个四字节:
(1)生存时间(TTL),8位;以前代表IP数据报最大的生存时间,现在标识IP数据报可以经过的路由器数。
(2)协议(Protocol),8位;代表上层传输层协议的类型,1代表ICMP,2代表IGMP,6代表TCP,17代表UDP。
(3)校验和(Header Checksum),16位;用于验证数据完整性,计算方法为,首先将校验和位置零,然后将每16位二进制反码求和即为校验和,最后写入校验和位置。

TCP
在这里插入图片描述
1、第一个4字节:
(1)源端口,16位;发送数据的源进程端口
(2)目的端口,16位;接收数据的进程端口
2、第二个4字节与第三个4字节
(1)序号,32位;代表当前TCP数据段第一个字节占整个字节流的相对位置;
(2)确认号,32位;代表接收端希望接收的数据序号,为上次接收到数据报的序号+1,当ACK标志位为1时才生效。
3、第四个4字节:
(1)数据偏移,4位;实际代表TCP首部长度,最大为60字节。
(2)6个标志位,每个标志位1位;
SYN,为同步标志,用于数据同步;
ACK,为确认序号,ACK=1时确认号才有效;
FIN,为结束序号,用于发送端提出断开连接;
URG,为紧急序号,URG=1是紧急指针有效;
PSH,指示接收方立即将数据提交给应用层,而不是等待缓冲区满;
RST,重置连接。
(3)窗口值,16位;标识接收方可接受的数据字节数。详解可参看:http://www.cnblogs.com/woaiyy/p/3554182.html
4、第五个4字节
(1)校验和,16位;用于检验数据完整性。
(2)紧急指针,16位;只有当URG标识位为1时,紧急指针才有效。紧急指针的值与序号的相加值为紧急数据的最后一个字节位置。用于发送紧急数据。

UDP
在这里插入图片描述

(8) 网页解析的过程与实现方法

(9) 在浏览器中输入URL后执行的全部过程(如www.baidu.com)

大致可分为两大部分:网络通信和页面渲染

网络通信
1.用户输入网址,浏览器发起DNS查询请求,会根据用户提供的域名查找对应的IP地址。

2、建立TCP连接
浏览器向web服务器发起tcp连接请求,通过TCP三次握手建立好连接后。

3、浏览器向 web 服务器发送一个 HTTP 请求
HTTP请求是一个基于TCP协议之上的应用层协议——超文本传输协议。一个http事务由一条(从客户端发往服务器的)请求命令和一个(从服务器发回客户端的)响应结果组成。

4、Web服务器发送html的文档给客户端
Web服务器通常通过监听80端口,来获取客户端的HTTP请求。Web服务器根据HTTP请求头的信息,返回HTTP报文给客户端。

5、浏览器响应接收到的html的文档对象,解析,并显示。

浏览器解析http response

(1)html文档解析(DOM Tree)

在浏览器没有完整接受全部HTML文档时,它就已经开始显示这个页面了。生成解析树即dom树,是由dom元素及属性节点组成,树的根是document对象。

(2)浏览器发送获取嵌入在HTML中的对象

加载过程中遇到外部css文件,浏览器另外发出一个请求,来获取css文件。遇到图片资源,浏览器也会另外发出一个请求,来获取图片资源。这是异步请求,并不会影响html文档进行加载。

但是当文档加载过程中遇到js文件,html文档会挂起渲染(加载解析渲染同步)的线程,不仅要等待文档中js文件加载完毕,还要等待解析执行完毕,才可以恢复html文档的渲染线程。

(3)css解析(parser Render Tree)

浏览器下载css文件,将css文件解析为样式表对象,并用来渲染dom tree。该对象包含css规则,该规则包含选择器和声明对象。

css元素遍历的顺序,是从树的低端向上遍历。

(4)js解析

浏览器UI线程:单线程,大多数浏览器(比如chrome)让一个单线程共用于执行javascrip和更新用户界面。

js阻塞页面:浏览器里的http请求被阻塞一般都是由js所引起,具体原因是js文件在下载完毕之后会立即执行,而js执行时候会阻塞浏览器的其他行为,有一段时间是没有网络请求被处理的,这段时间过后http请求才会接着执行,这段空闲时间就是所谓的http请求被阻塞。

js阻塞原因:之所以会阻塞UI线程的执行,是因为js能控制UI的展示,而页面加载的规则是要顺序执行,所以在碰到js代码时候UI线程会首先执行它

(10) 网络层分片的原因与具体实现

不同的数据链路层的最大传输单位(MTU, Maximun Transimission Unit)不同,以太网的MTU是1500B,FDDI是4352个字节,ATM是9180字节,所以只能在线路上传输比包长还要小的MTU,但是IP的上一层可能会要求传比这些MTU更多字节的数据,所以IP进行分片处理,将较大的IP包分成多个较小的IP包。

传输层
MSS(最大分段大小):是TCP的限制,双方可以协商,往往是减去两个头部,40B。

UDP不分段,靠IP分片

原因:每一种物理网络都会规定链路层数据帧的最大传输单位,称为链路层MTU(Maximum Transmission Unit).IP协议在传输数据包时,若IP数据报加上数据帧头部后长度大于MTU,则将数据报文分为若干分片进行传输,并在目标系统中进行重组。比如说,在以太网环境中可传输最大IP报文大小(MTU)为1500字节。如果要传输的数据帧大小超过1500字节,即IP数据报长度大于1472(1500-20-8=1472,普通数据报)字节,则需要分片之后进行传输。

(11) TCP的三次握手与四次挥手的详细介绍 (TCP连接建立与断开是热门问题)

三次握手:
server处于Listen状态,表示服务器端的某个SOCKET处于监听状态,可以接受连接了;
当client端socket执行connect连接时,首先发送SVN报文到server,进入SVN_SENT状态,等待server发送ACK;
server接受到SVN进入SVN_RCVD状态,(很短暂,一般查询不到),发送SVN+ACK给client端;
client端接受到server的ACK,发送ACK给server,server接收到后进入established状态,client也进入established状态。
在这里插入图片描述

四次挥手:
client发起断开连接,给server发送FIN,进入FIN_WAIT1状态,表示client想主动断开连接;
server接受到FIN字段后,会继续发送数据给client端,并发送ACK给client端,表明自己知道了,但是还没有准备好断开,请等我的消息;
当server确定自己的数据已经发送完成,就发送FIN到client;
client接受到来自server的FIN,发送ACK给server端,表示可以断开连接了,再等待2ms,没有收到server端的数据后,表示可以正常断开连接。

在这里插入图片描述

(12) TCP握手以及每一次握手客户端和服务器端处于哪个状态(11种状态)
在这里插入图片描述
11种状态:
1)、LISTEN:首先服务端需要打开一个socket进行监听,状态为LISTEN.

2)、SYN_SENT:客户端通过应用程序调用connect进行active open.于是客户端tcp发送一个SYN以请求建立一个连接.之后状态置为SYN_SENT.

3)、SYN_RECV:服务端应发出ACK确认客户端的SYN,同时自己向客户端发送一个SYN. 之后状态置为SYN_RECV

4)、ESTABLISHED: 代表一个打开的连接,双方可以进行或已经在数据交互了。

5)、FIN_WAIT1:主动关闭(active close)端应用程序调用close,于是其TCP发出FIN请求主动关闭连接,之后进入FIN_WAIT1状态.

6)、CLOSE_WAIT:被动关闭(passive close)端TCP接到FIN后,就发出ACK以回应FIN请求(它的接收也作为文件结束符传递给上层应用程序),并进入CLOSE_WAIT.

7)、FIN_WAIT2:主动关闭端接到ACK后,就进入了FIN-WAIT-2 .

8)、LAST_ACK:被动关闭端一段时间后,接收到文件结束符的应用程序将调用CLOSE关闭连接。这导致它的TCP也发送一个 FIN,等待对方的ACK.就进入了LAST-ACK . /

9)、TIME_WAIT:在主动关闭端接收到FIN后,TCP就发送ACK包,并进入TIME-WAIT状态。

10)、CLOSING: 这种状态比较特殊,实际情况中应该是很少见,属于一种比较罕见的例外状态。正常情况下,当你发送FIN报文后,按理来说是应该先收到(或同时收到)对方的 ACK报文,再收到对方的FIN报文。但是CLOSING状态表示你发送FIN报文后,并没有收到对方的ACK报文,反而却也收到了对方的FIN报文。什 么情况下会出现此种情况呢?其实细想一下,也不难得出结论:那就是如果双方几乎在同时close一个SOCKET的话,那么就出现了双方同时发送FIN报 文的情况,也即会出现CLOSING状态,表示双方都正在关闭SOCKET连接。

11)、CLOSED: 被动关闭端在接受到ACK包后,就进入了closed的状态。连接结束

(13) 为什么使用三次握手,两次握手可不可以?

这个问题有挺多不一样的解释:
讨论这个问题的大部分博客都会引用《计算机网络》的内容:

防止已失效的连接请求又传送到服务器端,因而产生错误

不幸的是, 这种解释是不准确的, TCP 采用三次握手的原因其实非常简单, 远没有大部分博客所描述的那样云山雾绕。
这里先给出结论:
为了实现可靠数据传输, TCP 协议的通信双方, 都必须维护一个序列号, 以标识发送出去的数据包中, 哪些是已经被对方收到的。 三次握手的过程即是通信双方相互告知序列号起始值, 并确认对方已经收到了序列号起始值的必经步骤
如果只是两次握手, 至多只有连接发起方的起始序列号能被确认, 另一方选择的序列号则得不到确认
TCP 为什么三次握手而不是两次握手(正解版)

下面这种解释比较好理解
三次握手的目的是建立可靠的通信信道,说到通讯,简单来说就是数据的发送与接收,而三次握手最主要的目的就是双方确认自己与对方的发送与接收是正常的。
第一次握手:Client 什么都不能确认;Server 确认了对方发送正常
第二次握手:Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:自己接收正常,对方发送正常
第三次握手:Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:自己发送、接收正常,对方发送接收正常
所以三次握手就能确认双发收发功能都正常,缺一不可。

(14) TIME_WAIT的意义(为什么要等于2MSL)

因为虽然双方都同意关闭连接了,而且握手的4个报文也都发送完毕,按理可以直接回到CLOSED状态(就好比从SYN_SENT状态到ESTABLISH状态那样),但是我们必须假想网络是不可靠的,你无法保证你最后发送的ACK报文一定会被对方收到,就是说对方处于LAST_ACK状态下的SOCKET可能会因为超时未收到ACK报文,而重发FIN报文,所以这个TIME_WAIT状态的作用就是用来重发可能丢失的ACK报文。

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

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

(15) 超时重传机制(不太高频)

超时重传指的是,发送数据包在一定的时间周期内没有收到相应的ACK,等待一定的时间,超时之后就认为这个数据包丢失,就会重新发送。这个等待时间被称为RTO.

检测丢失segment的方法从概念上讲还是比较简单的,每一次开始发送一个TCP segment的时候,就启动重传定时器,定时器的时间一开始是一个预设的值(Linux 规定为1s),随着通讯的变化以及时间的推移,这个定时器的溢出值是不断的在变化的,有相关算法计算RTO[参考:文章…],如果在ACK收到之前,定时器到期,协议栈就会认为这个片段被丢失,重新传送数据。

(16) TCP怎么保证可靠性(面向字节流,超时重传,应答机制,滑动窗口,拥塞控制,校验等)?

  1. 通过序列号和确认应答机制
  2. 超时重传:发送数据包在一定的时间周期内没有收到相应的ACK,等待一定的时间,超时之后就认为这个数3.据包丢失,就会重新发送
  3. 面向连接的,通过3次握手机制确定连接才开始发数据
  4. 滑动窗口:控制发送方发送窗口的大小,控制流量
  5. 流控制,让发送端根据接收端的实际接收能力来发送数据
  6. 拥塞控制:控制传输上流量
  7. 校验和:TCP 将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP 将丢弃这个报文段和不确认收到此报文段。

(17) 流量控制的介绍,采用滑动窗口会有什么问题(死锁可能,糊涂窗口综合征)?

主要介绍再接收端和发送端速率不匹配的状况下,TCP协议栈滑动窗口动态调整机制产生的一种问题 叫糊涂窗口综合症,

这个问题可以归结为小包的问题,就是由于发送端和接收端上的处理不一致,导致网络上产生很多的小包,之前也介绍过避免网络上产生过多小包的措施,比如Nagle算法。在滑动窗口机制下,如果发送端和接收端速率很不一致,也会产生这种比较犯傻的状态:发送方发送的数据,只要一个大大的头部,携带数据很少。

对于接收端来讲,如果接收很慢,一次接收1个字节或者几个字节,这个时候接收端 缓冲区很快就会被填满,然后窗口通告为0字节,这个时候发送端停止发送,应用程序收上去1个字节后,发出窗口通告为1字节,发送方收到通告之后,发出1个字节的数据,这样周而复始,传输效率会非常低。

同时如果发送端程序一次发送一个字节,虽然窗口足够大,但是发送仍是一个字节一个字节的传输,效率很低

(18) tcp滑动窗口协议

TCP 利用滑动窗口提高速率,实现流量控制的机制。
在这里插入图片描述
滑动窗口(Sliding window)是一种流量控制技术。早期的网络通信中,通信双方不会考虑网络的拥挤情况直接发送数据。由于大家不知道网络拥塞状况,同时发送数据,导致中间节点阻塞掉包,谁也发不了数据,所以就有了滑动窗口机制来解决此问题。

TCP 中采用滑动窗口来进行传输控制,滑动窗口的大小意味着接收方还有多大的缓冲区可以用于接收数据。发送方可以通过滑动窗口的大小来确定应该发送多少字节的数据。当滑动窗口为 0 时,发送方一般不能再发送数据报,但有两种情况除外,一种情况是可以发送紧急数据,例如,允许用户终止在远端机上的运行进程。另一种情况是发送方可以发送一个 1 字节的数据报来通知接收方重新声明它希望接收的下一字节及发送方的滑动窗口大小。

(19) 拥塞控制和流量控制的区别

流量控制:利用滑动窗口实现流量控制,如果发送方把数据发送得过快,接收方可能会来不及接收,这就会造成数据的丢失。所谓流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收。

拥塞控制:全局网络的拥塞情况,如果有发生丢包则通过拥塞控制减小窗口,确定出合适的拥塞窗口。

(20) TCP拥塞控制,算法名字?(极其重要)

几种拥塞控制方法:
慢开始(slow-start )、拥塞避免(congestion avoidance )、快重传( fastretransmit )和快恢复( fastrecovery )。

慢开始和拥塞避免
发送方维持一个拥塞窗口cwnd ( congestion window )的状态变量。拥塞窗口的大小取决于网络的拥塞程度,并且动态地在变化。发送方让自己的发送窗口等于拥塞窗口。

发送方控制拥塞窗口的原则是:只要网络没有出现拥塞,拥塞窗口就再增大一些,以便把更多的分组发送出去。但只要网络出现拥塞,拥塞窗口就减小一些,以减少注入到网络中的分组数。

慢开始算法
当主机开始发送数据时,如果立即把大量数据字节注入到网络,那么就有可能引起网络拥塞,因为现在并不清楚网络的负荷情况。因此,较好的方法是先探测一下,由小到大逐渐增大拥塞窗口数值

通常在刚刚开始发送报文段时,先把拥塞窗口 cwnd 设置为一个最大报文段MSS的数值。而在每收到一个对新的报文段的确认后,把拥塞窗口增加至多一个MSS的数值。用这样的方法逐步增大发送方的拥塞窗口 cwnd ,可以使分组注入到网络的速率更加合理。

每经过一个传输轮次,拥塞窗口 cwnd 就加倍。一个传输轮次所经历的时间其实就是往返时间RTT。不过“传输轮次”更加强调:把拥塞窗口cwnd所允许发送的报文段都连续发送出去,并收到了对已发送的最后一个字节的确认。

另,慢开始的“慢”并不是指cwnd的增长速率慢,而是指在TCP开始发送报文段时先设置cwnd=1,使得发送方在开始时只发送一个报文段(目的是试探一下网络的拥塞情况),然后再逐渐增大cwnd。

为了防止拥塞窗口cwnd增长过大引起网络拥塞,还需要设置一个慢开始门限ssthresh状态变量(如何设置ssthresh)。慢开始门限ssthresh的用法如下:
当 cwnd < ssthresh 时,使用上述的慢开始算法。
当 cwnd > ssthresh 时,停止使用慢开始算法而改用拥塞避免算法。
当 cwnd = ssthresh 时,既可使用慢开始算法,也可使用拥塞控制避免算法。

拥塞避免算法
让拥塞窗口cwnd缓慢地增大,即每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1而不是加倍。这样拥塞窗口cwnd按线性规律缓慢增长,比慢开始算法的拥塞窗口增长速率缓慢得多。

无论在慢开始阶段还是在拥塞避免阶段,只要发送方判断网络出现拥塞(其根据就是没有收到确认),就要把慢开始门限ssthresh设置为出现拥塞时的发送方窗口值的一半(但不能小于2)。然后把拥塞窗口cwnd重新设置为1,执行慢开始算法。这样做的目的就是要迅速减少主机发送到网络中的分组数,使得发生拥塞的路由器有足够时间把队列中积压的分组处理完毕。过程图如下:
在这里插入图片描述
快速重传
快速重传算法规定,发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段,而不必继续等待设置重传计时器时间到期

TCP利用3个相同的ACK来判定数据包的丢失,此时进行快速重传,快速重传做的事情有:
把ssthresh设置为cwnd的一半
把cwnd再设置为ssthresh的值(具体实现有些为ssthresh+3)
重新进入拥塞避免阶段。

快速恢复:
当收到3个重复ACK时,把ssthresh设置为cwnd的一半,把cwnd设置为ssthresh的值加3,然后重传丢失的报文段,加3的原因是因为收到3

再收到重复的ACK时,拥塞窗口增加1。

收到新的数据包的ACK时,把cwnd设置为第一步中的ssthresh的值。原因是因为该ACK确认了新的数据,说明从重复ACK时的数据都已收到,该恢复过程已经结束,可以回到恢复之前的状态了,也即再次进入拥塞避免状态。

(21) http协议与TCP联系

TCP协议对应于传输层,而HTTP协议对应于应用层

TPC/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据
关于TCP/IP和HTTP协议的关系,网络有一段比较容易理解的介绍:“我们在传输数据时,可以只使用(传输层)TCP/IP协议,但是那样的话,如果没有应用层,便无法识别数据内容,如果想要使传输的数据有意义,则必须使用到应用层协议,应用层协议有很多,比如HTTP、FTP、TELNET等,也可以自己定义应用层协议。WEB使用HTTP协议作应用层协议,以封装HTTP 文本信息,然后使用TCP/IP做传输层协议将它发到网络上。”

TCP和UDP是高速公路上的“卡车”,它们携带的货物就是像HTTP

HTTP 是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范

(22) http/1.0和http/1.1的区别

  1. HTTP/1.0规定浏览器与服务器只保持短暂的连接,浏览器每次都需要与服务器建立一个TCP连接,服务器完成请求后,立即断开TCP连接,也就是说,同一个客户第二次访问同一个服务器上的页面时,服务器的响应过程与第一次被访问时是相同的。举例在收到的HTML文档后,文档中有10个图片,每个图片都要重新再次建立连接获取,所以网速较慢的时候,我们有时会看到先出现网页,每个图片再逐一出现。
    这样做的好处:简化了服务器的设计,是服务器更容易支持大量并发的HTTP请求
    这样做的缺点:每请求一个文档就要有两倍RTT的开销 ,详细过程:HTTP协议首先要和服务器建立TCP连接,这需要三次握手,当三次握手的前两部分经过一个RTT完成后,客户就把HTTP请求报文作为第三次握手的第三个报文的数据发送给万维网服务器,服务器收到HTTP请求报文后,就把所请求的文档作为响应报文返回给客户。每个请求文档花费两倍的RTT时间。
    HTTP/1.1支持持续连接和流水线方式
    持续连接就是万维网服务器在发送响应后仍然在一段时间内保持这条连接,使同一个客户(浏览器)和该服务器可以继续在这条连接上传送后续的HTTP请求报文和响应报文。这条持续的连接并不局限于传输同一个页面上链接的文档,而是只要文档在同一个服务器上就可以通过这条持续的连接传送。
    流水线方式是客户在收到HTTP的响应报文之前就能接着发送新的请求报文。与之相对应的非流水线方式是客户在收到前一个响应后才能发送下一个请求。

  2. 在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址。
    HTTP1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)。此外,服务器应该接受以绝对路径标记的资源请求。

  3. 带宽优化
    HTTP/1.0中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了。又比如下载大文件时不支持断点续传功能,在发生断连后不得不重新下载完整的包。
    HTTP/1.1中在请求消息中引入了range头域,它支持只请求资源的某个部分。在响应消息中Content-Range头域声明了返回的这部分对象的偏移值和长度。如果服务器相应地返回了对象所请求范围的内容,则响应码为206(Partial Content),它可以防止Cache将响应误以为是完整的一个对象。

  4. HTTP/1.1在1.0的基础上加入了一些cache的新特性,当缓存对象的Age超过Expire时变为stale对象,cache不需要直接抛弃stale对象,而是与源服务器进行重新激活(revalidation)

http1.0 、http1.1、http2.0的区别

1、http1.0 与 http1.1的区别

1、长连接(Persistent Connection)
HTTP1.1支持长连接和请求的流水线处理,在一个TCP连接上可以传送多个 HTTP请求和响应,减少了建立和关闭连接的消耗和延迟。

在HTTP1.1中默认开启长连接keep-alive,一定程度上弥补了HTTP1.0每次请求都 要创建连接的缺点。HTTP1.0需要使用keep-alive参数来告知服务器端要建立一个长连接。

2、节约带宽
HTTP1.0中存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而 服务器却将整个对象送过来了,并且不支持断点续传功能。

HTTP1.1支持只发送header信息(不带任何body信息),如果服务器认为客户端有权限请求服务器,则返回100,客户端接收到100才开始把请求body发送到服务器; 如果返回401,客户端就可以不用发送请求body了节约了带宽。

3、 HOST域
在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的 URL并没有传递主机名(hostname),HTTP1.0没有host域。随着虚拟主机技术的发展, 在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共 享一个IP地址。

HTTP1.1的请求消息和响应消息都支持host域,且请求消息中如果没有host 域会报告一个错误(400 Bad Request)。

4、缓存处理
在HTTP1.0中主要使用header里的If-Modified-Since,Expires来做为缓存判断的标 准,HTTP1.1则引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since, If- Match, If-None-Match等更多可供选择的缓存头来控制缓存策略。

5、错误通知的管理
在HTTP1.1中新增了24个错误状态响应码,
如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除

2 HTTP1.1和HTTP2.0的区别

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

HTTP1.1也可以多建立几个TCP连接,来支持处理 更多并发的请求,但是创建TCP连接本身也是有开销的。

2、头部数据压缩
在HTTP1.1中,HTTP请求和响应都是由状态行、请求/响应头部、消息主体三部分组成。一般而言,消息主体都会经过gzip压缩,或者本身传输的就是压缩过后的二进制文件, 但状态行和头部却没有经过任何压缩,直接以纯文本传输。随着Web功能越来越复杂,每个页面产生的请求数也越来越多,导致消耗在头部的流量越来越多,尤其是每次都要传输 UserAgent、Cookie这类不会频繁变动的内容,完全是一种浪费。

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

3、服务器推送
服务端推送是一种在客户端请求之前发送数据的机制。网页使用了许多资源:HTML、 样式表、脚本、图片等等。在HTTP1.1中这些资源每一个都必须明确地请求。这是一个很慢的过程。浏览器从获取HTML开始,然后在它解析和评估页面的时候,增量地获取更多的资 源。因为服务器必须等待浏览器做每一个请求,网络经常是空闲的和未充分使用的。

为了改善延迟,HTTP2.0引入了server push,它允许服务端推送资源给浏览器,在浏览器明确地请求之前,免得客户端再次创建连接发送请求到服务器端获取。这样客户端可以 直接从本地加载这些资源,不用再通过网络。

HTTP有几种请求方式

HTTP1.0 定义了三种请求方法: GET, POST 和HEAD方法。 HTTP1.1 新增了六种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法。

(23) http的请求方法有哪些?get和post的区别。

在客户机和服务器之间进行请求-响应时,两种最常被用到的方法是:GET 和 POST。

GET - 输入信息作为URL的一部分,保密性差。
POST - 客户端的输入信息作为消息体的一部分上传,安全。
在这里插入图片描述

(24) http的状态码

当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览器的请求。

1xx 服务器收到请求,需要请求者继续执行操作
2xx ok,请求成功
3xx 重定向,资源已经重新分配
4xx 客户端请求错误,403 forbidden请求资源被拒绝,404 not found找不到请求资源
5xx 服务器错误,500 服务器故障,503 服务器超载或停机维护

200 - 请求成功
301 - 资源(网页等)被永久转移到其它URL
404 - 请求的资源(网页等)不存在
500 - 内部服务器错误

200,请求成功
301,资源(网页等)被永久转移到其它URL
302,资源临时移动
303,该状态码表示由于请求对应的资源存在着另一个URI,应使用GET方法定向获取请求的资源
403,forbidden,服务器理解请求客户端的请求,但是拒绝执行此请求。请求资源被拒绝,通常原因是服务器上某些文件或目录设置了权限,客户端权限不够
404,not found,用户输入错误的链接,该链接指向的网页不存在。除此之外,也可以在服务器端拒绝请求且不想说明理由时使用。
500,internal server error 服务器内部错误(比如浏览器代理除了问题,ip,端口不对 等)该状态码表明服务器端在执行请求时发生了错误。也有可能是Web应用存在的bug或 某些临时的故障。
502,Bad Gateway,作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收 到了一个无效的响应
503,服务器超载或停机维护
504,Gateway Timeout 网关超时 服务器作为网关或代理,未及时从上游服务器接收请求

(25) http和https的区别,由http升级为https需要做哪些操作

HTTPS的全称是Secure Hypertext Transfer Protocol(安全超文本传输协议),HTTPS在HTTP的基础上加入了SSL/TLS协议,SSL/TLS依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。

HTTPS和HTTP的区别

  1. https协议需要到ca申请证书,一般免费证书很少,需要交费。
  2. http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。
  3. http和https使用的是完全不同的连接方式用的端口也不一样,前者是80,后者是443。
  4. http的连接很简单,是无状态的。 HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全

HTTPS的缺点
  虽然说HTTPS有很大的优势,但其相对来说,还是存在不足之处的:

(1)HTTPS协议握手阶段比较费时,会使页面的加载时间延长近50%,增加10%到20%的耗电;

(2)HTTPS连接缓存不如HTTP高效,会增加数据开销和功耗,甚至已有的安全措施也会因此而受到影响;

(3)SSL证书需要钱,功能越强大的证书费用越高,个人网站、小网站没有必要一般不会用。

(4)SSL证书通常需要绑定IP,不能在同一IP上绑定多个域名,IPv4资源不可能支撑这个消耗。

(5)HTTPS协议的加密范围也比较有限,在黑客攻击、拒绝服务攻击、服务器劫持等方面几乎起不到什么作用。最关键的,SSL证书的信用链体系并不安全,特别是在某些国家可以控制CA根证书的情况下,中间人攻击一样可行。

SSL与TLS的区别?
SSL:(Secure Socket Layer,安全套接字层),SSL通过互相认证、使用数字签名确保完整性、使用加密确保私密性,以实现客户端和服务器之间的安全通讯。

TLS:(Transport Layer Security,传输层安全协议),用于两个应用程序之间提供保密性和数据完整性。

参考

(26) https的具体实现,怎么确保安全性

HTTPS在HTTP的基础上加入了SSL/TLS协议,SSL/TLS依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。

(27) http中浏览器一个URL的流程,这个过程中浏览器做了什么,URL包括哪三个部分?

URL(统一资源定位符)包括:协议名,主机名,路径及文件名

  1. 输入一个网址之后,首先浏览器通过查询DNS,查找这个URL的IP地址,(浏览器首先通过查找内部DNS缓存,,查不到依次进行系统DNS缓存,路由器缓存,DNS服务器,一步一步找到并解析IP地址通过层层向 上级DNS服务器查找直到找到对应URL的IP地址)
  2. 得到目标服务器的IP地址及端口号(http 80端口,https 443端口),会调用系统库函数socket,请求一个TCP流套接字。客户端向服务器发送HTTP请求报文
    (1)应用层:客户端发送HTTP请求报文。
    (2)传输层:(加入源端口、目的端口)建立连接。实际发送数据之前,三次握手客户端 和服务器建立起一个TCP连接。
    (3)网络层:(加入IP头)路由寻址。
    (4)数据链路层:(加入frame头)传输数据。
    (5)物理层:物理传输bit。
  3. 服务器端经过物理层→数据链路层→网络层→传输层→应用层,解析请求报文,发送 HTTP响应报文。
  4. 关闭连接,TCP四次挥手。
  5. 客户端解析HTTP响应报文,浏览器开始显示HTML

给一个网址先解析什么后解析什么(域名解析顺序)?

域名分层:从右到左分别为顶级域名、二级域名…最左为主机名(服务器名)。比如 www.baidu.com的com为顶级域名,email.tsinghua.edu.cn中cn为顶级域名,为中国国 家域名,edu为教育科研部门域名,email为服务器名。

域名解析时,优先查找匹配的子域名,如果子域名存在,则从子域名的配置文件查询解析结 果,如果子域名不存在,就从上一级的配置文件查询结果

Https握手过程

添加链接描述
一个HTTPS请求实际上包含了两次HTTP传输,可以细分为8步。

  1. 客户端向服务器发起HTTPS请求,连接到服务器的443端口
  2. 服务器端有一个密钥对,即公钥和私钥,是用来进行非对称加密使用的,服务器端保存着 私钥,不能将其泄露,公钥可以发送给任何人。
  3. 服务器将自己的公钥发送给客户端。
  4. 客户端收到服务器端的公钥之后,会对公钥进行检查,验证其合法性,如果发现发现公钥 有问题,那么HTTPS传输就无法继续。严格的说,这里应该是验证服务器发送的数字证书 的合法性,关于客户端如何验证数字证书的合法性,下文会进行说明。如果公钥合格,那么 客户端会生成一个随机值,这个随机值就是用于进行对称加密的密钥,我们将该密钥称之为 client key,即客户端密钥,这样在概念上和服务器端的密钥容易进行区分。然后用服务器 的公钥对客户端密钥进行非对称加密,这样客户端密钥就变成密文了,至此,HTTPS中的 第一次HTTP请求结束。
  5. 客户端会发起HTTPS中的第二个HTTP请求,将加密之后的客户端密钥发送给服务器。
  6. 服务器接收到客户端发来的密文之后,会用自己的私钥对其进行非对称解密,解密之后的 明文就是客户端密钥,然后用客户端密钥对数据进行对称加密,这样数据就变成了密文。
  7. 然后服务器将加密后的密文发送给客户端。
  8. 客户端收到服务器发送来的密文,用客户端密钥对其进行对称解密,得到服务器发送的数 据。这样HTTPS中的第二个HTTP请求结束,整个HTTPS传输完成。

注意https加密是在传输层

https报文在被包装成tcp报文的时候完成加密的过程,无论是https的header域也好, body域也罢都是会被加密的。 当使用tcpdump或者wireshark之类的tcp层工具抓包,获取是加密的内容,而如果用 应用层抓包,使用Charels(Mac)、Fildder(Windows)抓包工具,那当然看到是明文的。

HTTP劫持和DNS劫持

简单介绍一下HTTP劫持和DNS劫持的概念,也就是运营商通过某些方式篡改了用户正常访问的网页,插入广告或者其他一些杂七杂八的东西。

首先对运营商的劫持行为做一些分析,他们的目的无非就是赚钱,而赚钱的方式有两种:

1、对正常网站加入额外的广告,这包括网页内浮层或弹出广告窗口;

2、针对一些广告联盟或带推广链接的网站,加入推广尾巴。例如普通访问百度首页,被前置跳转为http://www.baidu.com/?tn=90509114_hao_pg

在具体的做法上,一般分为DNS劫持和HTTP劫持。

DNS劫持
一般而言,用户上网的DNS服务器都是运营商分配的,所以,在这个节点上,运营商可以为所欲为。

例如,访问http://jiankang.qq.com/index.html,正常DNS应该返回腾讯的ip,而DNS劫持后,会返回一个运营商的中间服务器ip。访问该服务器会一致性的返回302,让用户浏览器跳转到预处理好的带广告的网页,在该网页中再通过iframe打开用户原来访问的地址。

HTTP劫持
在运营商的路由器节点上,设置协议检测,一旦发现是HTTP请求,而且是html类型请求,则拦截处理。后续做法往往分为2种,
1种是类似DNS劫持返回302让用户浏览器跳转到另外的地址,
还有1种是在服务器返回的HTML数据中插入js或dom节点(广告)。

处理办法:

1、先对外网做检测,上报被劫持的情况。
页面广告可能通过iframe方式,也可以通过dom节点方式,需要在首页检查这两种情况。

2、针对被iframe加载的情况,需要先找到运营商设置的劫持规律。
在iframe中的网页能正常打开,而不是又被拦截加iframe,可能是因为请求的url上或cookie上运营商做了标记。我们可以利用这个规则,躲过劫持。

3、针对注入dom节点的情况,初始化时做检查,而且后续dom注入也做检查。可以检查dom中是否含有白名单以外的http链接,如果有,就可以判定为http劫持。

4、在前端以外的处理办法还有
a) 终端拦截所有返回包,判断ip来自黑名单(劫持的中间ip)则丢弃返回包。

这种做法的原因是,运营商劫持http请求后,并不是完全丢弃请求包,而是做了复制,一份继续发给目标服务器,另外一份做劫持处理直接返回302。因为这个302会比目标服务器的正常返回早得多,所以用户浏览器会只认第一个302,而丢弃后到的正常返回。

如果先把第一个302丢弃,等待后续正常返回,则问题解决

b) 终端拦截请求包,并拆包发送。

运营商一般判断是否劫持,通过判断是否HTTP请求。 一般只会检测TCP连接建立后的第一个数据包,如果其是一个完整的HTTP协议才会被标记;如果并非是一个完整的HTTP协议,由于无法得到足够多的劫持信息,所以并不会被标记为HTTP协议。

所以,只要把请求包切得足够细,就能躲过一部分劫持(如果运营商学习“墙”大力气做多包拦截就没辙了)。

5、当然,最终,根本解决办法是使用HTTPS,不过这个涉及到很多业务的修改,成本较高。如果劫持比例小,也许通过适当的补救做法会更好。

HTTP劫持和DNS劫持

跨域

跨域,指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器施加的安全限制。
同源:域名,协议,端口均相同 即浏览器只能执行相同协议、相同域名、相同端口下的网站脚本,执行的时候如果网站的脚本不属于现在这个界面,就不会执行

HTTP请求响应中断原因
网断了,网络阻塞,请求超时,浏览器出问题,服务器出问题 如何检查 检查网络,检查本地…

(28) 一个机器能够使用的端口号上限是多少,为什么?可以改变吗?那如果想要用的端口超过这个限制怎么办?

linux socket使用16bit无符号整型表示端口号,最大到65535,不能改变,规定了是16bit二进制数,但是可以复用,即使用同一个端口号来进行通信

(29) 对称密码和非对称密码体系

1.对称密钥密码体系
对称密钥密码体系也叫密钥密码体系,它是指消息发送方和消息接收方必须使用相同的密钥,该密钥必须保密。发送方用该密钥对待发消息进行加密,然后将消息传输至接收方,接收方再用相同的密钥对收到的消息进行解密。

2.非对称密钥密码体系又叫公钥密码体系,它使用两个密钥:一个公共密钥PK和一个私有密钥SK。这两个密钥在数学上是相关的,并且不能由公钥计算出对应的私钥,同样也不能由私钥计算出对应的公钥。

(30) 数字证书的了解(高频)

数字证书是经过权威机构(CA)认证的公钥,通过查看数字证书,可以知道该证书是由哪家权威机构签发的,证书使用人的信息,使用人的公钥。它有以下特点:

1、由专门的机构签发的数字证书才安全有效。

2、签发数字证书是收费的。

3、不会被冒充,安全可信。

4、数字证书有使用期限,过了使用期限,证书变为不可用。CA也可以在试用期内,对证书进行作废操作。

(31) 客户端为什么信任第三方证书

第三方认证机构,是指具有可靠的执行认证制度的必要能力,并在认证过程中能够客观、公正、独立地从事认证活动的机构。即认证机构是独立于制造厂、销售商和使用者(消费者)的、具有独立的法人资格的第三方机构,故称认证为第三方认证认证机构。

(32) RSA加密算法,MD5原理(MD5不算加密算法)

MD5原理:MD5,全名Message Digest Algorithm 5,是一种摘要算法,通过内置的hash算法将信息摘要成为定长的十六进制字串

RSA加密算法:与DES不同,RSA算法中,每个通信主体都有两个钥匙,一个公钥一个私钥。就是有2把钥匙:使用publicKey可以对数据进行加密,使用私钥才能对数据进行解密。

(33) 单条记录高并发访问的优化

  1. 保证在实现功能的基础上,尽量减少对数据库的访问次数;

  2. 通过搜索参数,尽量减少对表的访问行数,最小化结果集,从而减轻网络负担;

  3. 能够分开的操作尽量分开处理,提高每次的响应速度;

  4. 在数据窗口使用SQL时,尽量把使用的索引放在选择的首列;算法的结构尽量简单;

(34) Ping的过程,分别用到了哪些协议

UDP ICMP ARP OSPF

具体过程是:

  1. 通过DNS协议,将ping后接的域名转换为ip地址。
  2. DNS使用的传输层协议是UDP,传输层接收到请求,将其加上udp的头部,转发到IP层
  3. IP层根据ICMP 协议进行封装,添加源IP和目标IP封装成为数据包,然后转到链路层
  4. 链路层接收到数据包,进行封装对应的mac地址,调用ARP协议,查询ARP缓存表,没有找到则广播出去,寻找对应IP的mac地址,这个过程用到了路由的协议OSPF。

ping是为了测试另一台主机是否可达,发送一份ICMP回显请求给目标主机,并等待 ICMP回显应答。(ICMP用于在ip主机、路由器间传递网络是否通畅、主机是否可达等控制信息)

ICMP是“Internet Control Message Ptotocol”的缩写。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息

控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。在网络中经常会使用到ICMP协议。例如经常用于检查网络不通的ping命令,这个ping的过程实际上就是ICMP协议工作的过程。还有跟踪路由的trancert命令也是基于ICMP协议的。

(35) TCP/IP的分片粘包过程

UDP是基于报文发送的,从UDP的帧结构可以看出,在UDP首部采用了16bit来指示UDP数据报文的长度,因此在应用层能很好的将不同的数据报文区分开,从而避免粘包和拆包的问题。

而TCP是基于字节流的,虽然应用层和TCP传输层之间的数据交互是大小不等的数据块,但是TCP把这些数据块仅仅看成一连串无结构的字节流,没有边界;另外从TCP的帧结构也可以看出,在TCP的首部没有表示数据长度的字段,基于上面两点,在使用TCP传输数据时,才有粘包或者拆包现象发生的可能。而UDP传输时,则没有。

在这里插入图片描述
下面对上面的图进行解释:
1.正常情况:如果Socket Client 发送的数据包,在Socket Server端也是一个一个完整接收的,那个就不会出现粘包和分包情况,数据正常读取。
2.粘包情况:Socket Client发送的数据包,在客户端发送和服务器接收的情况下都有可能发送,因为客户端发送的数据都是发送的一个缓冲buffer,然后由缓冲buffer最后刷到数据链路层的,那么就有可能把数据包2的一部分数据结合数据包1的全部被一起发送出去了,这样在服务器端就有可能出现这样的情况,导致读取的数据包包含了数据包2的一部分数据,这就产生粘包,当然也有可能把数据包1和数据包2全部读取出来。
3.分包情况:意思就是把数据包2或者数据包1都有可能被分开一部分发送出去,接着发另外的部分,在服务器端有可能一次读取操作只读到一个完整数据包的一部分。
4.在数据包发送的情况下,有可能后面的数据包分开成2个或者多个,但是最前面的部分包,黏住在前面的一个完整或者部分包的后面,也就是粘包和分包同时产生了。

发生TCP粘包或拆包有很多原因
1、要发送的数据大于TCP发送缓冲区剩余空间大小,将会发生拆包。
2、待发送数据大于MSS(最大报文长度),TCP在传输前将进行拆包。
3、要发送的数据小于TCP发送缓冲区的大小,TCP将多次写入缓冲区的数据一次发送出去,将会发生粘包。
4、接收数据端的应用层没有及时读取接收缓冲区中的数据,将发生粘包。

解决这个问题的关键在于如何给每个数据包添加边界信息,常用的方法有如下几个:
1、发送端给每个数据包添加包首部,首部中应该至少包含数据包的长度,这样接收端在接收到数据后,通过读取包首部的长度字段,便知道每一个数据包的实际长度了。
2、发送端将每个数据包封装为固定长度(不够的可以通过补0填充),这样接收端每次从接收缓冲区中读取固定长度的数据就自然而然的把每个数据包拆分开来。
3、可以在数据包之间设置边界,如添加特殊符号,这样,接收端通过这个边界就可以将不同的数据包拆分开。

(36) 有没有抓过TCP包,描述一下

(37) 一个ip配置多个域名,靠什么识别?

一个IP可以绑定无数个域名,这个没有限制。

IIS 5.0能很好地支持一个IP地址对应多个独立的域名,这可以通过两种方法来实现:
⑴ 设不同的TCP端口号:你需要分别将各个Web站点的“Web站点”选项中的“TCP端口”指向不同的端口号,再将“主目录”中的路径选不同的目录即可。调用格式如“http://www.abc.com:99”。
⑵ 设不同的主机头名:你需要分别将各个Web站点的“Web站点→高级→编辑”中的“主机头名”一项填入不同的域名,再将“主目录”中的路径选不同的目录即可。调用格式如“http://www.bbc.com”。

(38) 服务器攻击(DDos攻击)

  1. 分布式拒绝服务攻击(DDoS:Distributed Denial of Service),强调是将多个计算机联合起来作为攻击平台,对一个或多个目标发动DDoS攻击,从而成倍地提高拒绝服务攻击的威力。大量恶意的流量去访问同一个服务器,导致服务器处理不过来,功能瘫痪。

  2. 随着网络技术发展,DDOS攻击也在不断进化,攻击成本越来越低,而攻击力度却成倍加大,使得DDOS更加难以防范。比如反射型DDoS攻击就是相对高阶的攻击方式。攻击者并不直接攻击目标服务IP,而是通过伪造被攻击者的IP向全球特殊的服务器发请求报文,这些特殊的服务器会将数倍于请求报文的数据包发送到那个被攻击的IP(目标服务IP)。

  3. DDOS攻击让人望而生畏,它可以直接导致网站宕机、服务器瘫痪,对网站乃至企业造成严重损失。而且DDOS很难防范,可以说目前没有根治之法,只能尽量提升自身“抗压能力”来缓解攻击,比如购买高防服务。

(40)请你来回答一下++i和i++的区别

++i先自增1,再返回,i++先返回i,再自增1
● 请你来说一说++i和i++的实现
参考回答:

  1. ++i 实现:
int&  int::operator++()
{
*this +=1return *this}
  1. i++ 实现:
const int  int::operatorint{
int oldValue = *this++*this);
return oldValue;
}

读值,+1,写值。在这三步任何之间都可能会有CPU调度产生,造成i的值被修改,造成脏读脏写。

如果是方法里定义的,一定是线程安全的,因为每个方法栈是线程私有的。

如果是类的静态成员变量,i++则不是线程安全的,因为i++会被编译成几句字节码语句执行,而每个线程都有自己的工作内存,每个线程需要对共享变量操作的时候必须先把共享变量从主内存load到自己的工作内存,登完成对共享变量的操作时再保存到主内存。如果一个线程运算完成后还没刷到主内存,此时这个共享变量的值被另一个线程从主内存读取到了,这个时候读取的数据就是脏数据了,他会覆盖其他线曾程计算的值。可以通过synchronize块来提供同步。

volatile:
每次修改volatile变量都会同步到主存中。
每次读取volatile变量的值都强制从主存读取最新的值(强制JVM不可优化volatile变量,如JVM优化后变量读取会使用cpu缓存而不从主存中读取)、
加了volatile和没加volatile都无法解决非原子操作的线程同步问题:
多个线程同时从主内存中读取某个值。
r1(线程), r3读到的值都是 0,两个线程都将 +1 写入 i, 最后 i等于 1,但是却进行了两次自增操作。
解决:使用循环CAS,实现i++原子操作(cas,会将操作的值与原值比较,相同才将新值写入主内存。)使用支持原子性操作的类,如 java.util.concurrent.atomic.AtomicInteger,它使用的是 CAS 算法

(41)DNS的查找过程(应用层)

用于将用户提供的主机名解析为ip地址
0. 浏览器从接收到的url中抽取出域名地址,将域名传给DNS应用的客户端

  1. 检查浏览器缓存、本地hosts文件是否有这个网址的映射,如果有,就调用这个IP地址 映射
  2. 如果没有,则查找本地DNS解析器缓存是否有这个网址的映射,如果有,返回映射
  3. 如果没有,则向DNS服务器提出查询请求
  4. 服务器接收到查询时,查询本地配置区域资源,查到就返回结果
  5. 如果查不到,但服务器缓存了此网址映射关系,返回查找结果
  6. 如果没有缓存,就继续间请求转发至上一级DNS服务器进行查询。最终将解析结果依 次返回本地DNS服务器,本地DNS服务器在返回给客户端,并把这个映射存到服务器的缓 存中

(42)什么是静态资源、什么是动态资源?

直接把相应文件发送到客户端的文件都是静态资源。
如果不同的用户可以得到不同的回答,是动态资源,一般是指数据库资源。

  1. 静态资源和动态资源的概念
    静态资源:一般客户端发送请求到web服务器,web服务器从内存在取到相应的文件, 返回给客户端,客户端解析并渲染显示出来。
    动态资源:一般客户端请求的动态资源,先将请求交于web容器,web容器连接数据 库,数据库处理数据之后,将内容交给web服务器,web服务器返回给客户端解析渲染处理。

  2. 静态资源和动态资源的区别
    a. 静态资源一般都是设计好的html页面,而动态资源依靠设计好的程序来实现按照需求的动态响应;
    b. 静态资源的交互性差,动态资源可以根据需求自由实现;
    c. 在服务器的运行状态不同,静态资源不需要与数据库参于程序处理,动态可能需要多 个数据库的参与运算

(43)DHCP

1、什么是DHCP?

DHCP,动态主机配置协议,是一个应用层协议,使用UDP协议工作,常用的2个端口:67(DHCP server),68(DHCP client)。
  
DHCP通常被用于局域网环境,主要作用是集中的管理、分配IP地址,使client动态的获得IP地址、Gateway地址、DNS服务器地址等信息,并能够提升地址的使用率。简单来说,DHCP就是一个不需要账号密码登录的、自动给内网机器分配IP地址等信息的协议

DHCP的前身是BOOTP协议(Bootstrap Protocol),BOOTP被创建出来为连接到网络中的设备自动分配地址,后来被DHCP取代了,DHCP比BOOTP更加复杂,功能更强大。

2、什么是DHCP 客户端

DHCP客户端一般来说是局域网中独立的PC主机

DHCP客户端发出的DHCP DISCOVER包是DHCP协议的开始。

延续租期、发现、释放IP地址等大多数DHCP中的行为都是由DHCP客户端主动发起。

DHCP 自动状态机
  DHCP获得ip地址的4步骤:discover­>offer­>request­>ack(nak)

DHCP刷新租期的步骤:request­>ack(nak)

DHCP释放ip的步骤:release

wnr2000v5 1.0.0.8的代码中没有发现rebooting、init­reboot状态。所以DHCP client的状态一般从init开始,完整的状态机如下图(红色代表客户端的状态跳转):

3. 什么是DHCP SERVER

DHCP SERVER指的是服务器端,在路由器上体现的就是给LAN端动态分配IP的功能。

DHCP SERVER负责接收客户端的DHCP请求管理LAN端所有的IP网络设定资料,相比于BOOTP,DHCP通过“租约”来实现动态分配IP的功能,实现IP的时分复用,从而解决IP资源短缺的问题

其地址分配方式有三种,分别是:
人工配置(由管理员对每台具体的计算机指定一个地址)
自动配置(服务器为第一次连接网络的计算机分配一个永久地址)
动态配置(在一定的期限内将地址租给计算机,租期结束后客户必须续租或者停用该地址)

而对于路由器,经常使用的地址分配方式是动态配置。

DHCP的实现

在这里插入图片描述

DHCP的实现分为4步,分别是:
第一步:Client端在局域网内发起一个DHCP Discover包,目的是想发现能够给它提供IP的DHCP Server。
第二步:可用的DHCP Server接收到Discover包之后,通过发送DHCP Offer包给予Client端应答,意在告诉Client端它可以提供IP地址。
第三步:Client端接收到Offer包之后,发送DHCP Request包请求分配IP。
第四步:DHCP Server发送ACK数据包,确认信息。

https://blog.csdn.net/wangzhen_csdn/article/details/80855261
https://blog.csdn.net/zqixiao_09/article/details/77131239

(44)QoS简介

服务质量QoS(Quality of Service)用于评估服务方满足客户服务需求的能力。通过配置QoS,对企业的网络流量进行调控,避免并管理网络拥塞,减少报文的丢失率,同时也可以为企业用户提供专用带宽或者为不同的业务(语音、视频、数据等)提供差分服务。

对于网络业务来说,服务质量包括哪些方面呢?从传统意义上来讲,无非就是传输的带宽、传送的时延、数据的丢包率等,而提高服务质量无非也就是保证传输的带宽,降低传送的时延,降低数据的丢包率以及时延抖动等。广义上讲,服务质量涉及网络应用的方方面面,只要是对网络应用有利的措施,其实都是在提高服务质量。因此,从这个意义上来说,防火墙、策略路由、快速转发等也都是提高网络业务服务质量的措施之一。

QoS是网络的一种安全机制, 是用来解决网络延迟和阻塞等问题的一种技术。现在的路由器一般均支持QoS。路由器上的QoS可以通过下面几种手段获得:

通过大带宽得到

在路由器上增加接口带宽,不作任何额外工作来保障QoS。由于数据通信没有相应公认的数学模型作保障,该方法只能粗略地使用经验值作估计。通常认为当带宽利用率到达50%以后就应当扩容,保证接口带宽利用率小于50%。

通过端到端带宽预留实现

该方法通过使用RSVP或者类似协议在全网范围内通信的节点间端到端预留带宽。该方法能保证QoS,但是代价太高,通常只在企业网或者私网上运行,在大网公网上无法实现。

通过接入控制、拥塞控制和区分服务等方式得到,该方式无法完全保证QoS。这能与增加接口带宽等方式结合使用,在一定程度上提供相对的CoS。

影响网络质量的因素

  1. 网络带宽
    网络带宽是指在单位时间(一般指的是1秒钟)内能传输的数据量。
  2. 网络时延

​ 时延是指一个报文从一个网络的一端传送到另一端所需要的时间。

​ 实时应用通信质量都比较关注时延大小,如语音、视频等。以语音传输为例,时延是指从说话者开始说话到对方听到所说内容的时间。若时延太大,会引起通话声音不清晰、不连贯或破碎。

​ 单个网络设备的时延包括传输时延、串行化时延、处理时延、以及队列时延。

  1. 抖动

​ 由于每个报文的端到端时延不一样,就会导致这些报文不能等间隔到达目的端,这种现象叫做抖动。一般来说,时延越小则时延抖动的范围越小。

​ 某些业务类型(特别是语音和视频等实时业务)是极其不能容忍抖动的。报文到达时间的差异将在语音或视频中造成断续;另外,抖动也会影响一些网络协议的处理,有些协议是按固定的时间间隔发送交互性报文,抖动过大就会导致协议震荡,而实际上所有传输系统都有抖动,但只要抖动在规定容差之内就不会影响服务质量,另外,可利用缓存来克服过量的抖动,但这将会增加时延。

​ 抖动的大小跟时延的大小直接相关,时延小则抖动的范围也小,时延大则可能抖动的范围也大。

  1. 丢包

丢包率是指在网络传输过程中丢失报文占传输报文的百分比。丢包可用于衡量网络的可靠性。

丢包(packetloss)可能在所有环节中发生,例如:

处理过程:路由器在收到报文的时候可能由于CPU繁忙,无法处理报文而导致丢包;
排队过程:在把报文调度到队列的时候可能由于队列被装满而导致丢包;
传输过程:报文在链路上传输的过程中,可能由于种种原因(如链路故障等)导致的丢包。
少量的丢包对业务的影响并不大,例如,在语音传输中,丢失一个比特或一个报文的信息,通话双方往往注意不到;在视频广播期间,丢失一个比特或一个报文可能造成屏幕上瞬间的波形干扰,但视频很快就会恢复正常。即使使用传输控制协议(TCP)传送数据也能处理少量的丢包,但大量的丢包就会严重影响到传输效率。

https://blog.csdn.net/qq_38265137/article/details/80466737

(45) MAC地址

MAC Address,Media Access Control Address,亦称为EHA(Ethernet Hardware Address)、硬件地址、物理地址(Physical Address)。在OSI节层模型中,属于第二层链路层概念。一个MAC地址唯一指定一台设备,全球唯一,并且通常烧写在ROM中。

MAC地址由IEEE(Institute of Electrical and Electronics Engineers)定义,有三种:MAC-48、EUI-48、EUI-64。

MAC-48,地址空间48bit,支持2^48即281,474,976,710,656个MAC地址。MAC-48的设计目标是一百年内够用。常以16进制数表示MAC地址,通用表示方法有三种格式,如01-23-45-67-89-ab、01:23:45:67:89:ab和0123.4567.89ab。

组成
MAC地址如下图所示,其前3字节表示厂商识别码OUI(Organizationally Unique Identifier),由IEEE的注册管理机构给不同厂家分配的代码,区分不同的厂家。后3字节由厂家自行分配。所以,可以保证全世界不会有相同的MAC地址。
不过也会有特例,(不在同一个数据链路MAC地址可以不同,虚拟机通过虚拟软件设置MAC地址给虚拟网卡使用),但是全球通信设备的设计前提都是有唯一的MAC地址。

MAC地址最高字节(MSB)的低第二位(LSb)表示这个MAC地址是全局的还是本地的,即U/L(Universal/Local)位,如果为0,表示是全局地址。所有的OUI这一位都是0。

MAC地址最高字节(MSB)的低第一位(LSb),表示这个MAC地址是单播还是多播。0表示单播。

(注意:在实际中,低位在前,高位在后)

在这里插入图片描述

(46)介质访问控制(MAC)相关协议

参考:
介质访问控制(MAC)相关协议

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值