1、简述osi七层模型和TCP/IP五层模型
早期计算机之间的通信都是各个厂商制定的标准,例如:IBM公司,生产的PC电脑产品,之间可以互相通信,就必须要安装IBM公司自己的硬件,首先要保证机器物理上能联通。然后还需要IBM自己的操作系统,以及通信软件。IBM的计算机是不能够与其他厂商的计算机互相通信的。所以就有了OSI七层模型,它是一个规范,各个厂商的计算机之间进行通信以此标准进行生产就能完成相互之间的通信。OSI七层模型可以用下图表示:
它从低到高分别是:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。
物理层:定义了其物理设备连接的规范,涉及:物理链路的电气规范,机械规范,过程规范和功能规范;
典型设备有:网线,集线器等这些物理连接设备。
数据链路层:定义了如何格式化数据以便进行传输以及如何控制对网络的访问,定义了物理设备的唯一标识,即MAC,支持错误检测。
典型设备有:网桥,交换机
网络层:跨网通信,路由选择,并且支持逻辑寻址,有了IP地址。
典型设备有:路由器
传输层:1.确保数据传输的可靠性 2.建立,维护和终止虚拟电路 3.通过错误检测和恢复 4.流控 5.应用程序标识,即端口号。
会话层:1.管理(建立,终止)在应用程序之间的绘话;
表示层:数据的表示,加密;
应用层:人与机器的交互式程序,定义了网络应用程序应该遵循的协议,规范,提供身份验证等机制。
OSI七层模型中的应用层,表示层,会话层其实就应该是应用程序应该完成的功能。而事实上TCP/IP协议是我们互联网通信上真正使用的的协议:其对应关系如图所示:
TCP/IP协议簇,是由众多的协议组成的。其对应表格如下:
TCP/IP协议簇 | 对应网络协议 |
---|---|
应用层 | HTTP,HTTPS,TFTP,FTP,NFS,SSH,SMTP,TELNET,DNS等等 |
传输层 | TCP,UDP |
网络层 | IP,ICMP,ARP,RARP |
数据链路层 | Ethernet,PPP |
物理层 | IEEE 802.1A |
2、总结描述TCP三次握手四次挥手
TCP协议是传输层的协议,当二台主机互相通信时,根据TCP/IP协议簇的层次模型,应用层会加上应用层首部,传输层会加上传输层首部,网络层会加上网络层首部,数据链路层最终加上自己的数据链路层首部,最终构成以太网帧,最后将数据通过物理层传送至目的端。为了描述TCP三次握手四次挥手的过程,首先我们要大致了解一下TCP协议的首部格式,其大致如图所示:
TCP协议首部前20个字节是固定的一些字段,内容是:
2字节长度的源端口号,2字节的长度的目的端口号,
4字节的序列号,即seq,4字节的确认号,即ack;
4位的首部长度,保留位;
6个状态位或称做信号位也可以,其值只有0和1:
URG为1表示紧急数据位,将优先发送,不按照seq的编号顺序传输。
ACK为1时表示确认号字段有效,0表示其上确认号无效;
PSH为1时表示接受方立即从Resv Buffer中向上推送给应用进程;
RST为1时重建TCP连接。
SYN为1时,还需要参考ACK状态位,SYN=1,ACK=0表示尚未建立连接,这就是一个TCP的连接请求;
对方回复时其状态位SYN=1且ACK=1。建立连接后,SYN状态就设置为0;
FIN为1时就是释放TCP连接。
窗口大小:表示允许发送方发送多少数据。双方协商时,会动态调整其值。
校验和:TCP首部和TCP数据校验和,2字节大小。
紧急指针:当URG为1时,指明紧急数据的字节数。
选项:即上方20字节的固定大小之后的,长度可变,可选字段最大长度40字节。
TCP的通信时需要建立连接:建立连接大致过程是:
客户端请求报文给服务器端;
服务器端回复报文,给客户端;
-
客户确认报文。
这是一个有来有回的连接过程,因为要保证双方建立的通信时可靠的。其过程如图所示:
一开始通信双方处于(CLOSED)未连接状态,客户端主动发送SYN=1(表示连接请求),seq=x(序列号),并使自己处于SYN-SENT(同步发送)状态;而服务器处于(监听)LISTEN状态,等待客户端主动请求。
当服务器收到连接请求时,就发送SYN=1,ACK=1,seq=y,ack=x+1的报文给客户端,并是自己处于SYN-RCVD(同步接受)状态;
客户端收到ack=x+1就表示服务器收到其连接请求。最后客户端发送ACK=1,seq=x+1,ack=y+1,服务器端得到ack=y+1时就表示大家都准备好了,就建立了连接,其均处于ESTAB-LISHED(已连接)状态了。就可以开始数据传送了。
当数据传送完毕时,TCP为了保证数据的可靠,又要经历四次挥手的过程:
- 客户端主动发起FIN=1,seq=u的报文,给服务器端,其自己的状态就变成了FIN-WAIT-1状态;
- 如果服务器响应并发送ACK=1,seq=v,ack=u+1,给客户端,客户端就主动进入FIN-WAIT-2;
- 等待服务器端把剩余的数据传完。服务器端把数据传完后,就发送FIN=1,ACK=1,seq=w,ack=u+1告诉客户端,客户端则进入TIME-WAIT状态,并发送ACK=1,seq=u+1,ack=w+1给服务器端;
- 服务器收到就进入CLOSED状态,最终TIME-WAIT时间等待结束,其客户端也CLOSED了;
这是正常分手,如果客户端和服务端都主动发起FIN请求,那么就都进入CLOSING状态。
TCP的有限状态机
CP的有限状态机共11种,标识了TCP通信过程中,客户端和服务器端分别处于的状态:
LISTEN:表示服务器端的某个socket处于监听状态,可以接受连接。
SYN_SENT:在服务端监听后,客户端socket执行CONNECT连接时,客户端发送SYN报文,此时客户端就进入。SYN_SENT状态,等待服务端的确认。
SYN_RCVD:表示服务端接收到了SYN报文,发送SYN+ACK,当收到客户端的ACK报文时,它就会进入到。ESTABLISHED状态。
ESTABLISHED:表示连接已建立了。
FIN_WAIT_1:已经建立连接后,其中一方请求终止连接,等待对方的FIN报文。
FIN_WAIT_2:这个状态下的socket,表示半连接,即有一方要求关闭连接,但另外还告诉对方:暂时还有一些数据需要传给你,请稍后再关闭连接(即只收到ACK,并未收到FIN )。
TIME_WAIT:表示收到了对方的FIN报文,并发送出了ACK报文,等待2MSL后即可回到CLOSED可用状态了。由FIN_WAIT_1进入该状态:同时收到带FIN标志和ACK标志的报文;由FIN_WAIT_2进入该状态:收到FIN报文,此时发送ACK报文。
CLOSING:双方同时在关闭一个socket,就出现了双方同时发送FIN报文的情况,就会出现CLOSING状态,表示双方都正在关闭socket。
CLOSE_WAIT:表示在等待关闭(即这个状态下是在考虑你是否还有数据发送给对方)。
LAST_ACK:它是被动关闭一方在发送FIN报文后,最后等待对方的ACK报文。
CLOSED:初始状态和结束状态,当收到对方的ACK报文后,也即进入到CLOSED状态。
总结
TCP的三次握手过程就是:客户端向服务器端发送请求报文,服务器就要向客户端发送响应报文,并且等待客户端发送响应报文,这样双方才能保证互通。这就相当于打电话,A给B打电话,A说你好,B也说你好,你是谁?A说我是谁谁谁,然后就可以开始电话交流了。
TCP的四次挥手过程其实就是描述这样的一个过程:客户端发送终止请求,服务端收到请求,等待服务器端将所有数据传送完毕,就向客户端发送我已经传送完毕,可以断开连接了!这时候客户端还要再响应一次,最终双方断开连接。这就相当于分手的过程,A主动和B提出分手,B收到消息,发送一个回应消息。并且把分手前的财产发给A,并发送一个你有没有收到的消息,A收到了并发送一个回应消息,双方就分手了。
3、描述TCP和UDP区别
TCP协议和UDP协议是TCP/IP协议的位于第四层。主要功能是标识上层应用层的端口号,以及报文的传输方式是面向连接的还是面向无连接。
tcp协议在传输数据是,实现需要建立虚链路,即TCP的三次握手过程,然后才能传输数据;传输数据完毕还要关闭连接。
UDP协议不需要事先建立虚链路,也不需要关闭连接,直接传送数据报文;其效率很高,数据丢失无法重传。
4、总结ip分类以及每个分类可以分配的IP数量
IP地址分为IPV4和IPV6,IPV4是以32位的二进制表示,二进制不方便人类记忆,采用点分十进制的方式记录IP地址的形式,每8位2进制一组,转换为10进制数,以.分割。
IP地址的分类
公共地址
互联网通信中其IPV4的可用地址主要分为三大类:
A类:1-126.x.x.x
B类:128-191.x.x.x
C类:192-223.x.x.x
私有地址
只能用于局域网,公网上没有其私网的路由:
A类私有地址:10.0.0.0~10.255.255.255 共一个网段;
B类私有地址:172.16.0.0~172.16.255.255 共32个网段;
C类私有地址:192.168.0.0~192.168.255.255 共256个网段;
5、总结IP配置方法
centos系列发行版在/etc/sysconfig/network-scripts/目录下,所有以ifcfg开头的文件为网卡配置文件,这些文件在启动网络服务的时候都会被加载读取。通过网卡配置文件可以配置设定IP地址,子网掩码,默认网关,DNS且永久生效。
#网卡配置文件里的一些内容
[root@centos7 network-scripts]# vim /etc/sysconfig/network-scripts/if g-eth0
TYPE=Ethernet
#网络类型现在基本上都是以太网
BOOTPROTO=none
#使用的地址配置协议名称,可以是以下值none|static|dhcp|bootp
IPADDR=192.168.44.15
#IP地址
PREFIX=24
#子网掩码CIDI表示法
GATEWAY=192.168.44.2
#网关
DEFROUTE=yes
#表示如果DHCP获取IP时将由DHCP服务设置默认路由
NAME=eth0
#网卡名称可以随表取
UUID=1c56f193-69f3-3d56-857b-20a7eb00f373
#设备唯一识别码
ONBOOT=yes
#开机时激活网卡
DEVICE=eth0
#设备名称不能随便取要与/sys/class/net/中的网卡名称相同。
ifconfig命令
作用:配置网卡信息
语法格式:ifconfig interface IP/MASK
[root@centos7 network-scripts]# ip a
#查看所有网卡配置信息
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:33:b1:78 brd ff:ff:ff:ff:ff:ff
inet 192.168.37.7/24 brd 192.168.37.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80::d75e:a642:1dce:2714/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:33:b1:82 brd ff:ff:ff:ff:ff:ff
inet 192.168.2.233/24 brd 192.168.2.255 scope global noprefixroute eth1
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe33:b182/64 scope link
valid_lft forever preferred_lft forever
[root@centos7 network-scripts]# ifconfig eth0 192.168.44.11/24
#配置eth0网卡临时生效
[root@centos7 network-scripts]# ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.44.11 netmask 255.255.255.0 broadcast 192.168.44.255
inet6 fe80::d75e:a642:1dce:2714 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:33:b1:78 txqueuelen 1000 (Ethernet)
RX packets 136 bytes 13584 (13.2 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 13 bytes 1022 (1022.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@centos7 network-scripts]# ifconfig eth0:0 10.0.0.1/24
#网卡别名,临时生效
[root@centos7 network-scripts]# ifconfig eth0;ifconfig eth0:0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.44.11 netmask 255.255.255.0 broadcast 192.168.44.255
inet6 fe80::d75e:a642:1dce:2714 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:33:b1:78 txqueuelen 1000 (Ethernet)
RX packets 139 bytes 13860 (13.5 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 13 bytes 1022 (1022.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
eth0:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.0.1 netmask 255.255.255.0 broadcast 10.0.0.255
ether 00:0c:29:33:b1:78 txqueuelen 1000 (Ethernet)
ip命令
作用:网络管理
(1) 配置IP的语法格式
IP addr add|del IP/NETMASK dev IFACE
[root@centos7 network-scripts]# ip addr show eth0
#只显示eth0网卡的信息
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:33:b1:78 brd ff:ff:ff:ff:ff:ff
inet 192.168.44.11/24 brd 192.168.44.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet 10.0.0.1/24 brd 10.0.0.255 scope global eth0:0
valid_lft forever preferred_lft forever
inet6 fe80::d75e:a642:1dce:2714/64 scope link noprefixroute
valid_lft forever preferred_lft forever
[root@centos7 network-scripts]# ip addr show
#显示所有网卡的信息
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:33:b1:78 brd ff:ff:ff:ff:ff:ff
inet 192.168.44.11/24 brd 192.168.44.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet 10.0.0.1/24 brd 10.0.0.255 scope global eth0:0
valid_lft forever preferred_lft forever
inet6 fe80::d75e:a642:1dce:2714/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:33:b1:82 brd ff:ff:ff:ff:ff:ff
inet 192.168.2.233/24 brd 192.168.2.255 scope global noprefixroute eth1
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe33:b182/64 scope link
valid_lft forever preferred_lft forever
[root@centos7 network-scripts]# ip addr del 10.0.0.1/24 dev eth0:0
#删除指定设备的ip信息
[root@centos7 network-scripts]# ip addr show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:33:b1:78 brd ff:ff:ff:ff:ff:ff
inet 192.168.44.11/24 brd 192.168.44.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80::d75e:a642:1dce:2714/64 scope link noprefixroute
valid_lft forever preferred_lft forever
[root@centos7 network-scripts]# ip addr add 1.1.1.1/16 dev eth0
[root@centos7 network-scripts]# ip addr show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:33:b1:78 brd ff:ff:ff:ff:ff:ff
inet 192.168.44.11/24 brd 192.168.44.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet 1.1.1.1/16 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::d75e:a642:1dce:2714/64 scope link noprefixroute
valid_lft forever preferred_lft forever