Linux学习笔记(三)_网络

来源:互联网 发布:淘宝定金尾款是同价格 编辑:程序博客网 时间:2024/05/22 07:45

先简单说下网卡工作原理:
内核如何从网卡接收数据,传统的过程:

1.数据到达网卡;
2.网卡产生一个中断给内核;
3.内核使用I/O指令,从网卡I/O区域中去读取数据

这种方式在遇到大量的网络流量时,会产生大量的中断,资源浪费。就又出现另一种方式:轮询:内核屏蔽掉中断,然后定时周期的访问网卡看有没有数据。这种在流量很少时也会造成浪费。
结合上述优点出现了NAPI “中断”+”轮询”。既网卡收到数据包后,马上关闭产生的中断,直到接受到一定数目或者接受完后才继续发送中断。

上面的方式都有CPU参与,cpu 从网卡读取的数据会放在内存里,又出现了DMA这一种技术,让网卡和内存直接交换数据。

1.首先,内核在主内存中为收发数据建立一个环形的缓冲队列(通常叫DMA环形缓冲区)。
2.内核将这个缓冲区通过DMA映射,把这个队列交给网卡;
3.网卡收到数据,就直接放进这个环形缓冲区了——也就是直接放进主内存了;然后,向系统产生一个中断;
4.内核收到这个中断,就取消DMA映射,这样,内核就直接从主内存中读取数据


发现网卡

[root@localhost ~]# dmesg | grep -in eth
1798:[ 13.365619] e1000 0000:02:01.0 eth0: (PCI:66MHz:32-bit) 00:0c:29:72:ee:d8
1799:[ 13.365625] e1000 0000:02:01.0 eth0: Intel(R) PRO/1000 Network Connection
1806:[ 13.720485] e1000 0000:02:02.0 eth1: (PCI:66MHz:32-bit) 00:0c:29:72:ee:e2
1807:[ 13.720489] e1000 0000:02:02.0 eth1: Intel(R) PRO/1000 Network Connection
1808:[ 13.738101] systemd-udevd[513]: renamed network interface eth0 to eno16777736
1809:[ 13.744009] systemd-udevd[514]: renamed network interface eth1 to eno33554960
1901:[ 26.285420] Bluetooth: BNEP (Ethernet Emulation) ver 1.3

从上面可以看到网卡型号,还可以看到网卡装置代号被systemd-udev这个东西给改变了。所以我们“ifconfig”看到的就是这个。
一般来说,(red hat相关)系统会在/etc/sysconfig/network-scripts/下创建相同名字的网卡配置文件。ubuntu 则直接是/etc/network/interfaces
网卡配置文件:
radhat:
TYPE=Ethernet
*PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp #启动DHCP;不启动用none就好
DEFROUTE=yes
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=2c5c0983-627f-4ca0-8e50-158ef55e2519
DEVICE=ens33 #填写网卡装置代号
ONBOOT=yes #是否启动
子接口设定
vim /etc/sysconfig/network-script/ifcfg-eth0:0
DEVICE=eth0:0
IPADDR=10.1.1.1
PREFIX=24
BOOTPROTO=none
ONPARENT=yes
ONBOOT=yes*
关于配置文件和网卡的关系是:多个文件可以对应同一个网卡,但同时只能启用一个配置。
ifconfig ens33 down/up 只能够开启关闭网卡,如果网卡配置名和配置文件命一致则按照配置文件开启,否则就只是开启。
ifconfig eth0 192.168.100.100 \
netmask 255.255.255.128 mtu 8000 #临时改变参数,重启后不生效

ifup/ifdown 后面接配置文件中的NAME参数,按照配置文件启动或关闭,(也可以直接写装置代号)。

ubuntu

auto lo
iface lo inet loopback

auto ens33
iface ens33 inet static #若是动态就是 dhcp就行,下面的参数忽略
address 192.168.1.12
netmask 255.255.255.0
network 192.168.1.0
gateway 192.168.1.1
子接口:
auto ens3:0
iface ens3:0 inet static
address 10.1.1.1
netmask 255.255.255.0


DNS都在下面的文件里配置
sudo vi /etc/resolv.conf
nameserver 202.96.128.68
nameserver 61.144.56.101
nameserver 192.168.8.220

有两个很好用的network-manage工具:”nmcli “;”nmtui”
我比较喜欢nmcli ,他有自动补全功能,用的就像是在配置路由器交换机一样。

路由指令:route

route add [-net|-host] [网域或主机] netmask [mask] [gw|dev]
添加路由
[root@www ~]# route del [-net|-host] [网域或主机] netmask [mask] [gw|dev]
删除路由

接下来看看ip这个强大的指令
首先在 ip link 网络层以下

ip link show
ip link show ens33
ip link set ens33 name first mtu 8000 #这个改变了网卡装置名
ip link set ens33 up/down #开启,关闭跟ifconfig 一样

然后是 ip address/route 网络层

ip addrss show #显示所有接口参数
ip address add 192.168.4.4/24 broadcast 192.168.4.255 dev ens33 label ens33:one
这个添加子接口很方便
ip address help #查看更多选项 都很简单。


增加路由,主要是本机直接可沟通的网域
ip route add 192.168.5.0/24 dev eth0
:增加可以通往外部的路由,需透过 router
ip route add 192.168.10.0/24 via 192.168.5.100 dev eth0

传输层往上就是用到 netstat

netstat -rn #与route -n 一样
netstat -tunpl #查看已启动的网络服务 -p 列出PID,-l 服务正在监听

文件/etc/sevices记录了服务与端口的关系。

原创粉丝点击