1、简述osi七层模型和TCP/IP五层模型  

OSI七层模型(Open System Interconnection)  

1).物理层

二进制传输  

为启动,维护以及关闭物理链路定义了电气规范,机械规范,过程规范和功能规范

2).数据链路层

访问介质  

定义如何格式化数据以便进行传输以及如何控制对网络的访问

支持错误检测

3).网络层

数据传输  

    路由数据包

    选择传递数据的最佳路径

    支持逻辑寻址和路径选择

4).传输层

传输问题  

    确保数据传输的可靠性

    建立,维护和终止虚拟电路

    通过错误检测和恢复

    信息流控制来保障可靠性

5).会话层

主机间通信  

建立,管理和终止在应用程序之间的会话

6).表示层

数据表示  

    确保接受系统可以读出该数据

    格式化数据

    构建数据

    协商用于应用层的数据传输语法

    提供加密

7).应用层

网络进程访问应用层  

    为应用程序进程(例如:电子邮件,文件传输和终端仿真)提供网络服务

    提供用户身份验证

TCP/IP协议栈  

1)物理层

2)数据链路层

    物理层和数据链路层统称为网络访问层  

3)Internet层

4)传输层

5)应用层

2、总结描述TCP三次握手四次挥手  

image  

源端口,目标端口:计算机上进程之间通信是通过端口,端口某个时刻只能被一个进程占用,所以通过指定源端口和目标端口,可知道哪两个进程需要通信

序列号:表示本报文段所发送数据的第一个字节的编号,在TCP连接中所传送的字节流的每一个字节都会按顺序编号。

确认号: 表示接收方期望收到发送方下一个报文段的第一个字节数据的编号

数据偏移: 表示TCP报文段的首部长度,共4位,由于TCP首部包含一个长度可变的选项部分,需要指定这个TCP报文段到底有多长,它指出TCP报文段的数据起始处距离TCP报文段的起始处有多远

URG: 表示本报文段中发送的数据是否包含紧急数据,后面的紧急指针字段只有当URG=1时,才有效

ACK: 表示是否前面确认号字段是否有效,只有当ACK=1时,前面的确认号字段才有效,TCP规定,连接建立后,ACK必须为1,带ACK标志的TCP报文段称为确认报文段

PSH: 提示接收端应用程序应该立即从TCP接受缓冲区中读走数据,为接受后续数据腾出空间,如果为1,则表示对方应当立即把数据提交给上层应用,而不是缓存起来,如果应用程序不将接受到的数据读走,就会一直停留在TCP接收缓冲区中

RST: 如果收到一个RST=1的报文,说明与主机的连接出现了严重错误(如主机崩溃),必须释放连接,然后在重新建立连接,或者说明上次发送给主机的数据有问题,主机拒绝响应,带RST标志的TCP报文段称为复位报文段

SYN: 在建立连接时使用,用来同步序号

        当SYN=1,ACK=0,表示这是一个请求建立连接的报文段,

        当SYN=1,ACK=1时表示对方同意建立连接,

        SYN=1,说明这是一个请求建立连接或同意建立连接的报文,只有前面两次握手中SYN才置为1,带SYN标志的TCP报文段称为同步报文段

FIN: 表示通知对方本端要关闭连接,标记数据是否发送完毕,如果FIN=1,即告诉对方”数据已经发送完毕,可以释放连接了”;带FIN标志的TCP报文段称为:结束报文段

窗口大小: 表示现在允许对方发送的数据量,即,从本报文段的确认号开始允许对方发送的数据量,达到此值,需要ACK确认后才能继续传送后面数据。

校验和: 提供额外的可靠性

紧急指针: 标记紧急数据在数据字段中的位置

选项部分: 其最大长度可根据TCP首部长度进行推算,TCP首部长度用4位表示,选项部分最长为40字节

 

TCP三次握手,是指建立一个TCP连接时,需要客户端和服务器端总共发送3个包

