1、简述osi七层模型和TCP/IP五层模型
计算机网络分层的目的:支持异构网络系统的互联互通



OSI 7层参考模型是法定标准(国际标准化组织ISO提出)
应用层
所有能和用户交互产生浏览的程序,(有HTTP、FTP、SMTP协议)
表示层
用于处理两个通信系统中交换信息的表示方式(语法和语义),(有JPEG、ASCII协议),如:
- 数据格式的变换 如转换为0101进行
- 数据加密解密 哈希、MD5加密
- 数据压缩和恢复
会话层
向表示层实体/用户进程提供建立连接并在链接上有序的传输数据,也是建立同步(SYN),(有ADSP、ASP协议)
- 建立、管理、终止会话
- 使用校验点可使会话在通信失效时从校验点/同步点继续恢复通信,实现数据同步。
传输层
负责主机中两个进程的通信,即端到端的通信,传输单位是报文段或用户数据报,(有TCP、UDP协议)
- 可靠传输、不可靠传输
- 差错控制
- 流量控制
- 复用分用
- 复用:多个应用层进程可同时使用下面运输层的服务
- 分用:传输层把收到的信息分别交付给上面应用层中相应的进程。
网络层
主要任务是把分组从源端传到目的端,为分组交换网上的不同主机提供通信服务。网络层传输单位是数据报,(协议有IP、IPX、ICMP、IGMP、ARP、RARP等)
- 路由选择
- 流量控制
- 差错控制
- 拥塞控制
- 若所有节点都来不及接收分组,而要丢弃大量分组的化,网络就处于拥塞状态,因此要采取一定措施缓解这种拥塞
数据链路层
主要任务是把网络层传下来的数据报组装成帧,数据链路层/链路层的传输单位是帧,(有SDLC、HDLC、PPP、STP协议)
- 成帧(定义帧的开始和结束)
- 差错控制 帧错+位错
- 流量控制
- 访问(接入)控制 控制对信道的访问
物理层
主要任务是在物理媒介上实现比特流的透明传输,物理层传输单位是比特,(有Rj45、802.3协议)
- 定义接口特性
- 定义传输模式 单工、半双工、双工
- 定义传输速率
- 比特同步
- 比特编码
TCP/IP 4层参考模型是事实标准
- 应用层:应用程序通过这一层访问网络,常见 FTP、HTTP、DNS 和 TELNET 协议;
- 传输层:TCP 协议和 UDP 协议;
- 网络层:IP 协议,ARP、RARP 协议,ICMP 协议等;
- 网络接口层:是 TCP/IP 协议的基层,负责数据帧的发送和接收。
2、总结描述TCP三次握手四次挥手
TCP三次握手
- 最开始的时候客户端和服务器都是处于CLOSED状态。主动打开连接的为客户端,被动打开连接的是服务器。
- 服务器进程先创建传输控制块TCB,时刻准备接受客户进程的连接请求,此时服务器就进入了LISTEN(监听)状态;
- 客户进程也是先创建传输控制块TCB,然后向服务器发出连接请求报文,这是报文首部中的同部位SYN=1,同时选择一个初始序列号 seq=x ,此时,TCP客户端进程进入了 SYN-SENT(同步已发送状态)状态。TCP规定,SYN报文段(SYN=1的报文段)不能携带数据,但需要消耗掉一个序号。
- TCP服务器收到请求报文后,如果同意连接,则发出确认报文。确认报文中应该 ACK=1,SYN=1,确认号是ack=x+1,同时也要为自己初始化一个序列号 seq=y,此时,TCP服务器进程进入了SYN-RCVD(同步收到)状态。这个报文也不能携带数据,但是同样要消耗一个序号。
- TCP客户进程收到确认后,还要向服务器给出确认。确认报文的ACK=1,ack=y+1,自己的序列号seq=x+1,此时,TCP连接建立,客户端进入ESTABLISHED(已建立连接)状态。TCP规定,ACK报文段可以携带数据,但是如果不携带数据则不消耗序号。
- 当服务器收到客户端的确认后也进入ESTABLISHED状态,此后双方就可以开始通信了。

