1. OSI七层,TCP/IP四层,五层,及各层包含的协议

1.1 osi七层模型

层——工作内容——数据单位
物理层——连接物理线路,底层数据传输;网卡标准。——bit
数据链路层——定义数据的基本格式,如何传输,如何标识;如网卡MAC地址。——帧Frame
网络层——控制子网的运行,如逻辑编址、分组传输、路由选择。——包packet
传输层——建立“端口到端口”的通信。——段segment
会话层——负责建立、管理和终止表示层实体之间的通信会话。
表示层——设备固有的数据格式与网络标准格式之间的转换,用于接收不同的信息,文字、图像等。
应用层——针对特定应用的协议,负责给应用程序提供统一的接口。

1.2 各层包含的协议

物理层

CLOCK 网络时间协议
IEEE802.2

数据链路层

PPP(点对点协议)
FR(帧中继)
HDLC
VLAN
MAC

网络层

ICMP:因特网控制报文协议
ARP
RARP:反向地址解析协议
OSPF
IPX
RIP
IGRP

传输层

TCP
UDP
SPX

会话层

NFS
SQL
NETBIOS
RPC

表示层

JPEG
MPEG
ASII

应用层

FTP
DNS
Telnet
SMTP
HTTP
WWW
NFS

1.3 各层对应的设备分别是?

物理层设备——
中继器:将信号整形并放大再转发出去
集线器:多端口的中继器。
数据链路层设备——
网桥:局域网间的桥梁。后被交换机取代。
局域网交换机:多端口网桥。
网络层设备——
路由器:连接不同的网络 并完成路由转发。
网络层之上的设备——
网关:连接网络。实质上是一个网络通向其他网络的IP地址。
传输层——防火墙
应用层——计算机

2. TCP三次握手

2.1 三次握手的过程

刚开始客户端处于 closed 的状态,服务端处于 listen 的状态。
第一次握手:客户端给服务端发一个 SYN 报文,并指明客户端的初始化序列号 ISN(c) 。此时客户端处于SYN_Send状态。
第二次握手:服务端收到客户端的SYN报文之后,会以自己的SYN报文作为应答,而且也是指定了自己的初始化序列号 ISN(s) ,同时会把客户端的 ISN + 1 作为ACK的值,表示自己已经收到了客户端的SYN,此时服务器处于SYN_RCVD的状态。
第三次握手:客户端收到SYN报文之后,会发送一个ACK报文,一样把服务器的ISN+1作为ACK的值,表示已经收到了服务端的SYN报文,此时客户端处于established状态
服务器收到ACK报文后,也处于established状态,此时双方已经建立了连接。

2.2 为什么需要三次握手?两次不行?

第一次握手:客户端发送网络包,服务端收到了。这样服务端就能得出结论:客户端的发送能力、服务端的接收能力是正常的。
第二次握手:服务端发包,客户端收到了。这样客户端就能得出结论:服务端的接收、发送能力,客户端的接收、发送能力是正常的。不过此时服务器并不能确认客户端的接收能力是否正常。
第三次握手:客户端发包,服务端收到了。这样服务端就能得出结论:客户端的接收、发送能力正常,服务器自己的发送、接收能力也正常。

2.3 什么是半连接队列?什么是全连接队列?可以用什么样的方式修改?

服务器第一次收到客户端的 SYN 之后,就会处于 SYN_RCVD 状态,此时双方还没有完全建立其连接,服务器会把此种状态下请求连接放在一个队列里,我们把这种队列称之为半连接队列。
全连接队列就是已经完成三次握手,建立起连接的就会放在全连接队列中。如果队列满了就有可能会出现丢包现象。

3. TCP四次挥手

3.1 四次挥手的过程

第一次挥手:客户端发送一个FIN报文,报文中会指定一个序列号。此时客户端处于FIN_WAIT1状态。
第二次挥手:服务端收到FIN之后,会发送ACK报文,且把客户端的序列值+1作为ACK报文的序列号值,表明已经收到客户端的报文了,此时服务端处于CLOSE_WAIT状态。
第三次挥手:如果服务端也想断开连接了,和客户端的第一次挥手一样,发给FIN报文,且指定一个序列号。此时服务端处于LAST_ACK状态。
第四次挥手:客户端收到FIN之后,一样发送一个ACK报文作为应答,且把服务端的序列号值+1作为自己的ACK报文的序列号值,此时客户端处于TIME_WAIT状态。需要过一阵子(2msl)以确保服务端收到自己的ACK报文后才会进入CLOSED状态。
服务端收到ACK报文后就关闭连接了,处于CLOSED状态。