三次握手的目的是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号并交换TCP窗口大小信息,在socket编程中,客户端执行connect()时,将触发三次握手

第一次握手:客户端发送一个TCP的SYN标志位置1的包,指明客户打算连接的服务器的端口,以及初始序号X,保存在包头的序列号(Sequence Number)字段里

第二次握手: 服务器发回确认包(ACK)应答,即SYN标志位和ACK标志位均为1,同时确认序号设置为客户的序号加1,即X+1

第三次握手: 客户端再次发送确认包(ACK) SYN标志位为0,ACK标志位为1,并且把服务器发来ACK的序号字段+1,放在确定字段中发给对方,并且在数据段放写ISN的+1

image 

TCP四次挥手  

 第一次挥手:客户端发送了一个FIN报文,报文中会指定一个序列号,此时客户端状态为FIN_WAIT1状态

第二次挥手:服务端收到FIN之后,会发送ACK报文,并且包客户端的序列号+1,作为ACK报文的序列号值,表明已经收到了客户端的报文了,此时服务端处于CLOSE_WAIT状态

第三次挥手:如果服务端也想断开连接了,和客户端的第一次挥手一样,发给FIN报文,且指定一个序列号,此时服务端处于LAST_ACK状态

第四次挥手:客户端收到FIN之后,一样发送一份ACK报文作为应答,并且把服务器的序列号+1,作为自己的ACK报文的序列号值,此时客户端处于TIME_WAIT状态,注意此时TCP连接还没有释放,必须经过2*MSL(最长报文寿命)的时间后,才进入CLOSE状态,服务器只要收到客户端发出的确认,立即进入CLOSED状态

image 

3、描述TCP和UDP区别  

1).TCP协议是有连接的,意思是开始传输实际数据之前TCP的客户端和服务器端必须通过三次握手建立连接,会话结束之后也要结束连接;UDP是无连接的  

2).TCP协议保证数据按序发送,按序到达,提供超时重传来保证可靠性,但是UDP不保证按序到达,甚至不保证到达,只是努力交付,即便是按序发送的序列,也不保证按序送到  

3).TCP协议所需资源多,TCP首部需20个字节(不算可选项),UDP首部字段只需8个字节  

4).TCP有流量控制和拥塞控制,UDP没有,网络拥堵不会影响发送端的发送率  

5).TCP是一对一的连接,而UDP则可以支持一对一,多对多,一对多的通信

6).TCP面对的是字节流的服务,UDP面向的是报文的服务  

4、总结ip分类以及每个分类可以分配的IP数量  

IP地址是一个32位二进制数,可将此32位二进制数划分为四组8位二进制八位数

IP地址由两部分组成:

1)网络ID

    标识网络

    每个网段分配一个网络ID

2)主机ID

    标识单个主机

    由组织分配给各设备

IP地址中的前5位用于标识IP地址的类别

A类地址的第一位为0

B类地址的第一位为10

C类地址的第一位为110

D类地址的第一位为1110

E类地址的第一位为11110

IP全为0或全为1的都保留不用

  IP地址分类:

A类

前8位(第一个字节)为网络ID,后24位(后三个字节)为主机ID

00000000-01111111:1-127

范围:1.0.0.1-126.255.255.254

网络数:126

每个网络中的主机数:2^24-2=16777214

子网掩码:255.0.0.0

B类

前16位为网络ID,后16位为主机ID

10000000-10111111:128-191

范围:128.0.0.1-191.255.255.254

网络数:2^14

每个网络中的主机数:2^16-2=65534

C类

前24位为网络ID,后8位为主机ID

11000000-11011111:192-223

范围:192.0.0.1-223.255.255.254

网络数:2^21=2097152

每个网络中的主机数:2^8-2

D类

用于:多播、组播用户

11100000-11101111:224-239

不分网络地址和主机地址,前四位固定为1110

范围:224.0.0.1-239.255.255.254

E类

保留未使用

240-255

 

私有地址有:

A.10.0.0.0-10.255.255.255

