恶补各种知识(网络篇)

1、下列对网络拓扑结构描述正确的有(        )

正确答案: B C   

A.在星形结构的网络中,只能采用集中式访问控制策略
B.典型的环形网络有Token-Ring和FDDI等
C.总线型网络一般采用CSMA/CD介质访问控制协议
D.环形网络常用的访问控制方法是基于令牌的访问控制,是一种集中式访问控制技术
解析:A。星型拓扑结构采用CSMA/CD(载波监听多点接入/碰撞检测)。
D改为:环形网络常用的访问控制方法是基于令牌的访问控制,是一种分布式访问控制技术。
2、IP地址分类:

IPV4简单粗暴地把IP地址分为五类。分类方法如下图所示:

也就是说,分为以下几类:

A: 0.0.0.0-127.255.255,其中段0和127不可用

B: 128.0.0.0-191.255.255.255

C: 192.0.0.0-223.255.255.255

D: 224.0.0.0-239.255.255.255

E: 240.0.0.0-255.255.255.255,其中段255不可用

3、局域网体系结构中 () 被划分成MAC和LLC两个子层。 

正确答案: B  

A.物理层
B.数据链路层
C.网络层
D.运输层
局域网体系结构分为3层:物理层、媒体访问控制(MAC)子层和逻辑链路控制(LLC)子层(实际上仍是两层,即:物理层和数据链路层)。
下面分别介绍它们各自的主要作用。
1.物理层 局域网体系结构中的物理层和计算机网络OSI参考模型中物理层的功能一样,主要处理物理链路上传输的比特流,实现比特流的传输与接收、同步前序的产生和删除;建立、维护、撤销物理连接,处理机械、电气和过程的特性。
2.媒体访问控制MAC子层 MAC子层负责介质访问控制机制的实现,即处理局域网中各站点对共享通信介质的争用问题,不同类型的局域网通常使用不同的介质访问控制协议,另外MAC子层还涉及局域网中的物理寻址。
局域网体系结构中的LLC子层和MAC子层共同完成类似于OSI参考模型中数据链路层的功能,将数据组成帧进行传输,并对数据帧进行顺序控制、差错控制和流量控制,使不可靠的链路变为可靠的链路。
3.逻辑链路控制LLC子层 LLC子层负责屏蔽掉MAC子层的不同实现,将其变成统一的LLC界面,从而向网络层提供一致的服务。

一层(物理层):网卡、集线器、中继器
二层(数据链路层):网桥、交换机
三层(网络层):路由器
传输层、应用层:网关。
 
3、以下哪种http状态下,浏览器会产生两次http请求?()

正确答案: C   

  1. 304

  2. 404

  3. 302

  4. 400

解析:304未修改(表示客户机缓存的版本是最新的,客户机应该继续使用它。)
404找不到改页面
302暂时重定向
400代表客户端发起的请求不符合服务器对请求的某些限制,或者请求本身存在一定的错误。

1.1 OSI 7层模型 与 TCP/IP 四层模型

OSI 7层模型

  1. 物理层:负责 0,1 比特流与电压高低、光的闪灭之间的互换

    设备: 中继器:将电缆传过来的电信号与光信号经中继器的波形调整与放大传给另一个。
  2. 数据链路层: 负责数据帧与比特流的转换

    设备: 网桥:通过 MAC 地址连接两个网络。通过CRC(cyclic redundancy check 循环冗余校验)的方式对数据链路层中的 FCS(frame check sequence) 验证。从而确保数据的完整性。
  3. 网络层:负责寻址与路由的选择

    设备: 路由器:根据IP 地址进行处理。
  4. 传输层:管理两个节点之间数据的传输。确保数据被可靠的传送到目标地址,检测是否有数据丢失。
  5. 会话层:负责建立和断开通信连接
  6. 表示层:负责数据格式的转换
  7. 应用层:针对特定应用的协议

    4-7层交换机
    网关:负责从传输层到应用层的数据进行转换和转发的设备。
    