3.2 TIME_WAIT状态解析

客户端发送ACK后要确保服务器已经收到了ACK报文,如果没有收到,服务器会重新发FIN报文给客户端,客户端再次收到FIN报文之后,就知道之前的ACK报文丢失了,然后再次发送ACK报文。
TIME_WAIT持续的时间至少是一个报文的来回时间(2MSL)。

4. TCP

运输层

4.1 TCP的特点

  • TCP是面向连接的协议;
  • TCP的每条连接只能有两个端点,只能是点对点的;
  • TCP提供可靠的传输服务,通过TCP连接传送的数据,无差错、不丢失、不重复、并且按序到达;
  • TCP提供全双工通信。TCP允许通信双方的应用进程在任何时候都能发送数据,两端都有发送缓存和接收缓存,用来临时存放双方的数据;
  • 面向字节流(stream)。TCP会把应用程序交给TCP的大小不等的数据块看成是一连串的无结构的字节流,能实现发1次收10次,发5次收2次这种。

    4.2 TCP是可靠的,为什么能进行可靠传输,机制是什么?

    4.2.1 TCP是可靠的

    可靠性体现在 —— 有状态、可控制。
    有状态:TCP会确认发送了哪些报文,接收方收到了哪些报文,哪些没有收到,保证数据包按序到达,不允许有差错。
    可控制:如果出现丢包或者网络状况不佳,则会跳转自己的行为,减少发送的速度或重发。

    4.2.2 为什么能进行可靠传输?

  1. 数据包校验:目的是检测数据在传输过程中的任何变化,若校验出包有错,则丢失报文段并且不给出响应,这时TCP发送数据段超时后会重发数据。
  2. 对失序数据包重排序:TCP报文段作为IP数据报来传输,而IP数据报的到达可能会失序,因此TCP报文段的到达也可能会失序。TCP会对失序的数据进行重新排序,然后再交给应用层。
  3. 丢弃重复数据:对于重复数据,能够丢弃重复数据。
  4. 应答机制:当TCP收到发自TCP连接另一端的数据,它将发送一个确认。这个确认不是立即发送,通常将推迟几分之一秒。

    这个推迟发送ACK的作用应该是:①合并多个ACK,②为了将反馈数据时带上ACK。

  5. 超时重发:当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。

  6. 流量控制:TCP连接的每一方都有固定大小的缓冲空间。TCP的接收端只允许另一端发送接收端缓冲区所能接纳的数据,这可以防止较快主机致使较慢主机的缓冲区溢出,这就是流量控制。TCP使用的流量控制协议是可变大小的滑动窗口协议

    缓冲区溢出是指当计算机向缓冲区填充数据时超出了缓冲区本身的容量,溢出的数据覆盖在合法数据上。 滑动窗口的大小意味着接收方还有多大的缓冲区可以用来接收数据。发送方可以通过滑动窗口来确定发送多少字节的数据,当滑动窗口为0时一般不能发送数据。

4.2.3 拥塞控制(congestion control)

当网络环境特别差容易丢包,为保证可靠传输,就需要拥塞控制。
判断是否发生拥塞的依据是发生重传(即没有按时收到应当到达的确认报文);
拥塞窗口cwmd(变量)的值虽网络拥塞程度动态变化,没有出现拥塞就增大一些,出现拥塞就减小一些;
慢启动阈值ssthresh