B.172.16.0.0-172.31.255.255

C.192.168.0.0-192.168.255.255

私有地址:就是在互联网上不使用,而被用在局域网络中的地址

保留地址:是本机地址,等效于localhost或本机IP,一般用于测试使用(127.X.X.X;169.254.X.X)

 

netmask:子网掩码

功能:确定网络ID的位数

32位二进制,对应IP网络ID为1,对应IP中主机ID为0

5、总结IP配置方法

1)ifconfig命令

此方法,通常用来临时的测试用,计算机启动后,ip地址的配置将自动失效

[ root@CentOS7 ]#ifconfig ens33 192.168.0.1 netmask 255.255.255.0

2)配置网卡

关闭networkmanager服务(同时配置Network和NetworkManager两种网络管理工具会引起冲突)

[ root@CentOS7]#systemctl stop NetworkManager
[ root@CentOS7 ]#systemctl status NetworkManager

编辑网卡配置文件

vim /etc/sysconfig/network-scripts/ifcfg-ens33

TYPE=Ethernet                网络类型

BOOTPROTO=static       获取IP的方式,有dhcp、static、none

DEVICE=enp0s3             设备名称

ONBOOT=yes                 开机是否启动此网卡,重启network时是否一起激活

如果是获取IP方式为static,需要增加以下字段
IPADDR=192.168.75.100
NETMASK=255.255.255.0
GATEWAY=192.168.75.1

重启网络

systemctl restart network

3)NetworkManager网络管理工具

CentOS和RHEL系统默认使用NetworkManager来提供网络服务,这是一种动态管理网络配置的守护进程,能够让网络设备保持连接状态

使用nmtui命令来配置网络

image

image

image

使用nmcli命令来管理NetworkManager服务(nmcli是一款基于命令行的网络配置工具)

一个接口具有一个硬件名称(唯一的身份标识)和一个或多个连接名称(类比外号)

  • 硬件名称:DEVICE、ifname

  • 连接名称:NAME、cname、con-name、connection-name

具有多个连接名称的原因:多个连接名称生成多个配置文件,允许用户在多个配置文件中快速切换(网络会话功能,在不同的使用环境激活相应的网络会话,可实现网络配置信息的自动切换)

[ root@CentOS7 ]#nmcli connection show
NAME    UUID                                  TYPE      DEVICE
eht0    c0de6c44-881b-4107-9daf-31176bffd5a9  ethernet  ens33 
virbr0  e67a9e33-d559-43f8-8440-f67aa5ecf0b4  bridge    virbr0

没有连接到物理接口的连接名称不生效

[root@CentOS7 /]#ifconfig ens33
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.47.73  netmask 255.255.255.0  broadcast 192.168.47.255
        inet6 fe80::55bd:55a6:276e:e371  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:4f:1e:a9  txqueuelen 1000  (Ethernet)
        RX packets 423743  bytes 632738940 (603.4 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 62395  bytes 3874561 (3.6 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
创建会话
[23:06:06 root@CentOS7 /]#nmcli connection add con-name test ifname eno16777736 type ethernet autoconnect yes save yes
Connection 'test' (1686d137-27c8-4cb8-870f-d28e48ac470d) successfully added.
[23:11:07 root@CentOS7 /]#nmcli connection show
NAME    UUID                                  TYPE      DEVICE 
eht0    c0de6c44-881b-4107-9daf-31176bffd5a9  ethernet  ens33  
virbr0  e67a9e33-d559-43f8-8440-f67aa5ecf0b4  bridge    virbr0 
test    1686d137-27c8-4cb8-870f-d28e48ac470d  ethernet  --    
配置IP
[23:11:27 root@CentOS7 /]#nmcli connection modify test ipv4.addresses 192.168.75.100/24 ipv4.gateway 192.168.75.1 ipv4.dns 192.168.75.1 ipv4.method manual
启用会话
[23:12:56 root@CentOS7 /]#nmcli connection up test