为什么TCP客户端最后还要发送一次确认呢?
主要防止已经失效的连接请求报文突然又传送到了服务器,从而产生错误。
如果使用的是两次握手建立连接,假设有这样一种场景,客户端发送了第一个请求连接并且没有丢失,只是因为在网络结点中滞留的时间太长了,由于TCP的客户端迟迟没有收到确认报文,以为服务器没有收到,此时重新向服务器发送这条报文,此后客户端和服务器经过两次握手完成连接,传输数据,然后关闭连接。此时此前滞留的那一次请求连接,网络通畅了到达了服务器,这个报文本该是失效的,但是,两次握手的机制将会让客户端和服务器再次建立连接,这将导致不必要的错误和资源的浪费。
如果采用的是三次握手,就算是那一次失效的报文传送过来了,服务端接受到了那条失效报文并且回复了确认报文,但是客户端不会再次发出确认。由于服务器收不到确认,就知道客户端并没有请求连接。
TCP连接的释放(四次挥手)
数据传输完毕后,双方都可释放连接。最开始的时候,客户端和服务器都是处于ESTABLISHED状态,然后客户端主动关闭,服务器被动关闭。
- 客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态。 TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。
- 服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。
- 客户端收到服务器的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)。
- 服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。
- 客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2∗MSL(最长报文段寿命)的时间后,当客户端撤销相 应的TCB后,才进入CLOSED状态。
- 服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接。可以看到,服务器结束TCP连接的时间要比客户端早一些。

3、描述TCP和UDP区别
-
连接方面区别
TCP面向连接(如打电话要先拨号建立连接)。
UDP是无连接的,即发送数据之前不需要建立连接。
-
安全方面的区别
TCP提供可靠的服务,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达。
UDP尽最大努力交付,即不保证可靠交付。
-
传输效率的区别
TCP传输效率相对较低。
UDP传输效率高,适用于对高速传输和实时性有较高的通信或广播通信。
-
连接对象数量的区别
TCP连接只能是点到点、一对一的。
UDP支持一对一,一对多,多对一和多对多的交互通信。
4、总结ip分类以及每个分类可以分配的IP数量
IP地址由四段组成,每个字段是一个字节,8位,最大值是255
IP地址由两部分组成,即网络地址和主机地址。网络地址表示其属于互联网的哪一个网络,主机地址表示其属于该网络中的哪一台主机。二者是主从关系。
即主机号全0是网络地址,主机地址全为1是广播地址。

A类:(1.0.0.0-126.0.0.0)(默认子网掩码:255.0.0.0或 0xFF000000)第一个字节为网络号,后三个字节为主机号。该类IP地址的第一个字节最前面为“0”,所以地址的网络号取值于1~126之间。一般用于大型网络。
B类:(128.0.0.0-191.255.0.0)(默认子网掩码:255.255.0.0或0xFFFF0000)前两个字节为网络号,后两个字节为主机号。该类IP地址的第一个字节最前面为“10”,所以地址的网络号取值于128~191之间。一般用于中等规模网络。
C类:(192.0.0.0-223.255.255.0)(子网掩码:255.255.255.0或 0xFFFFFF00)前三个字节为网络号,最后一个字节为主机号。该类IP地址的第一个字节最前面为“110”,所以地址的网络号取值于192~223之间。一般用于小型网络。
D类:是多播地址。该类IP地址的最前面为“1110”,所以地址的网络号取值于224~239之间。一般用于多路广播用户[1] 。
E类:是保留地址。该类IP地址的最前面为“1111”,所以地址的网络号取值于240~255之间。
5、总结IP配置方法
通过命令配置,立即送往内核中的TCP/IP协议栈,并生效,但重启后失效
# 使用 ifconfig 命令 给 ens33 网卡配置 IP 和 掩码
~]# ifconfig ens33 192.168.240.163/24
~]# ifconfig ens33 192.168.240.163 netmask 255.255.255.0
# 使用 ip 命令 给 ens33 网卡配置 IP 和 掩码
~]# ip addr add 192.168.240.164/24 dev ens33
# 使用 ip 命令 删除 ens33 网卡配置的 IP 和 掩码
~]# ip addr del 192.168.240.164/24 dev ens33
通过配置文件修改,不能立即生效,需要重启网络服务
~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static #激活此接口时使用什么协议来配置接口属性,常用的有dhcp、bootp、static、none
DEFROUTE=yes
IPADDR=192.168.240.164 # IP地址
NETMASK=255.255.255.0 # 子网掩码
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=ed98eb56-09f4-4ab4-a57a-d3bfab418b25
DEVICE=ens33
ONBOOT=yes #在系统引导过程中,是否激活此接口
DNS1=8.8.8.8 #第一DNS服务器指向;
DNS2=114.114.114 #备用DNS服务器指向;
# 修改完成配置以后重启网络服务,以CentOS 7为例
~]# systemctl restart network.service