[慢启动] 每轮次cwnd翻倍
cwnd = 1 swnd = cwnd ssthresh = 16
cwnd = 2 cwnd = 4
cwnd = 8 cwnd = 16达到了ssthresh慢启动阈值就转为拥塞避免算法
[拥塞避免] 每轮次cwnd+1
cwnd …… = 24 这时发生了超时重传
将ssthresh的值更新为发生拥塞时cwnd的一半,将cwnd值减少为1,并重新开始执行满开始算法。
[快重传] 使发送方尽快重传,而不是等重传超时计时器超时(RTO)再重传
接收方立即发送确认,收到了失序报文段要立即发送已收到的报文段的重复确认;
发送方一旦收到三个连续的重复确认,就将相应的报文段立即重传,而不是等待该报文段的超时重传计时器超时再重传;
对于个别丢失的报文段,就不会出现超时重传,也不会误认为出现了拥塞,也就不会降低拥塞窗口为1了。
image.png
[快恢复]
发送方将慢开始门限ssthresh值和拥塞窗口cwnd值调整为当前窗口的一半,开始执行拥塞避免算法。
image.png

4.3 TCP对应的应用层协议

FTP 文件传输协议, 端口 21
Telnet 远程登陆协议
SMTP 简单邮件传送协议, 端口 25
POP3 和SMTP对应,POP3用于接收邮件,端口 110
HTTP 从Web服务器传输超文本到本地浏览器的传送协议。

4.4 保活计时器的作用?

keepalive timer

5. UDP

5.1 UDP的特点

5.456 UDP对应的应用层协议

DNS
SNMP 简单网络管理协议,端口161,用于管理网络设备。
TFTP 简单文件传输协议,端口69。

5.7 TCP和UDP的异同

首先他们都是传输层的协议,负责实现计算机端口间的通信。
TCP是面向连接的协议,需要通过三次握手建立连接,四次挥手断开连接。
UDP是非连接的,想传送数据的时候就直接扔过去。
因此TCP是可靠的传输,UDP是不可靠的传输,UDP可能丢包,不能保证数据顺序。
TCP的包头最小需要20字节,UDP要8字节。
TCP的报文是流模式的(收发可以不同次数),UDP报文是数据报模式的(发一次收一次)。
UDP的优点是它的速度快很多,谷歌为了提高速度就搞了一个基于UDP的QUIC协议。

6. HTTP协议

HTTP协议是网络请求协议,位于应用层。
HTTP报文包括 { 起始行start line[请求、响应];头部header;主体body }
HTTP报文分成 { 请求报文requset;响应报文response }
典型的请求方法有GET,POST,HEAD,PUT,DELETE等

http响应码(状态码)

  • 1XX 指示信息——100表示请求已接受,请客户端继续
  • 2XX 成功——200 OK成功;204 Not Content正常响应没有实体;206 Partial Content返回部分数据
  • 3XX 重定向——要完成请求必须进行更进一步的操作;301永久重定向,就是请求的url移除了给你导向了另一个;302,303临时重定向
  • 4XX 客户端错误——400请求报文有语法错误;401请求未授权;403 Forbidden 服务器拒绝提供服务;404 not found 找不到资源
  • 5XX 服务端错误——500 Internal Server Error服务器故障;503 Server Unavailable服务器繁忙

https(http over SSL)就是在http的基础上家里加密处理,SSL加密协议,认证,完整性保护啥的。

7. ARP协议

ARP协议是地址解析协议,位于网络层,作用是将IP地址转化为MAC地址(物理地址)。

7.1 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查询失败。

7.2 ARP攻击或欺骗的原理是

通过发送伪造的虚假的ARP报文,来实现的攻击或欺骗。
如 ① 虚假报文的MAC是伪造的不存在,实现ARP攻击,结果造成中断通信/断网。
② 虚假报文的MAC是攻击者自身的MAC地址,实现ARP欺骗,结果可以监听、窃取、篡改、控制流量,但不中断通信。

如何解决ARP欺骗?
PC 和 网关 双向绑定MAC地址。

8. IP,子网

8.1 IP协议

ip协议是计算机用于通信的地址信息。
公网ip地址是全球唯一的地址。
ipv4
ipv6
ipv6相比ipv4最主要的优点是什么?
更大的地址空间;
更高效的路由基础;
更好的安全性,移动性;
更好的QoS(Quality of Service)。

ip地址由 网络部分和主机部分 两部分组成。

