计算机网络
一、 计算机网络体系结构
问:OSI参考模型
国际标准化组织(ISO)提出的网络体系结构模型,称为开放系统互联参考模型(OSI/RM),通常简称为OSI参考模型。
OSI有七层,自下而上依次为物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。每一层的作用如下:
- 物理层(比特Bit):负责在连接各个计算机的传输媒介上传输数据比特流,确定与传输媒介的接口相关的一些特性。(通过媒介传输比特,确定机械及电气规范)
- 数据链路层(帧Frame):将比特组装成帧和点到点的传递。
- 网络层(分组或数据包Packet):负责网际互连及对数据包进行路由选择和存储转发。
- 传输层(报文或数据段Segment):提供端到端的可靠报文传递和错误恢复。
- 会话层(会话协议数据单元SPDU):建立、管理和终止会话
- 表示层(表示协议数据单元PPDU):对数据进行翻译、加密和压缩
- 应用层(应用协议数据单元APDU):允许访问OSI环境的手段
数据链路层在概念上常被划分为两个子层:逻辑链路控制子层(LLC)和媒体访问拧制子层(MAC)。数据链路层负责分配MAC地址。MAC地址(或称物理地址),48比特长,由12个十六进制数字组成,0~23位(前6位十六进制数)是厂商向IETF等机构申请用来标识厂商的代码。24到47位由厂商自行分派,是各个厂商制造的所有网卡的一个唯一编号。因此每一个网卡会有一个全球唯一固定的MAC地址,但可对应多个IP地址。MAC地址的第48位是组播地址标志位。
网络层提供点到点的通信。直接相连的结点之间的通信称为点到点通信。它只提供一台机器到另一台机器之间的通信,不会涉及程序或进程的概念。
传输层是第一个提供端到端的通信,即进程到进程的层次。由于一个主机可同时运行多个进程,因此传输层有复用和分用的功能。
每一层的协议及设备如下:
- 物理层(中继器,集线器):RJ45、CLOCK、IEEE802.3
- 数据链路(网桥,交换机):PPP、FR、HDLC、VLAN、MAC
- 网络层(路由器):IP、ICMP、ARP、RARP、OSPF、IPX、RIP(内部网关协议,基于UDP)、IGRP、IGMP
- 传输层:TCP、UDP、SPX、SCTP
- 会话层:NFS、SQL、NETBIOS、RPC
- 表示层:JPEG、MPEG、ASII
- 应用层:FTP、DNS、Telnet、SMTP、HTTP、WWW、NFS、SNMP
例1:
RIP协议是基于UDP协议实现的。
例2:网卜完成哪一层的功能?
答案:网卡工作在物理层和数据链路层的MAC子层
问:TCP/IP参考模型
TCP/IP模型从低到高依次为:网络接口层、网际层、运输层、应用层。TCP/IP由于得到广泛应用而成为事实上的国际标准。
- 网络接口层的功能类似于OSI的物理层和数据链路层。
- 网际层是TCP/IP体系结构的关键部分。它和OSI网络层在功能上非常相似。网际层将分组发往任何网络,并为之独立地选择合适的路由,但它不保证各个分组有序到达,各个分组的有序交付由高层负责。网际层定义了标准的分组格式和协议,即IP协议。当前采用的IP协议是第4版,即IPv4,它的下一个版本是IPv6。
- 传输层的功能同样和OSI中的传输层类似,是使发送端和目的端主机上的对等实体可以进行会话。
- 应用层包含所有的高层协议。如虚拟终端协议(Telnet)、文件传输协议(FTP)、域名解析服务(DNS)、电子邮件协议(SMTP)和超文本传输协议(HTTP)。
传输层主要使用以下两种协议:
- (1) 传输控制协议(Transmission Control Protocol, TCP)。它是面向连接的,数据传输的单位是报文段,能够提供可靠的交付。
- (2) 用户数据报协议(User Datagram Protocol, UDP)。它是无连接的,数据传输的单位是用户数据报,不保证提供可靠的交付,只能提供”尽最大努力交付”。
TCP/IP模型中,ARP协议属于网络层,在OSI参考模型中,ARP属于数据链路层
问:各种协议的介绍
(2) TFTP协议
TFTP协议是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。基于UDP协议实现,端口号为69。
(3) HTTP协议(超文本传输协议)
该协议定义了浏览器怎样向万维网服务器请求万维网文档,以及服务器怎样把文档传送给浏览器。HTTP是面向事务的应用层协议,它规定了浏览器和服务器之间的请求和响应格式和规则,是万维网上能够可靠地交换文件(包括文本、声音、图像等各种多媒体文件)的重要基础。
(4) NAT协议
网络地址转换属接入广域网(WAN)技术,它通过将私有网络地址(如企业内部Internet)转换为共用地址(如Internet),从而对外隐藏了内部管理的IP地址。它使得整个私有网络只需要一个全球IP地址就可以与因特网连同。由于私有网络本地IP地址是可以重用的,所以NA大大节省了IP地址的消耗;同时,它隐藏了内部网络结构,从而降低了内部网络收到攻击的风险。
(5) DHCP协议(动态主机配置协议,DHCP是应用层协议,它是基于UDP的)
常用于给主机动态地分配IP地址,提供了即插即用联网机制,这种机制允许一台计算机加入新的网络和获取IP地址而不用手动参与。
问:了解中继器、集线器、网桥、交换机、路由器、网关的概念,并知道各自的用途
(1) 中继器
中继器工作在物理层,用来连接两个速率相同且数据链路层协议也相同的网段,连接起来的几个网段仍然是一个局域网。
中继器功能是消除数字信号在基带传输中由于经过一长段电缆而造成的失真和衰减,使信号的波形和强度达到所需的要求,其原理是信号再生。
中继器既不能隔离冲突域,也不能隔离广播域。
(2) 集线器
集线器也工作在物理层,相当于一个多接口的中继器,可以将多个节点连接成一个共享式局域网,但任何时刻只能有一个节点通过公共信道发送数据。
中继器既不能隔离冲突域,也不能隔离广播域。
举例:假设一集线器存在7个端口,共连接了5台计算机,那么该网络环境中存在冲突域的个数为1。
原因:集线器的所有端口是一个冲突域,而交换机的每个端口是一个冲突域
(3) 网桥
两个或多个以太网通过网桥连接起来后,就成为一个覆盖范围更大的以太网,而原来的每个以太网就可称为一个网段。
网桥工作在数据链路层的MAC子层,可以互联不同的物理层、不同的MAC子层以及不同速率的以太网,使以太网各网段成为隔离开的碰撞域。
网桥具有过滤帧以及存储转发帧的功能,可以隔离冲突域,但不能隔离广播域。
(4) 交换机
交换机工作在数据链路层,俗称”二层交换机”,相当于一个多端口的网桥,是交换式局域网的核心设备。除此之外,还有三层交换机、四层交换机,七层交换机,分别工作在OSI第三层、第四层、第七层。
交换机允许端口之间建立多个并发的连接,允许多对计算机同时通信,实现多个节点之间的并发传输。因此,交换机的每个端口节点所占用的带宽不会因为端口节点数目的增加而减少,且整个交换机的总带宽会随着端口节点的增加而增加。
交换机一般以全双工方式工作,有的局域网交换机采用存储转发方式进行转发,有的交换机采用直通交换方式(即在收到帧的同时立即按帧的目的MAC地址决定帧的转发端口,而不必进行先缓存再进行处理)。
利用交换机可以实现虚拟局域网(VLAN),VLAN可以隔离冲突域,也可以隔离广播域。
(5) 路由器
路由器是一种具有多个输入输出端口的专用计算机,其任务是连接不同的网络(连接异构网络)并完成路由转发。
路由器是网络层设备,它实现了网络模型的下三层,即物理层、数据链路层和网络层。路由器隔离了广播域。
路由器主要完成两个功能:分组转发和路由计算。前者处理通过路由器的数据流,关键操作是转发表查询、转发以及相关的队列管理和任务调度等;后者通过和其他路由器进行基于路由协议的交互,完成路由表的计算。
(6) 网关
在传统TCP/IP术语中,网关(gateway)与路由器(router)没有区别。
在现代网络术语中,网关与路由器的定义不同。网关能在不同协议间移动数据,而路由器是在不同网络间移动数据,相当于传统所说的IP网关。网关是连接两个网络的设备,对于语音网关来说,他可以连接PSTN网络和以太网,这就相当于VOIP,把不同电话中的模拟信号通过网关而转换成数字信号,而且加入协议再去传输。在到了接收端的时候再通过网关还原成模拟的电话信号,最后才能在电话机上听到。
二、 物理层
三、 数据链路层
问:太网卡的工作模式
例1:太网卡的工作模式
答案:广播模式、多播传送、直接模式、混杂模式
问:海明码
例1:用海明码对长度为8位的数据进行检/纠错时,若能纠正一位错,则校验位数至少为多少?
答案为4。
假设为k个数据位设置r个校验位,则校验位能表示2^r个状态。
可用其中的一个状态指出"没有发生错误",用其余的2^r-1个状态指出有错误发生在某一位,包括k个数据位和r个校验位。
因此校验位的位数应满足如下关系:2^r≥k+r+1。
问:交换机攻击
交换机攻击主要有以下5种类型
(1) VLAN跳跃攻击
(2) 生成树攻击
(3) MAC表洪水攻击
(4) ARP攻击
(5) VTP攻击
问:CSMA/CD
CSMA/CD适用于有线网络,而CSMA/CA则广泛应用于无线局域网。
四、 网络层
问:IPv4地址分类
连接在Internet中的每台主机(或路由器)都分配一个32bit的全球唯一的标识符,即IP地址。IP地址的编码方法有三种:分类的IP地址、子网的划分和CIDR。
传统的IP地址是分类的地址,分为A、B、C、D、E五类。无论哪类IP地址,都由网络号和主机号两部分组成。其中,网络号代表主机所连接到的网络,主机号代表该主机或路由器在网络中的地址。
- A类地址(1~126):网络号占前8位,以0开头,主机号占后24位。
- B类地址(128~191):网络号占前16位,以10开头,主机号占后16位。
- C类地址(192~223):网络号占前24位,以110开头,主机号占后8位。
- D类地址(224~239):以1110开头,保留为多播地址。
- E类地址(240~255):以1111开头,保留为今后使用。
在各类IP地址中,有一些IP地址用于表示特殊用途,不用于作主机IP地址:
- 主机号全为0表示本网络本身,例如202.98.174.0;主机号全为1表示本网络的广播地址,例如202.98.174.255。
- 网络号剩余字段全为0的IP地址是保留地址,表示本网络,如00000000+24位主机号
- 127.X.X.X网络保留做为环路自检地址,该地址表示任意主机本身,目的地址为环路自检地址的IP数据报永远不会出现在网络上。
- 32位全为1,即255.255.255.255表示整个TCP/IP网络的广播地址;32位全为0,即0.0.0.0表示本网络上的本主机。
问:网络地址转换
网络地址转换(NAT)是通过将专用网络地址(如企业内网)转换为公用地址(如互联网Internet,从而对外隐藏了内部管理的IP地址。这样,通过在内部使用非注册的IP地址,并将它们转换为一小部分外部注册的IP地址,从而减少了IP地址注册的费用以及节省了日前越来越缺乏的IPv4地址空间。
此外,划出了部分IP地址为私有IP地址。私有IP地址值用于LAN,不用于WLAN连接。因此私有IP地址不能直接用于Internet,必须通过网关利用NAT把私有IP地址转换为Internet中合法的全球IP地址后才能用于Internet。私有IP地址有效地解决了IP地址不足的问题。私有IP地址网段如下:
- A类:1个A类网段,即10.0.0.0~10.255.255.255
- B类:16个B类网段,即172.16.0.0~172.31.255.255
- C类:256个C类网段,即192.168.0.0~192.168.255.255
在因特网中的所有路由器,对目的地址是私有地址的数据报一律不进行转发。使用NAT时,需要在专用网连接到因特网的路由器上安装NAT软件,NAT路由器至少有一个有效的外部全球地址。普通路由器在转发数据报时不改变其源IP地址和目的IP地址,且路由器工作在网络层,而NAT路由器在转发IP数据报时,一定要更换其IP地址(按路由器中的地址转换表转换源IP地址或目的IP地址)。NAT路由器转发数据报时需要查看和转换传输层的端口,其操作没有严格的层次关系。
问:子网划分与子网掩码
各类地址的默认子网掩码:
- A类:255.0.0.0
- B类:255.255.0.0
- C类:255.255.255.00
使用子网划分时的地址格式:
- A类网络:8位+子网X位+主机24-X位
- B类网络:16位+子网X位+主机16-X位
- C类网络:24位+子网X位+主机8-X位
例1:使用子网掩码255.255.255.224可以将C类地址203.67.12.0分成多少个子网。
答案:8个
把子网掩码255.255.255.224转换成二进制:11111111.11111111.11111111.11100000
网络ID=24bits(C类地址),子网ID=3位,主机ID=5位
所以,子网数位2^3=8个,每个子网的地址数为2^5=32个,每个子网的主机地址数为32-2=30个。
自所以减去2是因为全0和全1的主机号不能使用。
问:无分类编址CIDR
CIDR是在使用可变长度子网掩码的基础上提出的一种消除传统A,B,C类网络划分,并且可以在软件的支持下实现超网构造的一种IP地址的网络划分方法。这样可以大幅度提高IP地址空间的利用率,并减小路由表大小,提高路由器的路由转发能力。
CIDR的主要特点如下:
(1) 消除了传统的A,B,C类地址以及子网的概念,因而可以更加有效地分配IPv4的地址空间。CIDR使用”网络前缀”概念代替子网络概念。这样IP地址分为两部分:网络前缀、主机号。CIDR使用斜线记法,即IP地址/网络前缀所占比特数。其中,网络前缀所占比特数对应于网络号的部分,等效子网掩码中连续1的部分。
(2) 将网络前缀都相同的连续的IP地址组成”CIDR地址块”。一个CIDR地址块可以包括多个A、B、C类地址,这种地址的聚合称为路由聚合,或称为构成超网。路由聚合使得路由表中的一个表项可以表示很多个原来传统分类地址的路由,有利于减少路由之间的路由选择信息的交换,从而提高网络性能。
例1:CIDR地址块192.168.10.0/20所能包含主机的最大地址范围是多少?
答案:192.168.0.1~192.168.15.254
CIDR地址由网络前缀和主机号构成。CIDR将网络前缀都相同的连续的IP地址组成"CIDR"地址块。
本题中,网络前缀的长度为20,把IP的第17~24bit写成二进制位00001010,这8bit中的前4bit为前缀,后4bit为主机号。
由于主机号不能为全0或全1,因此地址块所能包含的主机最大范围为192.168.0.1~192.168.15.254。
问:ARP是地址解析协议,简单语言解释一下工作原理。
在实际网络的数据链路上传送数据时,最终必须使用硬件地址。所以需要一种方法来完成IP地址到MAC地址的映射,这就需要用到地址解析协议(ARP)。
每个主机(或路由器)都有一个ARP高速缓存,存放本局域网上各主机或路由器的IP地址到MAC地址的映射表,称为ARP表,主机(或路由器)使用ARP协议来动态维护此ARP表。
ARP工作在网络层,其工作原理是(广播发送ARP请求,单播发送ARP响应):
(1) 当主机源欲向本局域网上的某个目的主机发送IP数据报时,就先在其ARP高速缓存中查看有无目的主机的IP地址,如果有,就可以查出其对应的MAC地址,并将此地址写入MAC帧,然后通过局域网将该MAC帧发往此地址;如果没有,就通过使用目的MAC地址为FF-FF-FF-FF-FF-FF的帧来封装并广播ARP请求数据包(该数据包包括的内容有:源主机 IP地址,源主机MAC地址,目的主机的IP地址),可以使同一个局域网中的所有主机收到ARP请求。
(2) 当本局域网中的所有主机收到该ARP数据包时,首先检查数据包中的IP地址是否是自己的IP地址,如果不是,则忽略该数据包,如果是,则首先从数据包中取出源主机的IP和MAC地址写入到ARP列表中,如果已经存在,则覆盖,然后向源主机发出ARP响应包,该响应包中包含自己的IP地址与MAC地址的映射关系。
(3) 源主机收到ARP响应包后,将目的主机的IP和MAC地址的映射写入ARP表,然后按查询到的MAC地址发送MAC帧。如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。
问:描述RARP协议
RARP是逆地址解析协议,作用是完成硬件地址到IP地址的映射,主要用于无盘工作站,因为给无盘工作站配置的IP地址不能保存。
工作流程:在网络中配置一台RARP服务器,里面保存着IP地址和MAC地址的映射关系,当无盘工作站启动后,就封装一个RARP数据包,里面有其MAC地址,然后广播到网络上去,当服务器收到请求包后,就查找对应的MAC地址的IP地址装入响应报文中发回给请求者。因为需要广播请求报文,因此RARP只能用于具有广播能力的网络。
问:ICMP协议(因特网控制报文协议,TCP/IP协议族IP层子协议)
为了提高IP数据报交付成功的机会,网络层使用ICMP协议来允许主机或路由器报告差错和异常情况。ICMP报文作为IP层数据报的数据,加上数据报的首部,组成IP数据报发送出去。
问:在局域网内使用ping www.nowcoder.com时,使用了哪些协议?
Ping命令工作在应用层,它直接使用网络层的ICMP协议,而没有使用传输层的TCP或UDP协议。
(1) 首先将域名转换为IP地址,用到了应用层的DNS协议,而DNS协议使用了传输层的UDP协议。
(2) ping功能是测试另一台主机是否可达,程序发送一份ICMP回显请求给目标主机,并等待返回ICMP回显应答
(3) 数据在局域网中,根据MAC地址通过数据链路层传输,所以要用到ARP解析服务,获取到目的主机的MAC地址
问:IPv6
IPv6由128bit构成,通常使用冒号十六进制记法表示IPv6地址,每个16bit的值用四位十六进制值表示,各值之间用冒号分割,如68E6:8C64:FFFF:FFFF:0:1180:960A:FFFF。该表示方法允许使用零压缩,即一连串连续的零可以为一对冒号所取代,如DE08:0:0:0:0:0:0:B3可以写成DE08::B3。IP地址0:0:0:0:0:0:118.17.23.1可以写成::118.17.23.10。
IPv6所引入的主要变化:
- 更大的地址空间。IPv6将地址从IPv4的32bit增大到了128bit;
- 扩展的地址层次结构;
- 灵活的首部格式;
- 改进的选项。这一特征加快了分组处理速度;
- 允许协议继续扩充;
- 支持即插即用;
- 支持资源的预分配;
- 增加了安全性,身份验证和保密验证是IPv6的关键特征;
- 分片限制为由源点来完成,是端到端的,路由途中的路由器不允许进行分片。
问:TTL
例1:当路由器接收的IP报文的TTL值等于1时,采取的策略是什么?
答案:丢掉该分组
问:广播风暴
一个数据帧或包被传输到本地网段上的每个节点就是广播;由于网络拓扑的设计和连接问题,或其他原因导致广播在网段内大量复制,传播数据帧,导致网络性能下降,甚至网络瘫痪,这就是广播风暴。所以需要有能够隔离广播域的设备才可以抑制广播风暴。
五、 传输层
问:UDP
用户数据报协议(User Datagram Protocol)。UDP是一种无连接协议,因为UDP客户与服务器不必存在长期的关系,例如一个UDP客户创建一个套接字并发送一个数据报给一个服务器,然后立即用同一个套接字发送另一个数据报给另外一个服务器。同样,一个UDP服务器可以使用同一个套接字从若干不同的客户一连串接受多个数据报。
UDP不是可靠的,不能保证最终到达它们的目的地,不保证各个数据报的先后顺序跨越网络保持不变,也不保证每个数据报只到达一次。
UDP既可以使用IPv4,也可以使用IPv6。
问:TCP
传输控制协议(Transmission Control Protocol)。
(1) TCP是一种面向连接的协议,提供客户与服务器的连接。
(2) TCP提供可靠性。当使用TCP向另一端发送数据时,它要求对端返回一个确认。如果没有收到确认,TCP自动重传数据并等待更长时间。在数次重传失败后,TCP才放弃。
(3) TCP通过给所发送数据的每一个字节关联一个序列号进行排序。UDP提供不可靠的数据报传送,不提供确认、序列号、超时重传等机制。
(4) TCP提供流量控制,而UDP不提供流量控制。TCP总是告诉对端它能够接收多少字节的数据,这称为通信窗口。该窗口在任何时刻都指出接收缓冲区中的可用空间,从而确保发送端发送的数据不会溢出接收缓冲区。
(5) TCP的连接是全双工的。UDP也可以是全双工的。
TCP既可以使用IPv4,也可以使用IPv6 0
UDP与TCP的主要区别在于UDP不一定提供可靠的数据传输。事实上,该协议不能保证数据准确无误地到达目的地。UDP在许多方面非常有效,如UDP具有对系统资源要求较少、具有较好的实时性、网络开销小的优点。当某个程序的目标是尽快地传输尽可能多的信息时(其中任意给定数据的重要性相对较低),可使用UDP。
问:TCP和UDP的区别?
TCP和UDP的区别:
(1) TCP提供面向连接的、可靠的数据流传输;而UDP提供的是面向无连接的、不可靠的数据流传输。
(2) TCP协议保证数据按序发送,按序到达,提供超时重传来保证可靠性;但是UDP不保证按序到达,甚至不保证到达,只是努力交付,即便是按序发送的序列,也不保证按序送到。
(3) TCP传输单位称为TCP报文段,UDP传输单位称为用户数据报。
(4) TCP提供面向字节流的服务,UDP提供面向报文的服务。
(5) TCP有流量控制和拥塞控制;UDP没有,网络拥堵不会影响发送端的发送速率
(6) TCP支持一对一的连接;而UDP则可以支持一对一、多对多、一对多的通信。
(7) TCP由于提供面向连接的可靠的传输服务,因此不可避免地增加了许多开销,如确认、流量控制、计时器以及连接管理,这不仅使协议数据单元的头部增加很多,还占用许多处理机资源,因此TCP主要适用于可靠性更重要的场合,如文件传输协议FTP、超文本传输协议HTTP、远程登陆TELNET等;UDP由于在传送数据之前不需要先建立连接,远程主机的传输层收到UDP报文后,不需要给出任何确认,执行速度比较快、实时性较好,因此UDP主要适用于实时性要求高的场合,如小文件传输协议(TFTP)、DNS、SNMP和实时协议(RTP)。
TCP对应的协议和UDP对应的协议
(1) TCP对应的协议:
- FTP:定义了文件传输协议,使用21端口。https://www.nowcoder.com/profile/7404313/test/8114836/23235?onlyWrong=0
- Telnet:一个通过创建虚拟终端提供登陆到远程主机终端的协议,使用23端口,用户可以以自己的身份远程连接到计算机上,可提供基于DOS模式下的通信服务。
- SMTP:邮件传送协议,用于发送邮件。服务器开放的是25号端口。
- POP3:它是和SMTP对应,POP3用于接收邮件。POP3协议所用的是110端口。
- HTTP:是从Web服务器传输超文本到本地浏览器的传送协议。HTTP协议所用的是80端口。
(2) UDP对应的协议:
- DNS:用于域名解析服务,将域名地址转换为IP地址。DNS用的是53号端口。
- SNMP:简单网络管理协议,使用161号端口,是用来管理网络设备的。由于网络设备很多,无连接的服务就体现出其优势。
- TFTP(Trival File Transfer Protocal),简单文件传输协议,该协议在熟知端口69上使用UDP服务。
问:常见的应用中有哪些是应用TCP协议的,哪些又是应用UDP协议的,为什么它们被如此设计?
多播的信息一定要用udp实现,因为tcp只支持一对一通信。
如果一个应用场景中大多是简短的信息,适合用udp实现,因为udp是基于报文段的,它直接对上层应用的数据封装成报文段,然后丢在网络中,如果信息量太大,会在链路层中被分片,影响传输效率。
如果一个应用场景重性能甚于重完整性和安全性,那么适合于udp,比如多媒体应用,缺一两帧不影响用户体验,但是需要流媒体到达的速度快,因此比较适合用udp
如果要求快速响应,那么udp听起来比较合适
如果又要利用udp的快速响应优点,又想可靠传输,那么只能考上层应用自己制定规则了。
常见的使用udp的例子:ICQ,QQ的聊天模块。
以qq为例的一个说明(转载自知乎)
登陆采用TCP协议和HTTP协议,你和好友之间发送消息,主要采用UDP协议,内网传文件采用了P2P技术。总来的说:
1.登陆过程,客户端client 采用TCP协议向服务器server发送信息,HTTP协议下载信息。登陆之后,会有一个TCP连接来保持在线状态。
2.和好友发消息,客户端client采用UDP协议,但是需要通过服务器转发。腾讯为了确保传输消息的可靠,采用上层协议来保证可靠传输。如果消息发送失败,客户端会提示消息发送失败,并可重新发送。
3.如果是在内网里面的两个客户端传文件,QQ采用的是P2P技术,不需要服务器中转。
问:TCP三次握手和四次挥手的全过程
(1) 三次握手
第一次握手(SYN=1,seq=x):客户端首先向服务器发送一个连接请求报文段,并进入SYN_SEND状态,等待服务器确认。这个报文段不含应用层数据,其首部中的SYN标志位被置为1,另外,客户端会随机选择一个起始序号seq=x。(连接请求报文段不携带数据,但要消耗一个序号)
第二次握手(SYN=1, ACK=1, seq=y, ack=x+1):服务器收到连接请求报文段,如同意建立连接,就向客户端发回确认,并为该TCP连接分配TCP缓存和变量,此时服务器进入SYN_RECV状态。在确认报文段中,SYN和ACK位都被置为1,确认号字段的值为x+1,并且服务器随机产生起始序号seq=y。确认报文段同样不包含应用层数据。
第三次握手(ACK=1, seq=x+1, ack=y+1):当客户端收到确认报文段后,还要向服务器给出确认,并且也要给该连接分配缓存和变量,客户端和服务器进入ESTABLISHED状态,完成三次握手。这个报文段的ACK标志位被置1,序号字段为x+1,确认号字段ack=y+1。(该报文段可以携带数据,如果不携带数据则不消耗序号)。
握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP连接都将被一直保持下去。
四次挥手
与建立连接的“三次握手”类似,断开一个TCP连接则需要“四次握手”。
第一次挥手(FIN=1,seq=u):主动关闭方打算关闭连接,就向被动关闭方发送一个连接释放报文段并停止再发送数据,进入FIN_WAIT1状态,主动关闭TCP连接。该报文段的FIN标志位被置为1,seq=u,它等于前面已传送过的数据的最后一个字节的序号加1(FIN报文段即使不携带数据,也要消耗一个序号)。当发送FIN报文时,发送FIN的一方就不能再发送数据了(当然,在FIN包之前发送出去的数据,如果没有收到对应的确认报文,主动关闭方依然会重发这些数据),也就是关闭了其中一条数据通路,但此时对方还可以发送数据,主动关闭方还可以接受数据。
第二次挥手(ACK=1,seq=v,ack=u+1):被动关闭方收到连接释放报文段后即发出确认,并进入CLOSE_WAIT状态,确认号是ack=u+1,而这个报文段自己的序号是v,等于它前面已经传送过的数据最后一个字节的序号加1。此时,从主动关闭方到被动关闭方这个方向的连接就释放了,TCP连接处于半关闭状态,但被动关闭方若发送数据,主动关闭方仍要接收。
第三次挥手(FIN=1,ACK=1,seq=w,ack=u+1):若被动关闭方已经没有要向主动关闭方发送的数据,就通知TCP释放连接,此时其发出FIN=1的连接释放报文段,进入LAST_ACK状态。
第四次挥手(ACK=1,seq=u+1,ack=w+1):主动关闭方收到连接释放报文段后,必须发出确认。在确认报文段中,ACK字段被置1,确认号ack=w+1,序号seq=u+1。进入TIME_WAIT状态,至此,完成四次挥手。
此时,TCP连接还没有释放掉,必须经过时间等待计时器设置的时间2MSL后,主动关闭方才进入连接关闭状态。
问:为什么建立连接协议是三次握手,而关闭连接却是四次握手呢?
这是因为服务端的LISTEN状态下的SOCKET当收到SYN报文的连接请求后,它可以把ACK和SYN(ACK起应答作用,而SYN起同步作用)放在一个报文里来发送。但关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,所以你可能未必会马上会关闭SOCKET,也即你可能还需要发送一些数据给对方之后,再发送FIN报文给对方来表示你同意现在可以关闭连接了,所以它这里的ACK报文和FIN报文多数情况下都是分开发送的。
问:TCP的三次握手过程中,为什么会采用三次握手,若采用二次握手可以吗?
建立连接的过程是利用客户服务器模式,假设主机A为客户端,主机B为服务器端。TCP的三次握手过程:主机A向B发送连接请求;主机B对收到的主机A的报文段进行确认;主机A再次对主机B的确认进行确认。
采用三次握手是为了防止失效的连接请求报文段突然又传送到主机B,因而产生错误。失效的连接请求报文段是指:主机A发出的连接请求没有收到主机B的确认,于是经过一段时间后,主机A又重新向主机B发送连接请求,且建立成功,顺序完成数据传输。
考虑这样一种特殊情况,主机A第一次发送的连接请求并没有丢失,而是因为网络节点导致延迟达到主机B,主机B以为是主机A又发起的新连接,于是主机B同意连接,并向主机A发回确认,若不采用三次握手,新的连接就建立了,但是此时主机A根本不会理会,主机B就一直在等待主机A发送数据,导致主机B的资源浪费。
采用两次握手不行,原因就是上面说的实效的连接请求的特殊情况。
问:TCP的四次挥手过程中,为什么TIME_WAIT状态需要等待2MSL(最大报文段生存时间)才能返回到CLOSE状态?
(1) 保证A发送的最后一个ACK报文段能够成功到达B
A发送的最后一个ACK报文段可能会丢失,因而使得处在LAST_ACK状态的B收不到对已发送的FIN和ACK报文段的确认。B会超时重传这个FIN和ACK报文段,而A就能在2MSL时间内收到这个重传的ACK+FIN报文段,接着A重传一次确认。
(2) 防止已失效的连接请求报文段出现在本连接中
A在发送完最后一个ACK报文段后,再经过2MSL,就可以使本连接持续时间内所产生的所有报文段都从网络中消失。
问:TCP拥塞控制-慢启动和拥塞避免
六、 应用层
问:FTP协议
问:DNS域名系统,简单描述其工作原理。
域名系统DNS(Domain Name System)是因特网使用的命名系统,用来把便于人们记忆的含有特定含义的主机名(如www.baidu.com)转换成便于机器处理的IP地址。DNS系统采用客户/服务器模型,其协议运行在UDP之上,使用53号端口。该应用一般不直接为用户使用,而是为其他应用服务,如HTTP,SMTP等在其中需要完成主机名到IP地址的转换。
工作原理
当客户端需要域名解析时,通过本机的DNS客户端构造一个DNS请求报文,以UDP数据报方式发往本地域名服务器。域名解析有两种方式:递归查询(实际中几乎不使用)和迭代查询。
(1) 递归查询
如果本地主机所询问的本地域名服务器不知道被查询域名的IP地址,那么本地域名服务器就以DNS客户的身份,向根域名服务器继续发出查询请求报文(即替该主机继续查询),而不是让主机自己进行下一步的查询。在这种情况下,本地域名服务器只需向根域名服务器查询一次,后面的几次查询都是递归地在其他几个域名服务器之间进行的(如图a步骤3-6)。在步骤7中,本地域名服务器从根域名服务器得到了所需的IP地址,最后在步骤8中,本地域名服务器把查询结果告诉主机。
(2) 迭代查询
当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出所要查询的IP地址,要么告诉本地域名服务器:“你下一次应当向哪个顶级域名服务器进行查询”,然后让本地域名服务器向这个顶级域名服务器进行后续的查询,如图b所示。同样,顶级域名服务器收到查询报文后,要么给出所要查询的IP地址,要么告诉本地域名服务器下一步应当向哪一个域名服务器查询。最后,本地域名服务器知道了所要解析的域名的IP地址,然后把查询结果返回给发起查询的主机。
问:HTTP协议的特点
建议阅读:HTTP协议详解
HTTP协议的主要特点可概括如下:
- 支持客户/服务器模式。
- 简单快速。
客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。 - 灵活。
HTTP允许传输任意类型的数据对象,传输的类型由Content-Type加以标记。 - 无连接。
无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。 - 无状态。
HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
问:如何理解HTTP协议的”无连接”特点?
无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。早期这么做的原因是:服务器需要处理全世界数十万、上百万客户端的网页访问,但每个客户端(即浏览器)与服务器之间数据交换的间歇性较大(即传输具有突发性、瞬时性),并且网页浏览的联想性、发散性导致两次传送的数据关联性很低,大部分通道实际上会很空闲、无端占用资源。因此HTTP的设计者有意利用这种特点将协议设计为请求时建连接、请求完释放连接,以尽快将资源释放出来服务其他客户端。
随着时间的推移,网页变得越来越复杂,里面可能嵌入了很多图片,这时候每次访问图片都需要建立一次TCP连接就显得很低效。后来,Keep-Alive被提出用来解决效率低的问题。Keep-Alive功能使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,Keep-Alive功能避免了建立或者重新建立连接。这样一来,客户端和服务器之间的 HTTP 连接就会被保持,不会断开(超过 Keep-Alive 规定的时间,意外断电等情况除外),当客户端发送另外一个请求时,就使用这条已经建立的连接。市场上的大部分Web服务器,包括iPlanet、IIS和Apache等,都支持HTTP Keep-Alive。
对于提供静态内容的网站来说,这个功能通常很有用。但是,对于负担较重的网站来说,这里存在另外一个问题:虽然为客户保留打开的连接有一定的好处,但它同样影响了性能,因为在处理暂停期间,本来可以释放的资源仍旧被占用。当Web服务器和应用服务器在同一台机器上运行时,Keep-Alive功能对资源利用的影响尤其突出。
问:如何理解HTTP协议的”无状态”特点?
HTTP是一个无状态协议,这意味着每个请求都是独立的,Keep-Alive没能改变这个结果。无状态是指协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。即我们给服务器发送HTTP请求之后,服务器根据请求,会给我们发送数据过来,但是,发送完,不会记录任何。
HTTP协议这种特性有优点也有缺点:缺点在于如果后续处理需要前面的信息,则它必须重传,每次请求会传输大量重复的内容信息,也导致每次连接传送的数据量增大。优点在于在服务器不需要先前信息时它的应答就较快;同时也解放了服务器,每一次请求”点到为止”不会造成不必要的连接占用,
然而,当客户端与服务器进行动态交互的Web应用程序出现之后,HTTP无状态的特性严重阻碍了这些应用程序的实现,毕竟交互是需要承前启后的,简单的购物车程序也要知道用户到底在之前选择了什么商品。于是,两种用于保持HTTP连接状态的技术就应运而生了,一个是Cookie,而另一个则是Session。
(1) Cookie
Cookie可以保持登录信息到用户下次与服务器的会话,换句话说,下次访问同一网站时,用户会发现不必输入用户名和密码就已经登录了(当然,不排除用户手工删除Cookie)。而还有一些Cookie在用户退出会话的时候就被删除了,这样可以有效保护个人隐私。Cookies 最典型的应用是判定注册用户是否已经登录网站,用户可能会得到提示,是否在下一次进入此网站时保留用户信息以便简化登录手续,这些都是 Cookies 的功用。另一个重要应用场合是“购物车”之类处理。用户可能会在一段时间内在同一家网站的不同页面中选择不同的商品,这些信息都会写入 Cookies,以便在最后付款时提取信息。
(2) Session
与Cookie相对的一个解决方案是Session,它是通过服务器来保持状态的。当客户端访问服务器时,服务器根据需求设置 Session,将会话信息保存在服务器上,同时将标示Session的SessionId传递给客户端浏览器,浏览器将这个SessionId保存在内存中,我们称之为无过期时间的Cookie。浏览器关闭后,这个Cookie就会被清掉,它不会存在于用户的Cookie临时文件。以后浏览器每次请求都会额外加上这个参数值,服务器根据这个SessionId,就能取得客户端的数据信息。如果客户端浏览器意外关闭,服务器保存的Session数据不是立即释放,此时数据还会存在,只要我们知道那个 SessionId,就可以继续通过请求获得此 Session的信息,因为此时后台的 Session还存在,当然我们可以设置一个 Session超时时间,一旦超过规定时间没有客户端请求时,服务器就会清除对应 SessionId 的Session信息。
问:在浏览器中输入www.baidu.com后执行的全部过程
事件顺序
(1) 浏览器获取输入的域名www.baidu.com
(2) 浏览器向DNS请求解析www.baidu.com对应的IP地址
(3) 域名系统DNS解析出百度服务器的IP地址
(4) 浏览器与该服务器建立TCP连接(默认端口号80),并向服务器发送HTTP请求,请求百度首页
(6) 服务器通过HTTP响应把首页文件发送给浏览器
(7) TCP连接释放
(8) 浏览器将首页文件进行解析,并将Web页显示给用户。
涉及到的协议
(1) 应用层:HTTP(WWW访问协议),DNS(域名解析服务)
(2) 传输层:TCP(为HTTP提供可靠的数据传输),UDP(DNS使用UDP传输)
(3) 网络层:IP(IP数据数据包传输和路由选择),ICMP(提供网络传输过程中的差错检测),ARP(将本机的默认网关IP地址映射成物理MAC地址)
问:常见的http协议状态码
http1.1状态吗分为五类,所有状态码的第一个数字代表了响应的五种状态之一。
- 1xx:消息,这一类型的状态码,代表请求已被接受,需要继续处理。其中100表示客户端应当继续发送请求。
- 2xx:成功,这一类型的状态码,代表请求已成功被服务器接收、理解、并接受。其中200表示请求已成功,请求所希望的响应头或数据体将随此响应返回。
- 3xx:重定向。
- 302 临时重定向,(此时浏览器会产生两次http请求)
- 4xx:客户端错误。其中400表示:语义有误,当前请求无法被服务器理解。除非进行修改,否则客户端不应该重复提交这个请求;或者请求参数有误。
- 400 请求报文存在语法错误
- 403 禁止访问,资源不可用
- 404 请求的资源不存在
- 5xx:服务器错误。
- 500 服务器内部错误
- 503 服务器繁忙
问:HTTP请求方法
OPTIONS、HEAD、GET、POST、PUT、DELETE、TRACE、CONNECT
七、 常用网络测试工具
问:ping
ping是用来检查网络是否通畅或者网络连接速度的命令。
它所利用的原理是这样的:利用网络上机器IP地址的唯一性,给目标IP地址发送一个数据包,再要求对方返回一个同样大小的数据包来确定两台网络机器是否连接相通、时延是多少。ping命令是控制台命令,例如Ping百度的用法如下:
ping www:baidu.com
问:tracert
tracert是路由跟踪实用程序,用于确定IP数据包访问目标所采取的路径。
tracert命令用IP生存时间(TTL)字段和ICMP错误消息来确定从一个主机到网络上其他主机的路由。其命令格式如下:
tracert[-d] [-h maximum_hops] [-j computer_list] [-w timeout] target_name
可以使用tracert命令确定数据包在网络上的停留位置。例如:tracert www:baidu.com
则会打印出从当前主机到目的主机所经过的路由地址。
问:telnet
telnet在网络测试中十分有用,例如可以用telnet测试80端口的Web服务器是否正常工作。输入:
telnet www.hitsz .edu.cn 80
然后服务器响应:
Trying 219.223.252.3...
Connected to www.hitsz.edu.cn
Eseape character is '^]'.
然后输入:
GET / HTTP1.1
如果Web服务器正常工作的话,就会返回服务器的响应头,以便你确认服务器的情况。
问:netstat
netstat是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每个网络接口设备的状态信息。
netstat用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。使用格式为:
netstat [-a] [-e] [-n] [-o] [-p Protocol] [-r] [-s] [Interval]
一般用netstat -an
来显示所有连接的端口并用数字表示。
例1:某校园网用户无法访问外部站点210.102.58.74,管理人员在Windows操作系统下可以使用()命令判断故障发生在校园网内还是校园网外。
A. ping 210.102.58.74 B. tracert 210.102.58.74
C. netstat 210.102.58.74 D. arp 210.102.58.74
答案:B
八、 其他东西
问:往返时延和网络延迟
往返时延(Round-Trip Time, RTT):表示从发送端发送数据开始,到发送端收到来自接收端的确认(接收端收到数据后便立即发送确认),总共经历的时延。
网络延迟是数据进入网络到离开网络所花费的总时间。
使用最广泛是的B通路
B通路:具有定时的64Kbit/s通路,用于传递广泛的各种用户信息流,不传递ISDN电路交换的信令信息。
D通路:主要用于传递ISDN电路交换的信令信息,也可以传递遥信信息和分组交换数 据。D通路可以有不同的比特率,
H通路:H通路有以下几种传输速率:
H0通路:384Kbit/s
H11通路:1536 Kbit/s
H12通路:1920 Kbit/s
H通路用于传递各种用户信息流,例如高速传真、电视影像、高质量音频或声音节目、高速数据、分组交换信息等,不传递ISDN电路交换的信令信息。
https://www.nowcoder.com/profile/7404313/test/8046849/14529?onlyWrong=0
https://www.nowcoder.com/profile/7404313/test/7959409/3989?onlyWrong=0