网络知识详解
提问:网络到底是什么?
我们在电缆中传输的都是电信号(高电压或者是低电压),所以高电压就是1,低电压就是0,所以规定一定的时间传输固定的高低电压来当做是接收的数据
我们所谓的10Mbps:每秒中可以传输10M个bit
所以别人说你的是4M的带宽,指的就是4Mbps,要除以8才是实际的速率
那就是4Mbps=4/8MBs=0.5MBs=0.51024KBs=(41024)Kbps=512KB/s的下载速率
我们平时说的下载速度就是以KB/s为单位的
1KB/S=8Kbps 512KB/S=8K*512bps=4096Kbps=4Mbps
信号传输遵循的一种规定,叫做协议
协议:protocol
网络类型
1.总线型网络(上图就是一个总线型网络):
遵循着CSMA/CD:Carrier sense multi access collision detection载波侦听多路访问,冲突检测。在某一个时刻,一条线缆只能传输一个信号,因此就必须有一个线路仲裁的约定(说白了就是哪一个时刻谁可以使用谁不能使用的意思)
要想实现线路仲裁,就要知道以下的知识点
CSMA/CD:Carrier Sense Mutil Access Collision Detection载波侦听多路访问,冲突检测
检测有数据,就退出不发了,边发送边侦听,这样的一种机制就是以太网
以太网最核心的标识就是上面这个东西
MAC:Media Access Control
我们给每一个主机一个识别码,一种标示,在发送信号的时候,这个信号的首部就放着接收方的mac地址,接收的时候根据mac去匹配这个数据是不是发给你的,不是你的就不接收
无论是首部还是数据,其实在电信号上都是01代码来的。
2.环形网络(IBM的专用技术):
令牌在不断的环形网络中游走,谁要发送信息的时候,只要抓住这个令牌就可以了
令牌环网:只有持有令牌的人才能发信息
所以他也是解决一种网络仲裁的
3.星型网络
(从逻辑上来讲,他还是一个总线型的网络,只是更方便接线的,当A发送B的时候,C也是可以收到信号的):
提问:电压是什么?
在电源的两极间产生了电位差,也就是我们常说的电压;一加压,电子是从负极流向正极的。
中继器:我们电压如果在传输的过程中,线路太长,他会因为电阻,线缆质量,等因素,电信号是会不断的衰减的,所以引入一个新的概念,就是中继器,她能将缩减的信号,重新放大,再进行传送。
比如说我们的网线,实际传输距离不可以超过100m,是因为长度越长,衰减越大,就需要一个交换机再将信号放大,在传送,这个实例中的交换机就是类似于中继器的概念
提问:网桥的作用?
网桥就是来连接两岸的,所以当A和C需要通信的时候,而B的链路是收不到的(如果A不知道C在哪里,那B会收到A发过来的广播包,而之后网桥形成了自己的MAC地址表的时候下一次A和C的通信B就不会收到了),而A要和B通信的时候,也是通过网桥来进行传输的
那么网桥是怎么知道A要发给B的呢?
其实它本身就有一个表,通过广播之后就会形成MAC地址表在网桥内。
就是根据MAC地址表来发送的
那么表中的数据从何而来?
提问:假如网桥中没有任何信息,那是怎么通信的呢?
其实通信的开始就是通过广播机制的方式得知的,就是通过不断的学习,然后交换机不断的强大自己的MAC地址表,然后就得知所有的内部网络了,外部的当然被路由器给隔绝了
那我们假如每一台主机都接到网桥的一个接口,如下图所示
全双工和半双工
A可以发信号给B,但是同一时刻B不能发送数据。就是:半双工(如对讲机设备;)
A可以发信号给B,同一时刻B也能发送数据给A就是:全双工(如电话设备;)
网线,其实有用的只有4根,绞线的原因是防止干扰的
而我们的这个网桥设备,能够用自己的MAC地址表识别整个网络,就是叫做交换机
交换机:隔绝了冲突域,不能隔离广播域
路由器:可以隔绝广播域,
冲突域:
广播域:
我们原来用的是物理地址去通信,通过MAC地址去广播,这样就能广播所有的主机,万一整个网络很大,那所有的主机都要被广播,而且链路中也充满了广播,所以大大的加大了链路的负载
为了不用广播到所有网络中,要的就是一个逻辑地址去通信,指定要通信的对方,而这个逻辑地址就是我们所谓的IP地址
广义上的IP包不再看MAC地址是什么,只看我们的ip地址是什么,这样来传输
比如说1.1->2.1(这是两个网段)的时候就是跨网络的传播,到了对端,也不会和MAC地址一样,到了对端还广播找设备,而有一个设备就有专门的表,他记载的是不同接口的ip地址,而这种跨网段的数据连接,主机都是交给自己的网关去处理,而到了其他网段的时候,就根据这个表去将数据包发给指定的网段的主机,而这个设备就是路由器,这个表就是路由器的路由表
当然第一次的时候也是需要广播的,广播之后,就记载了所有网段之间的对应的网段的
网络通信过程(路由器和交换机)
网络早先就是一个总线型网络,虽然用了网桥集合了所有端口,也改变不了实质是总线型的概念
当我们的AB通信,整个链路都没办法通信的,因为传输的是电信号,整个线路都充斥着这个电信号
所以CD也是不能通信的(总线型的缺点)
那我们就需要的是隔离这种冲突,我们用一种设备将他们隔离开来(就是网桥)
用了网桥,如果AC需要通信的话,如果A是刚接入网络中来的,第一次想发送数据给C的话,A首先发送的报文是这样的(广播包)(MA|MBrodcost)(也就是记录了本地的MAC地址和发送一个广播地址的包),因为A压根不知道C的MAC地址是什么,所以首个报文的目的就是广播的,而网桥也是无条件去转发这一种广播包的,也同时让所有设备知道有A的存在,也让网桥在MAC地址表记载A的信息
本地通信的话是一定要依赖于广播的,不然怎么内部通信?
网桥在以前就只接多个网络的,而现在是有多端口的网桥,命名就叫做交换机
其中广播和交换机没有什么关系,就看主机发送的是不是广播包,而交换机是无条件发送广播的
所以如果整个网络都无条件接收广播的话,那整个网络链路会有多么的混乱和增大链路负载
这就引入了一个新的设备:
路由器(隔绝广播域)
路由器区分不同区域的话,如果用MAC地址,他根本不知道怎么区分MAC地址属于哪一个区域,因为MAC地址在记载到网卡上,网卡上的辨识是不同的厂商提供的,所以辨别不同的区域用的是逻辑地址,也就是ip地址和子网掩码合起来去区分。
所以有了路由器发的报文就是这样子的
只要发现目标主机和当前主机不是同一个网段,就把包交给路由器(用来转换非本地通讯的,本地通讯依赖于广播包)
逻辑地址是附加上主机上的,其实最终通讯的话,还是要根据MAC地址去通讯的
我们ping的是ip地址,但是在进程中是靠MAC地址去通信的
我们不通过路由器的内部网络,无论如何,本地通讯都是先通过广播先进行通信的,然后将对应的MAC地址和主机的ip地址记载到了交换机的MAC地址表,而我们本地通讯依靠的广播,就是依靠ARP协议进行ip地址和MAC地址之间查询的
ARP协议
第一次的找目标主机发送的是广播,而是通过就是逻辑地址找MAC地址的,就是ARP协议,而反过来的通过MAC地址找逻辑地址的就是RARP协议
我们区分1.0和2.0是不同网络的是子网掩码(判断哪一部分是指网络的,哪一部分是取的主机的)
像192.168.1.0和192.168.2.0的话,如果子网掩码是24的话,就是不同网络,
而如果子网掩码是22的话,那这两个就是同一个子网
因为22就是255.255.252.0,则网络就是192.168.0.0-192.168.3.255都是同一个网络
不在同一网络的话,就是通过网关去转发
如果网关不跟自己内部的地址在同一个网络是不行的,一定要在同一个网络,这个是常识
理解下图的逻辑(如主机是192.168.1.1/24,网关肯定是属于192.168.1.0/24的网络)
从1.1到2.1的通讯,MAC地址先用的是路由器的1.1的网关的MAC
到了路由器的时候,再重新封装成目标2.1的MAC地址,目标ip是不会变化的
所以说数据包在传输的过程中,MAC地址都是一直变化的,而变化的范围就是本网段的源MAC和目的MAC之间的转换,目的MAC就是下一跳的设备的MAC
之后到了2.1就去掉MAC了,然后查看是到自己的网络IP,就继续解包,最后就可以得到数据了
所以为什么我们发报文的是时候,要有ip首部地址和MAC首部地址了
路由器的路由表
IP和路由器端口号
交换机的MAC地址表
IP和MAC地址
深度去理解互联网中多个路由器的概念:要指定网络到路由表去
1是使用指定静态路由(做这个的话要做双向的指定,不然去的了目的网络,却回不来的)
2是采取协议来实行(如ospf,rip,eigrp这些路由协议这些去学习)
这是属于思科的网络知识
假如一个信息由一个口告诉另外一个口,那这个口不能告诉我告诉你的网络,不然的话会形成环路的,(水平分割);所以动态学习的机制,还是需要更多的去配置,这里的话就是一个水平分割的知识点
在通信过程中
MAC地址是用来标记本地网络的地址通信(所以一个数据包,MAC地址是不断的变化的)
而ip地址呢?是从源主机到目标主机都不会改变的
我们来通过端口来识别
同一台主机上的不同进程
端口都是0-65536之间的
端口和进程之间是没有必然的关系
比如http服务器是80端口,而在客户机上的是随意的端口去辨识http的进程
而这个http的80端口,是专门分配给web服务的
某一些著名的服务,必须用固定的端口的,ssh是22,dns是53,你更换成其他是可以使用,但是必须要加上你指定的端口去访问,而默认的不用指定,内部就指定了,比如打开网址,默认就是80端口
实际上客户机来讲自己打开的端口是随机的。
我们著名的服务,端口必须一致打开,这叫做监听(监听就是必须要打开一个端口)
一个端口只能属于一个进程
所以有人访问,就随时可以访问
客户端是主动打开,服务器是被动打开
要理解什么叫监听
端口和ip其实还是有关联关系的
ip:port绑定起来就叫做一个套接字:Socket
协议的分层(这是因为数据报文必须交给对应的层去解析的):
有专门管理MAC的
装专门管理IP的
有专门管理端口的
也就是osi七层模型
应用层
表示层
会话层
传输层
网络层
数据链路层
物理层
学网络最核心的就是传输层(解析端口的)和网络层(解析IP地址的)
实际每一个都是非常难的
就比如说网络层的ip,一个IP Header(ip首部)如下图所示
4位的版本号
4位的标识首部长度
服务类型(TOS)
Total Length整体长度
Identification(Fragment ID):标记符(片标识符)
Fragment Offser:片偏移量,一共有13位
DF:标识不分片(不准分片)
MF:标识有更多的分片
Time-to-Live:存活时间
Protocol:由于标记在data当中的上一个协议标识(常见的是TCP,UDP)
Header Checksum:首部校验和
Source IP:逻辑源ip地址
上图是学习网络的基础知识
当然TCP首部会比这个IP首部还要麻烦
OSI7层参考模型,而现在都是以TCP/IP这种协议来学习,而且反而这种TCP/IP、是现在现实中正在使用的模型
IP层首部有20个字节
4位的版本号 4位的标识首部长度 8位服务类型(TOS) Total Length整体长度
Identification(Fragment ID):标记符(片标识符)
Fragment Offser:片偏移量,一共有13位
DF:标识不分片(不准分片)
MF:标识有更多的分片
Time-to-Live:存活时间
Protocol:由于标记在data当中的上一个协议标识(常见的是TCP,UDP)
Header Checksum:首部校验和
Source IP:逻辑源ip地址
IPv4点分十进制学习(网络基础)
一个ip地址是分为网络地址和主机地址
A类的是首位是0,其他7位可变化
127个A类,127用于回环,有用的就是1-126,2^7-1个A类
(实际设计用127的A类做回环,是非常浪费的)
B类是以10开头,后面7位随意变化
64个B类网络,2^14个B类网络
C类是以110开头,后面随意变化
32个C类地址,2^21个C类网络
D类:
224-239
E类:
所有的IP地址都由
国际组织NIC(Network Information Center)负责统一分配.
目前全世界共有三个这样的网络信息中心。
InterNIC:负责美国及其他地区;
ENIC:负责欧洲地区;
APNIC:负责亚太地区。
我国申请IP地址要通过APNIC,APNIC的总部设在日本东京大学。申请时要考虑申请哪一类的IP地址,然后向国内的代理机构提出
私有地址(这些地址也是不能被路由的,作为源地址是可以的,作为目标地址在互联网中是不会传送的):
路由(选择路径的,有很多考虑的因素:如cost值,跳数之类的)
目标是一个主机的就是主机路由(如7.1主机)
目标是一个网络的就是网络路由(如到达7.0的网络)
最佳匹配我们默认是选择主机路由优先的(默认选择会觉得主机路由是为我专用铺设的,而网络范围大的次选)
一个路由器如果没有匹配的条目,一般都会设置一个默认路由0.0.0.0/0
划分子网:简单来说就是把主机位拿过来给网络位来用
TCP详解
TCP也是沙漏的模型
无论底层的传输介质什么不同,到了第三层的ip就都是一样的,如下
底下是以太网的,或者是点对点的拨号网络:ppp,ATM的
这些底层机制都不一样,但是到了IP都服服帖帖都变成可识别的了
TCP: Transmission Control Protocol
有连接可靠的协议
试探性的找到对方,然后在进行连接,然后才进行报文发送的
经典的三次握手
双向通道,双向断开的
(断开需要四次握手(比如模拟断开:tom说分手(主动断开),对方同意,等一下对方也要说一次分手,tom同意)
tom提出分手的就是主动关闭,提出之后,time-wait1等待对方说同意,time-wait2等待对方说一次分手)
下面我们来看一下TCP的首部
TCP首部 4个字节
源端口和目标端口
序列号
确认号
首部长度(4bit) 3位Reserved URG(紧急位)ACK(确认位)PSH(不在缓冲区停留,而是赶紧的发送出去)RST(连接重置(不需要像三次握手这样做))SYN(追求的)FIN(说分手的) Window Size窗口大小(接收方可接受的缓冲区的报文的个数,所以数据报文传送多少要取决于接收方的窗口大小)
TCP的校验和
紧急指针
Options
我们现在看一下三次握手和四次断开,如下图
TCP的有限状态机,而且TCP就是在这些状态里不断的转换的,他一定属于上面的某一次握手或者断开,所以在抓包的时候就可以看到了.
资源子网:资源的共享或者是子网的获取.
网络功能是内核的层次
路由器(其实就是扁平化的一台电脑而已,只是系统和硬件专门对网络转发等做了优化而已,一般底层也都是Linux来的)
网卡的绑定机制:bonding
我们作为系统管理员,完全可以将两块网卡同时工作(负载也好,主备也好)
UDP:User Datagram Protocol
无连接不可靠的协议
直接把报文丢到网络去,对方能不能收到不理会
QQ用的就是UDP(他会返回对方未收到之类的信息是在应用层的部署,他在传输层就是UDP的协议)
要知道哪一些是TCP的,哪一些是UDP的
点对点的拨号网络:ppp
网络配置与管理:
在2013年这个网络基础有详细的笔记
冲突域:老的总线型网络是各个终端处在一个冲突域的
网桥:
多接口:交换机
学习:
广播域:
8位2进制数据:0-255
0-255.0-255
Hub有MAC地址(各个Host处在同一个广播域)
路由器有路由表
在2013年的教程中有详细的学习
1.1 --> 2.2
1111 1111. 0000 0000
1.0
2.0
IP: 4段
1.1.1.1
32位:
大:0 000 0000 - 0 111 1111:0-127
中:10 00 0000 - 10 11 1111:128-191
小:110 0 0000 - 110 1 1111:192-223
d1110 0000 - 1110 1111:224-239
e1111 0000 - 1111 1111:240-255
全0:网络地址
全1:广播地址
A:1-126
126个网络
每个网络中的主机:2^24-2
B:128-191
2^14个网络
每个网络中的主机:2^16-2
C:192-223
2^21个网络
每个网络中的主机:2^8-2
172.16.0.0
255.255.0.0
子网划分
172.16.0.0/255.255.255.0
172.16.255.0/255.255.255.0
172.16.255.255
子网汇聚;超网
192.168.0.0/255.255.255.0 --> 192.168.255.0/255.255.255.0
192.168.0.0/255.255.0.0
ip地址划分
A类:
1-126个网络,127用于回环,2^7-1(127网段用作回环地址其实是非常浪费的,当时肯定划分的时候一定是非常多地址,其实我们ping回环地址不只是127.0.0.1,其实是127网段的可用地址都是通的,比如127.0.0.5)
容纳的主机数:2^24-2
默认掩码:255.0.0.0
主机位全0:网络地址
主机位全1:广播地址
B类:
2^14个网络
容纳的主机数:2^16-2
默认掩码:255.255.0.0
C类:
2^21个网络
容纳的主机数:2^8-2
默认掩码:255.255.255.0
私有地址
A类:
1个:10.0.0.0/255.0.0.0
B类:
16个:172.16.0.0/255.255.0.0-172.31.0.0/255.255.0.0
C类:
256个:192.168.0.0/255.255.255.0-192.168.255.0/255.255.255.0
路由表生产方法:
1、静态设置
2、动态生成(rip,ospf,eigrp之类的)
cost: 成本
rip特性:经过的跳数越少就越小
时长
路由协议:RIP2, OSPF, EIGRP(生产路由条路,对路由进行匹配传输的)
可路由协议:IP协议
其实是进程与进程之间的交互(有一个概念就是叫做进程监听器)
ip是真正实现主机到主机之间的通信的,目的地址是不会变的
物理介质:物理层,物理层协议
链路层:数据帧,链接层协议(PPP等等);只能完成同层的设备之间进行通信
网络层:数据包,IP协议
传输层:传输层 (TCP,UDP)
TCP:0-65535
UDP:0-65535
应用层:标记资源
端口:用于标记进程
0-65535:
Socket: IP:port(套接字就是IP和端口的组合)进程之间通信是通过套接字的
172.16.100.7:80
172.16.100.8:80
协议栈:内核
TCP/IP协议簇
主机名:FQDN完全合格;完全限定的域名
Full Qulified Domain Name
www.magedu.com
名称解析:DNS
理解其中一些概念?
Fragment: IP分片(分开传输,到达时候再合并)
我们本地传输这么快,和远程传输这么慢
源于帧,源于MTU:Maximum Translate Unit(最大传输单元)
我们发送的本地是1500的传输单元,而路由器有一些还有一些不支持这么大的MTU,就必须再分片去传输
Fragment: IP分片(分开传输,到达时候再合并)
所以分片的会非常的小去传输,而且中间很多路由器,会不断拆和不断去封装
合并的话要怎么去合呢?
TCP Header
FIN结束关系,SYN建立关系
ACK确认号,URG紧急位
下图是三次握手和四次断开
TCP被称为:有限状态机
FSM: Finite State Machine
Bonding的模式一共有7种:
#define BOND_MODE_ROUNDROBIN 0 (balance-rr模式)网卡的负载均衡模式
#define BOND_MODE_ACTIVEBACKUP 1 (active-backup模式)网卡的容错模式
#define BOND_MODE_XOR 2 (balance-xor模式)需要交换机支持
#define BOND_MODE_BROADCAST 3 (broadcast模式)
#define BOND_MODE_8023AD 4 (IEEE 802.3ad动态链路聚合模式)需要交换机支持
#define BOND_MODE_TLB 5 自适应传输负载均衡模式
#define BOND_MODE_ALB 6 网卡虚拟化方式
bonding模块的所有工作模式可以分为两类:多主型工作模式和主备型工作模式,balance-rr 和broadcast属于多主型工作模式而active-backup属于主备型工作模式。(balance-xor、自适应传输负载均衡模式(balance-tlb)和自适应负载均衡模式(balance-alb)也属于多主型工作模式,IEEE 802.3ad动态链路聚合模式(802.3ad)属于主备型工作模式.
回顾:网络基础知识
ARP:协议
本地通信必须要通过MAC地址来通信
在一个局域网内,A需要知道B的MAC地址,A就需要发送一个广播,然后通过ARP协议知道B端的MAC地址
涉及到了一个ARP欺骗.
比如在一个局域网内,A要和B通信,A要获取B的mac地址,但是是C主机作为攻击主机,他截取收到,给A发送了一个回去的包,A以为C就是B,而这时候A需要回包给B的时候,就回包给了C,然后C再回包给B,整个流程就形成了一个ARP欺骗,每一次数据A到B的时候,C都会收到一份
Hostname: 主机名
ifconfig route
ifconfig ethX IP/Mask {up}
ifconfig ethX IP netmask Mask
ip addr add dev ethX IP/Mask [label LABEL]
以上是立即生效,但不会永久有效,而下面的是不会立即生效重启有效
/etc/sysconfig/network-scripts/ifcfg-ethX
配置主机名的方法:FQDN(Fully Qualified Domain Name 正式域名)
hostname HOSTNAME
/etc/sysconfig/network
NETWORKING={yes|no}
HOSTNAME=
GATEWAY=这里也可以配置网关的,(作用范围越小,有效性越高)
[[email protected] ~]# cat /etc/sysconfig/network
NETWORKING=yes 网络开关
HOSTNAME=www 主机名
默认网关只有一个,但是路由可以有很多条
路由:
route add {-host|-net} gw GATEWAY 添加主机路由或者是网络路由
route add default gw GATEWAY 添加默认路由
ip route add DEST [via NEXT_HOP|dev DEVICE] [src SOURCE]
常用的网络状态的选项是-tan
netstat -tan (t表示tcp,a表示的是ESTABLISHED和LISTEN都显示出来,一般我们显示LISTEN就好,因为显示建立连接的可能会很多,n表示以数字显示)
netstat -untlp 常用这个(没有显示ESTABLISHED)
ss -untlp
proc是伪文件系统,所以很多proc的都是不能直接vim编辑器去编辑的
所以是通过sys接口去修改内核参数的
我们的主机名是保存在内核文件中的/proc/sys/kernel/hostname
原文地址:http://blog.51cto.com/425319153/2092966