IP包头的长度是20字节; 包头长度随着可选项而改变
可选项目包含{松散源路由;严格源路由;路由记录;时间戳}
image.png
分别写出A,B,C三类地址的私有地址范围?
10.0.0.0 — 10.255.255.255
172.16.0.0 — 172.31.255.255
192.168.0.0—192.168.255.255

.IPV6中存在分片的概念吗?为什么?
不分片 采用路径MTU发现机制,整个链路使用最小MTU发送数据

8.2 子网掩码

子网掩码用于识别IP地址中的网络位和主机位。
子网掩码也是32位的二进制数字,在子网掩码中,对应于网络地址的部分全部用1表示,主机部分全部用0表示。
还可以用网络前缀表示子网掩码。即”/<网络地址位数>” 172.16.45.0/24 表示前二十四位都是网络位。
172.16.45.0的子网掩码为255.255.255.0

8.2 子网划分

子网划分是通过借用IP地址的若干主机位来充当子网地址,从而将原来的网络分成若干个彼此隔离的子网实现的。

为什么要进行子网划分?
节约公网IP,体现网络的层次性。

子网划分的优点

  • 减少网络流量
  • 提高网络性能
  • 简化管理
  • 易于扩大地理范围

【题】有50个主机,需要为其划定网络,而目前IP地址空闲为192.168.1.0。如果全部使用上述地址段,50个主机占用254个地址显然浪费,可以对玩过地址192.168.1.0进行划分,建立一个能容纳50个主机的网络。

分析构成:
1.首先50台主机占用50个IP地址
2.去掉 特殊地址 网络标识和广播地址,所以需要52个IP地址。
3.子网掩码的数值通常以2n为其取值,所以取掩码值为64.
4.故用子网掩码为 255.255.255.64。
————————————————

9. 交换机和网桥

交换机的工作原理是

学习
广播
转发
交换机根据收到数据帧中的源MAC地址建立该地址同交换机端口的映射,并将其写入MAC地址表中。
交换机将数据帧中的目的MAC地址同已建立的MAC地址表进行比较,以决定由哪个端口进行转发。
如数据帧中的目的MAC地址不在MAC地址表中,则向所有端口转发。这一过程称之为泛洪(flood)。
广播帧和组播帧向所有的端口转发。
三个功能
学习;转发、过滤;消除回路。

10. 路由与路由器

10.1

路由器转发数据包时会修改MAC地址,为什么要修改?

当网关路由器接收到局域网数据帧时,发现数据帧中的目标 MAC地址自己的某一个端口的物理地址,这时路由器会把局域网数据帧的封装去掉。路由器认为这个 IP数据包 是要通过自己进行转发,这时它就在匹配路由表。匹配到路由项后,它就将包发往下一条地址。
路由器转发数据包不会对它的 IP源地址 和 目标地址 做修改,只会修改MAC地址。

11. VLAN

LAN:局域网

上述传统拓扑结构的关键在于用三层设备,即路由器,来隔离不同的LAN,在网络规模增大的情况下存在两个缺陷:
  1. 路由器数量需要增多,网络时延随之加长,进而导致网络数据传输速度的下降。这主要是因为数据在从一个局域网传递到另一个局域网时,必须经过路由器的路由操作: 路由器根据数据包中的相应信息确定数据包的目标地址,然后再选择合适的路径转发出去。
  2. 用户是按照它们的物理连接被自然地划分到不同的用户组(广播域)中。这种分割方式并不是根据工作组中所有用户的共同需要和带宽的需求来进行的。因此,尽管不同的工作组或部门对带宽的需求有很大的差异,但它们却被机械地划分到同一个广播域中争用相同的带宽。

综上两点,必须选出一种隔离广播域的方式,兼备下述两点
1.可以不用通过路由器来隔离不同广播域
2.可以突破地理位置的限制,在逻辑上划分出不同的广播域
这就是VLAN,IEEE 802.1Q 标准定义了 VLAN Header 的格式。它在普通以太网帧结构的 SA (src addr)之后加入了 4bytes 的 VLAN Tag/Header 数据,其中包括 12-bits 的 VLAN ID。VLAN ID 最大值为4096,但是有效值范围是 1 - 4094。

12. DNS域名解析协议

DNS是一个用来把域名映射成IP地址的系统。
image.png