TCP/IP 四层模型
包为描述数据的全能型单位。

  • 网络接口层
    单位:帧
    相关技术:

    • MAC 地址: 使用网卡(NIC) , 有唯一性
    • 共享介质型网络:半双工通信,只发送或只接收的方式
      1、争用方式(CSMA (carrier sense multiple access) - 载波监听多路访问)

    2、令牌传递方式

    • 非共享介质型网络:双工通信
      每个站直连交换机,由交换机负责转发数据帧。
    • 以太网帧格式: MAC(介质访问控制层)+LLC(逻辑链路控制层)+SNAP+IP+TCP+上层数据+FCS
  • 网络层
    协议:IP / ICMP / ARP(Address Resolution Protocol) / NAT / DHCP / DNS 
    相关技术:

    • Hop : 数据链路层以下分层的传输数据帧的一个区间。是主机或路由器网卡不经其他路由器而能直接到达的对象之间的一个区间。
    • MTU (Maximum Transmission Unit): 最大传输单位
    • ARP : 通过 IP 地址 得到 MAC 地址 -- RARP : MAC 得到 IP
    • ICMP :确认网络的正常使用,以及异常的排查
      类型3 :目标不可达
      类型5 :重定向
      类型11 :超时
      类型0 :向对方发送消息
      类型8 :接收对方发送的消息
      ping 命令就是 类型0、8 。
      TTL Time To Live 防止IP 包无限制的传递下去
    • NAT(Network Adddress Translator) : 由本地网络中的私有地址转换为全局 IP 地址。
    • DNS :域名命名系统 -- 使用 TCP 53号端口
    • DHCP :动态域名控制协议
    • 路由控制
  • 传输层
    协议:TCP / UDP
  • 应用层
    协议:WWW / HTTP / MIME,SMTP、POP、IMPA / FTP / TELNET - SSH / SNMP
    相关技术:

    • FTP :用两条 TCP 连接:

      1、数据控制 , 使用 21号端口
      2、数据传输 , 使用 20号端口
      3、状态码: 1-提供信息,2-连接管理,3-用户相关,4-错误,5-文件系统
    • HTTP : 使用 80 端口

      1、 主要命令:GET.PUT.POST.DELETE.OPTIONS.HEAD.TRACE
      2、 状态码: 1-提供信息,2-肯定应答,3-重写向请求,4-客户端请求内容错误,5-服务器错误
    • HTTPS : 使用 443 端口

1.TCP/UDP区别?

1.1 TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接

1.2 TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付

     Tcp通过校验和,重传控制,序号标识,滑动窗口、确认应答实现可靠传输。如丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制。

1.3 UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性有较高的通信或广播通信。

1.4 每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信

1.5 TCP对系统资源要求较多,UDP对系统资源要求较少。

2. 拥塞控制?

在某段时间内,对网络中的资源(链路容量,交换节点中的缓存和处理机等)需求大于可用的,就会造成拥塞。 

拥塞控制就是防止过多的数据注入到网络中造成拥塞,是路由器或链路不会过载。

拥塞控制有四种算法:1.慢开始;2拥塞避免;3.快重传和快恢复算法;4快恢复算法和快重传算法配合使用。

拥塞控制和流量控制的区别: 
拥塞控制是一个全局性的过程,涉及所有主机和路由器,以及其他因素。 
流量控制是端到端的,发送端和接收端,需要做的是抑制发送端的发送速率,以便来的及接收。

3. 流量控制?

TCP的流量控制是利用滑动窗口机制实现的,接收方在返回的ACK中会包含自己的接收窗口的大小,以控制发送方的数据发送。

 

TCP的报头:

这里写图片描述 
1. 源端口号:表示发送端端口号,字段长为16位。 
2. 目标端口号:表示接收端口号,字段长为16位。 
3. 序列号:表示发送数据的位置,字段长为32位。每发送一次数据,就累加一次该数据字节数的大小。 
注意:序列号不会从0或1开始,而是在建立连接时由计算机生成的一个随机数作为其初始值,通过SYN包发送给接收端主机。然后再将每转发过去的字节数累加到初始值上表示数据的位置。 
4. 确认应答号:表示下一次应该收到的数据的序列号,字段长为32字节。发送端收到这个确认应答以后可以认为在这个序号以前的数据都已经被正常接收。

序号的优点:

