1.开放系统互联OSI
1984年,lso发布了著名的OSI标准,是设计和描述计算机网络通信的标准模型。它定义了网络互联的7层框架,物理层,数据链路层,网络层,传输层,会话层,表示层,应用层,即OSI开放系统互连参考模型
第七层 应用层
应用层提供为应用软件而设的接口,已设置与另一应用软件之间的通信。列如:HTTP,HTTPS,FTP,TELNET,SSH,SMTP,MYSQL
第六层 表示层
主条目:表示层把数据转换为能与接收者的系统格式兼容并合适传输的格式
第五层 会话层
会话层负责在数据传输中设置和维护电脑网络中两台电脑之间的通信连接。
第四层 传输层
传输层把传输表头加至数据以形成数据包。传输表头包含了所使用的协议等发送信息。列如:传输控制协议(TCP)等。
第三层 网络层
网络层决定数据的路径选择和转寄,将网络表头(NH)加至数据包,已形成报文。网络表头包含了网络数据。列如:互联网协议(IP)等
第二层 数据链路层
数据链路层负责网络寻址,错误侦测和改错。当表头和表尾被加至数据包时,会形成信息框。数据链表头是包含了物理地址和错误侦测及改错的方法。数据链表尾(DLT)是一串指示数据包末端的字符串,列如:以太网,无线局域网等。分为两个子层:逻辑链路控制子层和介质访问控制ziceng
第一层 物理层
物理层在局部局域网上传送数据帧,它负责管理电脑通信设备和网络媒体之间的互通。包括了针脚,电压,主机接口卡等。
2.网络的通信过程
三种通讯模式
unicast:单播,目标设备是一个
broadcast:广播,目标设备是多个
multicast:多播,组播,目标设备是多个
冲突域和广播域
冲突域:两个网络设备同时发送数据,如果发生了冲突,则两个设备处于同一个冲突域,反之,则各自处于不同的冲突域
广播域:一个网络设备发送广播,另一个设备收到了,则两个设备处于同一个广播域,反之,则各自处于不同的广播域
三种通讯机制
单工通信:只有一个方向的通信,比如:收音机
半双工通信:通信双方都可以发送和接受消息,但不能同时发送,也不能同时接受,比如:对讲机
全双工通信:通信双方可以同时发送和同时接受,比如:手机
[20:07:09 root@centos7 ~]$ethtool ens33
可以查看通讯机制
3.组网设备
网线的线序:橙白,橙,绿白,蓝,蓝白,绿,棕白,棕
中继器:信号再生放大器,输出信号比原信号的强度将大大提高,中继器不解释,不改变收到的数字信息,而只是将其整形放大后再转发出去
集线器:是中继器的一种形式,提供多端口连接,在一个冲突域里
网桥:也叫桥接器,是连接两个局域网的一种存储装发设备,根据收到数据帧中的源MAC地址建立该地址同网桥端口的映射,并将其写入MAC地址表中,根据MAC地址表对数据帧进行转发,过滤通信量。但是隔离不了广播域,通信量大的局域网,不宜使用,容易产生网络阻塞。
交换机:根据 收到数据帧中的源MAC 地址建立该地址同交换机端口的映射,并将其写入MAC地址表,根据已建立的MAC地址表进行比较,已决定由哪个端口转发,这一过程称为泛洪,广播帧和组播帧向所有的端口转发。
路由器功能:工作在网络层,分隔广播域和冲突域,选择路由表中到达目标最好的路径,维护和检查路由信息,连接广域网。
4.VLAN原理
虚拟局域网vlan是由一些局域网网段构成的与物理位置无关的逻辑组,这些网段都具有某些共同的需求。每一个vlan的帧都有一个明确的标识符,指明发送这个帧的工作站是属于哪一个vlan。
优点:更有效地共享网络资源。如果用交换机构成较大的局域网,大量的广播报文就会使网络性能下降。VLAN能将广播报文限制在本VLAN范围内,从而提升了网络的效能,简化网络管理,无需重新布线和改变ip地址。提高网络数据安全性,一个VLAN中的结点接收不到另一个VLAN中其他结点的帧
5.TCP/IP协议栈
TCP/IP分层
共定义了四层,和osI参考模型的分层有对应关系
TCP/IP OSI
相同点
两者都是以协议栈的概念为基础
协议栈中的协议彼此相互独立
下层对上层提供服务
不同点
OSI是现有模型;TCP/IP是现有协议,后有模型
OSI是国际标准,适用于各种协议栈;
TCP头结构
源端口,目标端口:计算机上的进程要和其他进程通信是要通过计算机端口的,而一个计算机端口摸个时刻只能被一个进程占用,所以通过源端口和目标端口,就可以知道是哪两个进程需要通信。源端口,目标端口是用16为表示的,可推算计算机的端口个数为2^16个,即65536
0-1023:系统端口或特权端口(仅管理员可用),众所周知,永久的分配给固定的系统应用使用22/tcp(ssh),80/tcp(http)
1024-49151:用户端或注册端口,但要求并不严格,分配给程序注册为某应用使用,1433/tcp(sqlserver)1521/tcp(oracle)
49152-65535:动态或私有端口,客户端随机使用端口,范围定义:/proc/sys/net/ipv4/ip_local_port_range
[11:00:12 root@centos7 ~]$cat /proc/sys/net/ipv4/ip_local_port_range 32768 60999 [11:02:36 root@centos7 ~]$echo 20000 62000 > /proc/sys/net/ipv4/ip_local_port_range [11:02:44 root@centos7 ~]$cat /proc/sys/net/ipv4/ip_local_port_range 20000 62000
调整客户端的动态端口范围
[11:02:52 root@centos7 ~]$yum -y install man-pages [11:10:55 root@centos7 ~]$yum -y install nc 服务器端 [11:15:57 root@centos7 ~]$ss -ntlu Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port udp UNCONN 0 0 127.0.0.1:323 *:* udp UNCONN 0 0 ::1:323 :::* tcp LISTEN 0 128 *:22 *:* tcp LISTEN 0 100 127.0.0.1:25 *:* tcp LISTEN 0 128 :::22 :::* tcp LISTEN 0 100 ::1:25 :::* [11:16:04 root@centos7 ~]$nc -l 22 Ncat: bind to :::22: Address already in use. QUITTING.
ssh占用了22端口使用不了 [11:16:48 root@centos7 ~]$nc -l 9527 hello nihao
创建端口9527 客户端 [11:12:48 root@aiyoubucuo ~]$nc 10.0.0.7 9527 hello nihao
连接端口 [11:18:32 root@aiyoubucuo ~]$nc 10.0.0.7 9527
Ncat: Connection refused.
再开一个连接失败
[11:25:51 root@centos7 ~]$lsof -i :22 如果有内容证明有程序占用此端口 [11:26:57 root@centos7 ~]$ss -nlt |grep 22 如果有内容证明有程序占用此端口
序列号:表示本报文段所发送数据的第一个字节的编号。在TCP连接中所传送的字节流的每一个字节都会按照顺序编号。由于序列号由32位表示,所以每个2^32个字节,就会出现序列号回绕,再次从0开始
确认号:表示接收方期望收到发送下一个报文段的第一个字节数据的编号。也就是告诉发送方:我希望你下次发送的数据的第一个字节数据的编号为此确认号
URG:为 1 表示紧急指针有效,为 0 则忽略紧急指针值
ACK:为 1 表示确认号有效,为 0 表示报文中不包含确认信息,忽略确认号字段
PSH:为 1 表示是带有 PUSH 标志的数据,指示接收方应该尽快将这个报文段交给应用层而不用等待缓冲区装满
RST:用于复位由于主机崩溃或其他原因而出现错误的连接。它还可以用于拒绝非法的报文段和拒绝连接请求。一般情况下,如果收到一个 RST 为 1 的报文,那么一定发生了某些问题
SYN:同步序号,为 1 表示连接请求,用于建立连接和使顺序号同步( synchronize )
FIN:用于释放连接,为 1 表示发送方已经没有数据发送了,即关闭本方数据流
TCP滑动窗口
TCP三次握手
建立连接,为什么不两次握手,因为两次握手只是服务器应答,客户端并没有确认。
TCP四次挥手
第一次挥手:A数据传输完毕需要断开连接,A的应用进程向其TCP发出连接释放报文段(FIN = 1,序号seq = u),并停止再发送数据,主动关闭TCP连接,进入FIN-WAIT-1状态,等待B的确认。
第二次挥手:B收到FIN报文段后即发出确认报文段(ACK=1,确认号ack=u+1,序号seq=v),B进入CLOSE-WAIT关闭等待状态,此时的TCP处于半关闭状态,A到B的连接释放。而A收到B的确认后,进入FIN-WAIT-2状态,等待B发出的连FIN放报文段。
第三次挥手:当B数据传输完毕后,B发出连接释放报文段(FIN = 1,ACK = 1,序号seq = w,确认号ack=u+1),B进入LAST-ACK(最后确认)状态,等待A 的最后确认。
第四次挥手:A收到B的连接释放报文段后,对此发出确认报文段(ACK = 1,seq=u+1,ack=w+1),A进入TIME-WAIT(时间等待)状态。此时TCP未释放掉,需要经过时间等待计时器设置的时间2MSL后,A才进入CLOSE状态。
因为TCP是一个全双工协议,必须单独拆除每一条信道。4次挥手的目的是终止数据传输,并回收资源,此时两个端点两个方向的序列号已经没有了任何关系,必须等待两方向都没有数据传输时才能拆除虚链路,不像初始化时那么简单,发现SYN标志就初始化一个序列号并确认SYN的序列号。因此必须单独分别在一个方向上终止该方向的数据传输。
如果是三次挥手,会怎么样?三次的话,被动关闭端在收到FIN消息之后,需要同时回复ACK和Server端的FIN消息。如果Server端在该连接上面并没有Pending的消息要处理,那么是可以的,如果Server端还需要等待一段时间才可以关闭另外一个方向的连接,那么这样的三次挥手就不能满足条件。
6. UDP
UDP特性
工作在传输层
提供不可靠的网络访问
非面向连接协议
有限的错误检查
传输性能高
无数据恢复特性
7.IP首部结构
版本
版本占4bit,目前IPv4,IPv6已经在互联网开始推广,局域网使用的是IPv4,IPv4表示IP地址共32位,IPv6表示IP地址共128位
首部长度
首部长度占4bit,表示ip报文头部多长,首部长度可表示的最大数值是15个单位,一个单位为4字节,因此IP的首部长度的最大值是60字节
总长度
总长度占16bit,表示首部加数据部分总长度,总长度指首部和数据之和的长度,单位为字节,因此数据报的最大长度为65535 字节.总长度必须不超过最大传送单元 MTU
标识
标识占16bit,标识是一个计数器,通常,每发送一个报文,该值会加1, 也用于数据包分片,在同一个包的若干分片中,该值是相同的用于数据包分片,在同一个包的若干分片中,该值是相同的 。因为tcp的段中数据报文比较大,而数据链路层中frame的数据最大为1500,因此必然涉及到数据的切分,将一个大包拆分成能放到帧能放下的包。此时切分的包的标识相同。
标志
标志(flag)占3位,标志数据包是否分片,标志位一共三位:最高位不用、DF、MF、
DF: Don’t Fragment(分片) 中间的一位,只有当 DF=0 时才允许分片
MF: More Fragment 最后一位,MF=1表示后面还有分片,MF=0 表示最后一个分片
生存时间
生存时间占8位,即为TTL,Linux 数据报文生命期为128 Windows数据报文生命期64,数据报文在网络中路由次数跳一跳
生存时间记为TTL (Time To Live) 数据报在网络中可通过的路由器数的最大值,TTL 字段是由发送端初始设置一个 8 bit字段.推荐的初始值由分配数字RFC 指定,当前值为 64.发送 ICMP 回显应答时经常把 TTL 设为最大值 255
协议
协议占8位,当前层为上层提供服务,需要标识出上层协议类型,指出此数据报携带的数据使用何种协议以便目的主机的IP层将数据部分上交给哪个处理过程,1表示为 ICMP 协议, 2表示为 IGMP 协议, 6表示为TCP 协议, 17表示为 UDP 协议,ICMP也在此类型中,但不属于传输层,可理解为ICMP在IP协议同层之上
首部校验和
首部检验和占16位,只检验数据报的首部不检验数据部分.这里不采用 CRC 检验
码而采用简单的计算方法
源地址占4字节
目标地址4字节
8.IP地址
它们可唯一标识IP网络中的每台设备,每台主机(计算机,网络设备,外围设备)必须具有唯一的地址
IP地址由两部分组成
网络ID:标识网络,每个网段分配一个网络ID,处于高位
主机ID:标识单个主机,由组织分配给各设备,处于低位
IPV4地址格式:点分十进制记法
IP地址分类
A类:
0 0000000 - 0 1111111.x.y.z:0-127.x.y.z
网络id位是最高8位,主机id是24位低位
网络数:126=2^7(可变的网络ID)-2
每个网络中的主机数:2^24-2=16777214
默认子网掩码:255.0.0.0
私网地址:10.0.0.0-10.255.255.255
B类:
10 000000 - 10 111111.x.y.z:128-191.x.y.z
网络ID位是最高16位,主机ID是16位低位
网络数:2^14=16384
每个网络中的主机数:2^16-2=65534
默认子网掩码:255.255.0.0
私网地址:172.16.0.0-172.31.0.0
C类:
110 00000 - 11011111.x.y.z:192-223.x.y.z
网络ID位是最高24位,主机ID是8位低位
网络数:2^21=2097152
每个网络中的主机数:2^8-2=254
默认子网掩码:255.255.255.0
私网地址:192.168.0.0-192.168.255.0
D类:组播
E类:保留未使用
私有IP地址:不直接用于互联网,通常在局域网中使用
A:10.0.0.0-10.255.255.255
B:172.16.0.0-172.31.0.0
C:192.168.0.0-192.168.255.0
公共IP地址:互联网上设备拥有的唯一地址
A:1.0.0.0到9.255.255.255
11.0.0.0到126.255.255.255
B:128.0.0.0到172.15.255.255
172.32.0.0到191.255.255.255
C:192.0.0.0到192.167.255.255
192.169.0.0到223.255.255.255
子网掩码
CIDR:无类域间路由,目前的网络已不再按A,B,C划分网段,可以任意指定网段的范围
CIDR:无类域间路由表示法:IP/网络ID位数,如:172.16.0.100/16
相关公式:
一个网络的最多的主机数=2^主机ID位数-2
网络(段)数=2^网络ID中可变的位数
网络ID=IP与netmask
202.100.200.66/20
/20=255.255.240.0
202.100.200.66=202.100.11001000.66
255.255.240.0=255.255.11110000.0
11000000=192
网络id是202.100.192.0
和1相与的保留原值
和0相与的都是0
划分子网
划分子网:将一个大的网络(主机数多)划分成多个小的网络(主机数少),主机ID位数变少,网络ID位数变多,网络ID位向主机ID位借位
范例
中国移动10.0.0.0/8给32个各省公司划分对应的子网
1)每个省公司的子网的netmask?
2^5=32 借5位网络ID
5+8=13
/13=255.11111000.0.0=255.248.0.0
2)每个省公司的子网的主机数是多少
2^(32-13)-2=524286
3)河南省得到第10个子网,网络ID?
10.00000 000.0.0这是第一个
10.00001 000.0.0第二个
10.01001 000.0.0第十个 10.72.0.0/13
4)河南省得到第10个子网的最小IP和最大的IP?
10.01001 000.0.1
10.01001 111.255.254
5)所有子网中最大,最小的子网的netid?
10.00000 000.0.0/13 10.0.0.0/13
10.11111 000.0.0/13 10.248.0.0/13
9Centos 6之前版本网卡名称
以太网eth[0,1,2,...]
临时修改网卡名称
[root@centos6~]#ip link set eth0 down [root@centos6~]#ip link set eth0 name abc [root@centos6~]#ip link set abc up
10ifconfig命令
来自于net-tools包,建议使用ip代替
[21:12:22 root@centos7 ~]$ifconfig eth0 10.0.0.68 netmask 255.255.0.0 [21:12:22 root@centos7 ~]$ifconfig eth0 0.0.0.0 清除eth0上面的IP地址 [21:12:22 root@centos7 ~]$ifconfig eth0 down [21:12:22 root@centos7 ~]$ifconfig eth0 up 启用和禁用网卡 [21:12:22 root@centos7 ~]$ifconfig eth0:1 172.16.0.8/24 对一个网卡设置多个IP地址