(1)保证报文按序到达。 
(2)保证可靠性。 
(3)保证效率。 
(4)精准的报告哪些报文已经收到,哪些需要重传。

  1. 首部长度:该字段长度为4位,单位为4字节(32位)。TCP首部长度不包括选项的话,是20个字节,20/4=5,5的二进制序列:0101,报头长度也叫数据偏移,所以该字段可以设置为5,选项字段最大的是40字节,所以,TCP首部长度为最大为20+40=60字节,该字段可以设置的最大长度为60/4=15。
  2. 保留:该字段主要是为了以后扩展时使用,其长度为4位。一般设置为0,即使收到的包在该字段不为0,此包也不会丢弃。
  3. 控制位:字段长为6,每一位从左到右分别为:URG、ACK、PSH、RST、SYN、FIN。当对应的值为1,表示有具体含义。
字段含义
URG 紧急指针是否有效。为1,表示某一位需要被优先处理。
ACK 确认号是否有效,一般置为1。
PSH 提示接收端应用程序立即从TCP缓冲区把数据读走。
RST 对方要求重新建立连接,复位。
SYN 请求建立连接,并在其序列号的字段进行序列号的初始值设定。建立连接,设置为1.
FIN 希望断开连接。

8. 窗口大小:接收缓冲区的大小,TCP不允许发送超过此处所示大小的数据。 
9. 校验和:发送端填充,CRC校验,接收校验不通过,则认为数据有问题。和UDP的区别是,UDP校验的是数据本身,TCP校验的不仅包含TCP首部,而且包含TCP数据部分。 
10. 紧急指针:只有在URG为1时有效,该字段为1表示本报文的段中的紧急数据的指针。 
11. 选项:用于提高TCP的传输性能。需要根据首部长度进行控制,其最大长度为40字节。

我们在着重讲一下在三次握手和四次挥手中的用到序列号、确认号及标志位。

1. 序列号seq

占4个字节,用来标记数据段的顺序,TCP把连接中发送的所有数据字节都编上一个序号,第一个字节的编号由本地随机产生,给字节编上序号后,就给每一个报文段指派一个序号,序列号seq就是这个报文段中的第一个字节的数据编号。

2. 确认号ack

占4个字节,期待收到对方下一个报文段的第一个数据字节的序号,序列号表示报文段携带数据的第一个字节的编号,而确认号指的是期望接受到下一个字节的编号,因此挡墙报文段最后一个字节的编号+1即是确认号。

3. 确认ACK

占1个比特位,仅当ACK=1,确认号字段才有效。ACK=0,确认号无效。

4. 同步SYN

连接建立时用于同步序号。当SYN=1,ACK=0表示:这是一个连接请求报文段。若同意连接,则在响应报文段中使用SYN=1,ACK=1.因此,SYN=1表示这是一个连接请求,或连接接收报文,SYN这个标志位只有在TCP建立连接才会被置为1,握手完成后SYN标志位被置为0.

5. 终止FIN

用来释放一个

TCP三次握手以及四次挥手的过程

这里写图片描述

三次握手的过程

step1:第一次握手

建立连接时,客户端发送SYN包到服务器,其中包含客户端的初始序号seq=x,并进入SYN_SENT状态,等待服务器确认。(其中,SYN=1,ACK=0,表示这是一个TCP连接请求数据报文;序号seq=x,表明传输数据时的第一个数据字节的序号是x)。

step2:第二次握手

服务器收到请求后,必须确认客户的数据包。同时自己也发送一个SYN包,即SYN+ACK包,此时服务器进入SYN_RECV状态。(其中确认报文段中,标识位SYN=1,ACK=1,表示这是一个TCP连接响应数据报文,并含服务端的初始序号seq(服务器)=y,以及服务器对客户端初始序号的确认号ack(服务器)=seq(客户端)+1=x+1)。

step3:第三次握手

客户端收到服务器的SYN+ACK包,向服务器发送一个序列号(seq=x+1),确认号为ack(客户端)=y+1,此包发送完毕,客户端和服务器进入ESTAB_LISHED(TCP连接成功)状态,完成三次握手。

未连接队列

在三次握手协议中,服务器维护一个未连接队列,该队列为每个客户端的SYN包(syn=j)开设一个条目,该条目表明服务器已收到SYN包,并向客户发出确认,正在等待客户的确认包时,删除该条目,服务器进入ESTAB_LISHED状态。

常见面试题:

1.为什么需要三次握手,两次不可以吗?或者四次、五次可以吗? 
我们来分析一种特殊情况,假设客户端请求建立连接,发给服务器SYN包等待服务器确认,服务器收到确认后,如果是两次握手,假设服务器给客户端在第二次握手时发送数据,数据从服务器发出,服务器认为连接已经建立,但在发送数据的过程中数据丢失,客户端认为连接没有建立,会进行重传。假设每次发送的数据一直在丢失,客户端一直SYN,服务器就会产生多个无效连接,占用资源,这个时候服务器可能会挂掉。这个现象就是我们听过的“SYN的洪水攻击”。 
总结:第三次握手是为了防止:如果客户端迟迟没有收到服务器返回确认报文,这时会放弃连接,重新启动一条连接请求,但问题是:服务器不知道客户端没有收到,所以他会收到两个连接,浪费连接开销。如果每次都是这样,就会浪费多个连接开销。

四次挥手过程(关闭客户端到服务器的连接)

step1:第一次挥手

首先,客户端发送一个FIN,用来关闭客户端到服务器的数据传送,然后等待服务器的确认。其中终止标志位FIN=1,序列号seq=u。

step2:第二次挥手

服务器收到这个FIN,它发送一个ACK,确认ack为收到的序号加一。

step3:第三次挥手

关闭服务器到客户端的连接,发送一个FIN给客户端。

step4:第四次挥手

客户端收到FIN后,并发回一个ACK报文确认,并将确认序号seq设置为收到序号加一。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。

客户端发送FIN后,进入终止等待状态,服务器收到客户端连接释放报文段后,就立即给客户端发送确认,服务器就进入CLOSE_WAIT状态,此时TCP服务器进程就通知高层应用进程,因而从客户端到服务器的连接就释放了。此时是“半关闭状态”,即客户端不可以发送给服务器,服务器可以发送给客户端。 
此时,如果服务器没有数据报发送给客户端,其应用程序就通知TCP释放连接,然后发送给客户端连接释放数据报,并等待确认。客户端发送确认后,进入TIME_WAIT状态,但是此时TCP连接还没有释放,然后经过等待计时器设置的2MSL后,才进入到CLOSE状态。

2.为什么需要2MSL时间? 
首先,MSL即Maximum Segment Lifetime,就是最大报文生存时间,是任何报文在网络上的存在的最长时间,超过这个时间报文将被丢弃。《TCP/IP详解》中是这样描述的:MSL是任何报文段被丢弃前在网络内的最长时间。RFC 793中规定MSL为2分钟,实际应用中常用的是30秒、1分钟、2分钟等。

TCP的TIME_WAIT需要等待2MSL,当TCP的一端发起主动关闭,三次挥手完成后发送第四次挥手的ACK包后就进入这个状态,等待2MSL时间主要目的是:防止最后一个ACK包对方没有收到,那么对方在超时后将重发第三次握手的FIN包,主动关闭端接到重发的FIN包后可以再发一个ACK应答包。在TIME_WAIT状态时两端的端口不能使用,要等到2MSL时间结束才可以继续使用。当连接处于2MSL等待阶段时任何迟到的报文段都将被丢弃。

3.为什么是四次挥手,而不是三次或是五次、六次? 
双方关闭连接要经过双方都同意。所以,首先是客服端给服务器发送FIN,要求关闭连接,服务器收到后会发送一个ACK进行确认。服务器然后再发送一个FIN,客户端发送ACK确认,并进入TIME_WAIT状态。等待2MSL后自动关闭。

总结: 
(1)为了保证客户端发送的最后一个ACK报文段能够到达服务器。即最后一个确认报文可能丢失,服务器会超时重传,然后服务器发送FIN请求关闭连接,客户端发送ACK确认。一个来回是两个报文生命周期。

如果没有等待时间,发送完确认报文段就立即释放连接的话,服务器就无法重传,因此也就收不到确认,就无法按步骤进入CLOSE状态,即必须收到确认才能close。 
(2)防止已经失效的连接请求报文出现在连接中。经过2MSL,在这个连续持续的时间内,产生的所有报文段就可以都从网络消失。


posted @ 2018-09-10 21:03  奥古斯都乀  阅读(1560)  评论(0编辑  收藏  举报