Linux网络基础协议和ip管理
1、简述osi七层模型和TCP/IP五层模型
osi七层模型分别是:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。
1)物理层:这一层的主要功能是二进制传输数据,界定连接器和网线的规格;为启动、维护以及关闭物理链路定义了电气规范、机械规范、过程规范和功能规范
2)数据链路层:这一层的主要功能是互连设备之间传送和识别数据帧;定义如何格式化数据以便进行传输以及如何控制对网络的访问
3)网络层:这一层的主要功能是地址管理和路由选择;路由数据包,选择传递数据的最佳路径,支持逻辑寻址和路径选择
4)传输层:这一层主要功能是管理两个节点之间的数据传输,负责可靠传输;确保数据传输的可靠性(确保数据被可靠地传送到目标地址);建立、维护和终止虚拟电路;通过错误检查和恢复;信息流控制来保障可靠性。
5)会话层:这一层的主要功能是通信管理;建立、管理和终止在应用程序之间的会话。
6)表示层:这一层的主要功能是设备固有数据格式和网络标准数据格式的转换;确保接受系统可以读出该数据、格式化数据、构建数据;协商用于应用层的数据传输语法;提供加密。
7)应用层:这一层的主要功能是针对特定应用协议为其应用程序进程提供网络服务;提供用户身份验证。
tcp/ip协议栈把网络分为5层结构,分别是物理层、数据链路层、internet层和应用层。
1)物理层:负责数据传输的硬件,这种硬件就相当于以太网或电话线路等物理层的硬件。
2)数据链路层:数据链路层也叫数据接口层,它是利用以太网中的数据链路层进行通信。我们可以理解为网卡驱动程序,驱动程序是在操作系统与硬件之间起桥梁作用的软件。我们在使用计算机外围设备时,不是把外围设备插上就可以马上可以使用,通常还需要相应的驱动程序支持才可以。
3)internet层:internet层使用ip 协议,它相当于OSI模型中的第3层网络层。IP协议基于ip地址转发、分组数据报文。
4)传输层:TCP/IP的传输层有两个具有代表行的协议(tcp/udp),该层的功能本身与OSI参考模型中的传输层类似;传输层的最主要功能就是能够让应用程序之间实现通信,在计算机内部,通常同一时间运行着众多程序,为此,我们用端口号来识别这些程序。
5)应用层:TCP/IP的分层模型中将OSI参考模型中的会话层、表示层和应用层的功能都集中到了应用层中实现。这些功能有时由一个点一的程序实现,有时也有可能会有多个程序实现,因此,细看TCP/IP的应用层的功能会发现,它不仅仅实现OSI模型中的应用层的内容,它还要实现会话层与表示层的功能。
2、总结描述TCP三次握手四次挥手
tcp三次握手如上图所示:
第一次握手:客户端主动向服务端发送连接请求报文,SYN=1(请求建立连接),seq=x(x是一个随机正整数),然后客户端从CLOSED状态转变为SYN_SENT状态;
第二次握手:服务端收到来自客户端的syn包会回复一个确认报文给客户端的SYN(ack=x+1)表示服务端已经收到了客户端的连接请求,同时服务端也发送一个SYN包(SYN=1,ACK=1,seq=y其中SYN=1,ACK=1表示服务端同意客户端的连接请求。),服务端将确认包和SYN包一并发送给客户端,然后服务端由LISTEN状态转变为SYN_RCVD状态;
第三次握手:客户端收到服务端的确认包和SYN包后,客户端会回复一个确认包(ACK=1,seq=x+1,ack=y+1),ACK=1表示上一条的确认号字段有效,此时,当服务端收到来自客户端的回复报文后,客户端和服务端的状态都会变成ESTABLISHED状态,有了上面三次握手后,后续就可以正常的收发数据了;
tcp/ip四次挥手如上图所示:
第一次挥手:客户端主动向服务端发送FIN=1,seq=u,表示断开连接请求。客户端从ESTABLISHED状态转化为FIN-WAIT-1的状态;
第二次挥手:服务端收到客户端的断开连接请求,服务端会回复客户端一个确认包(ACK=1,seq=v,ack=u+1)表示服务端已经收到了客户端的断开连接请求,此时服务端不会立马断开,它还要看它这边的数据是否传输完毕,若没有传输完毕,它将会继续传输数据,直到把数据传输完。客户端收到服务端的确认报文后,客户端状态由FIN-WAIT-1变为FIN-WAIT-2,服务端由ESTABLISHED状态变为CLOSE-WAIT状态;
第三次挥手:当服务端把数据传输完后,它会再向客户端发送一条断开请求的报文(FIN=1,ACK=1,seq=w,ack=u+1),表示服务端已经把数据传输完毕,断开吧。此时服务端的状态由CLOSE-WAIT状态变为LAST-ACK状态;
第四次挥手:当客户端收到服务端的断开请求后,客户端会回复服务端一条确认断开请求的确认包(ACK=1,seq=u+1,ack=w+1),表示同意服务端断开连接,此时客户端的状态由FIN-WAIT-2变为TIME-WAIT状态,服务端收到客户端的确认包后,服务端的状态变为CLOSED状态,客户端会等待2MSL后(MSL表示最长报文段生存时间),状态变为CLOASED;
3、描述TCP和UDP区别
1)tcp是一种面向连接的传输层协议,它可以保证两端通信主机之间的通信可达。tcp能够正确处理在传输过程中丢包、传输顺序乱掉等异常情况,此外tcp还能够有效利用带宽,缓解网络拥堵。udp有别于tcp,它是一种面向无连接的传输层协议,udp不会关注对端是否真的收到了传送过去的数据,如果需要检查对端是否接收到分组数据包,或者对端是否连接到网络,则需要在应用程序中实现。
2)tcp对系统资源的要求较多,upd较少;
3)tcp是数据流模式(sock_stream)而udp是数据报模式(sock_dgram);
4)tcp工作效率没有udp工作效率高
4、总结ip分类以及每个分类可以分配的IP数量
ip地址是由两部分组成网络ID和主机ID,网络ID标识网络,每个网段分配一个网络ID;主机ID标识单个主机,由组织分给各设备;
ipv4地址格式:点分十进制记法;ip地址是一个32位二进制数;可将此32位二进制划分为四组8位二进制八位数,使之可读;每组二进制八为数(或字节)均可转换成十进制数;地址可使用点分十进制记录
A类地址:
0 000 0000 - 0 111 1111(1-127),网络数:2^7=127,每个网络中的主机数为:2^24,其中要减去两个特殊地址 网络Id.0.0.0和网络id.255.255.255,所以每个网络中的可用地址为2^24-2,默认的子网掩码是255.0.0.0,私网地址:10.0.0.0 - 10.255.255.255,公共ip地址范围1.0.0.0 - 9.255.255.255 11.0.0.0 - 126.255.255.255,其中127.0.0.1-127.255.255.254为本机回环地址,主要用于测试。
B类地址:
10 00 0000 - 10 111 1111(128-191),网络数:2^14,每个网络中的主机数为:2^16-2(也要减去两个特殊地址),默认子网掩码:255.255.0.0,私网地址范围:172.16.0.0-172.31.255.255,公共ip地址范围128.0.0.0 - 172.15.255.255 172.32.0.0 - 191.255.255.255
C类地址:
110 0 0000 - 110 1 1111(192-223),网络数:2^21,每个网络中的主机数为:2^8-2(也要减去两个特殊地址),默认子网掩码:255.255.255.0,私网地址范围:192.168.0.0-192.168.255.255,公共ip地址范围192.0.0.0 -192.167.255.255 192.169.0.0 - 223.255.255.255
D类地址:
1110 0000 - 1110 1111(224-239),组播地址
E类地址为保留地址未使用,其范围1111000 - 11111111 (240-255)
通过上面的分类,一个网络的网络数等于2^(网络ID位数),网络中的主机数等于2^(主机ID位数)-2,其中主机ID位数等于32-默认子网掩码位数,比如A类地址的网络数2^7其中7表示网络ID为数是7,网络中的主机数等于2^(32-8)-2
特殊地址:
0.0.0.0:它不是一个真正意义上的ip地址,它表示所有不清楚的主机和目标网络
255.255.255.255:限制广播地址,对本机来说,这个地址指本网段内(同一广播域)的所有主机
127.0.0.1 - 127.255.255.254:本机回环地址,主要用于测试。在传输介质上永远不应该出现目标地址为“172.0.0.1”的数据包
224.0.0.0 - 239.255.255.255:组播地址,224.0.0.1特指所有主机,224.0.0.2特指所有路由器,224.0.0.5指OSPF路由器,组播地址多用于一些特定的程序以及多媒体程序
169.254.x.x:如果windows主机使用DHCP自动分配IP地址,而又无法从DHCP服务器获取ip地址,系统就会为主机分配这样的地址。
5、总结IP配置方法
永久配置方法:
1)修改网卡配置文件
vim /etc/sysconfig/network-scripts/ifcfg-enp2s0
说明:后面的ifcfg-enp2s0根据实际情况网卡的名称来修改
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
IPADDR="192.168.0.99"
NETMASK="255.255.255.0"
GATEWAY="192.168.0.1"
DNS1="192.168.0.1"
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=enp2s0
UUID=ea718503-8af8-41d8-97b1-b394995a22ca
DEVICE=enp2s0
ONBOOT=yes
IPV6_PRIVACY=no
说明:这里的配置文件需要写明几个重点的参数,BOOTPROTO=static表示使用静态ip,配置了BOOTPROTO=none或者static都表示使用静态IP需要再配置指定的IP地址,子网掩码,网关等;IPADDR表示指定的IP地址,NETMASK表示子网掩码,GATEWAY表示指定网关地址,DNS1表示主DNS地址,DEVICE表示网卡对应的设备别名,ONBOOT表示开机是否启用网卡。其他的参数可以不用设置。
2)保存配置文件后,重启网络服务
/etc/init.d/network restart ##centos6
service network restart ##centos6、centos7都可以使用
systemctl restart network ##centos7
当然我们也可以用图形工具和字符工具配置ip地址,centos6上字符工具有setup (当然我们需要安装对应的包setuptool)centos7上字符工具有nmtui (对应的包NetworkManager-tui)。centos7命令行工具有nmcli (对应的包NetworkManager),这个工具使用有些复杂,后续再总结。
临时配置方法:
1)ifconfig命令添加网卡别名:
[root@test ~]#ifconfig
docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 0.0.0.0
ether 02:42:bd:55:ad:ff txqueuelen 0 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 enp2s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.0.99 netmask 255.255.255.0 broadcast 192.168.0.255
inet6 fe80::230:18ff:fe51:af3c prefixlen 64 scopeid 0x20<link>
ether 00:30:18:51:af:3c txqueuelen 1000 (Ethernet)
RX packets 33830 bytes 30390958 (28.9 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 17385 bytes 1649969 (1.5 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 enp3s0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
ether 00:30:18:51:af:3d txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 8 bytes 424 (424.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 8 bytes 424 (424.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 [root@test ~]#ifconfig enp2s0:0 192.168.0.100/24
[root@test ~]#ifconfig
docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 0.0.0.0
ether 02:42:bd:55:ad:ff txqueuelen 0 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 enp2s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.0.99 netmask 255.255.255.0 broadcast 192.168.0.255
inet6 fe80::230:18ff:fe51:af3c prefixlen 64 scopeid 0x20<link>
ether 00:30:18:51:af:3c txqueuelen 1000 (Ethernet)
RX packets 33905 bytes 30397068 (28.9 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 17441 bytes 1657579 (1.5 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 enp2s0:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.0.100 netmask 255.255.255.0 broadcast 192.168.0.255
ether 00:30:18:51:af:3c txqueuelen 1000 (Ethernet) enp3s0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
ether 00:30:18:51:af:3d txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 8 bytes 424 (424.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 8 bytes 424 (424.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 [root@test ~]#
说明:以上命令是给enp2s0这个网卡绑定一个临时地址,当然我们重启网络服务这个地址将不会保存,或者我们不想要这个地址了,可以用ifconfig enp2s0 down 命令将其禁用
2)ip命令添加网卡别名
[root@test ~]#ip addr show enp2s0
2: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:30:18:51:af:3c brd ff:ff:ff:ff:ff:ff
inet 192.168.0.99/24 brd 192.168.0.255 scope global noprefixroute enp2s0
valid_lft forever preferred_lft forever
inet6 fe80::230:18ff:fe51:af3c/64 scope link
valid_lft forever preferred_lft forever
[root@test ~]#systip addr add 172.16.1.2/16 dev enp2s0
[root@test ~]#ip addr add show2s0
2: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:30:18:51:af:3c brd ff:ff:ff:ff:ff:ff
inet 192.168.0.99/24 brd 192.168.0.255 scope global noprefixroute enp2s0
valid_lft forever preferred_lft forever
inet 172.16.1.2/16 scope global enp2s0
valid_lft forever preferred_lft forever
inet6 fe80::230:18ff:fe51:af3c/64 scope link
valid_lft forever preferred_lft forever
[root@test ~]#
说明:以上命令是给enp2s0网卡绑定一个地址为172.16.1.2/24的地址
[root@test ~]#ip addr add show2s0
2: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:30:18:51:af:3c brd ff:ff:ff:ff:ff:ff
inet 192.168.0.99/24 brd 192.168.0.255 scope global noprefixroute enp2s0
valid_lft forever preferred_lft forever
inet 172.16.1.2/16 scope global enp2s0
valid_lft forever preferred_lft forever
inet6 fe80::230:18ff:fe51:af3c/64 scope link
valid_lft forever preferred_lft forever
[root@test ~]#ip addr add 172.16.1.3/16 dev enp2s0 label enp2s0:0
[root@test ~]#ip addr add show enp2s0
2: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:30:18:51:af:3c brd ff:ff:ff:ff:ff:ff
inet 192.168.0.99/24 brd 192.168.0.255 scope global noprefixroute enp2s0
valid_lft forever preferred_lft forever
inet 172.16.1.2/16 scope global enp2s0
valid_lft forever preferred_lft forever
inet 172.16.1.3/16 scope global secondary enp2s0:0
valid_lft forever preferred_lft forever
inet6 fe80::230:18ff:fe51:af3c/64 scope link
valid_lft forever preferred_lft forever
[root@test ~]#
说明:以上命令表示给enp2s0网卡绑定ip为172.16.1.3/16的地址,并设置标签名为enp2s0:0,这个标签名必须是已经有的网络设备名后面加冒号数字
[root@test ~]#ip a s enp2s0
2: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:30:18:51:af:3c brd ff:ff:ff:ff:ff:ff
inet 192.168.0.99/24 brd 192.168.0.255 scope global noprefixroute enp2s0
valid_lft forever preferred_lft forever
inet 172.16.1.2/16 scope global enp2s0
valid_lft forever preferred_lft forever
inet 172.16.1.3/16 scope global secondary enp2s0:0
valid_lft forever preferred_lft forever
inet6 fe80::230:18ff:fe51:af3c/64 scope link
valid_lft forever preferred_lft forever
[root@test ~]#ip addr flush dev enp2s0 label enp2s0:0
[root@test ~]#ip addr s enp2s0
2: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:30:18:51:af:3c brd ff:ff:ff:ff:ff:ff
inet 192.168.0.99/24 brd 192.168.0.255 scope global noprefixroute enp2s0
valid_lft forever preferred_lft forever
inet 172.16.1.2/16 scope global enp2s0
valid_lft forever preferred_lft forever
inet6 fe80::230:18ff:fe51:af3c/64 scope link
valid_lft forever preferred_lft forever
[root@test ~]#
说明:以上命令表示清除某条网卡别名上的记录,当然想要全部清空,则可以选择重启网络服务即可
root@test network-scripts]#cat ifcfg-enp2s0:0
DEVICE=enp2s0:0
IPADDR=172.16.1.2
NETMASK=255.255.0.0
GATEWAY=172.16.1.1
[root@test network-scripts]#
说明:若想要永久的保存网卡别名地址,我们可以在/etc/sysconfig/network-scripts/目录下新建一个名为ifc-网卡别名的文件如:ifc-enp2s0:0,内容如上所示
Linux网络基础协议和ip管理的更多相关文章
- 【Linux网络基础】TCP/IP 协议簇(各个常见协议介绍)
一.应用层协议 1. FTP 协议所在层次:应用层协议 名称:FTP协议 协议端口:20,21 协议说明: FTP(File Transfer Protocol,文件传输协议)是TCP/IP协议组 ...
- 【Linux网络基础】TCP/IP协议簇的详细介绍(三次握手四次断开,11种状态)
一.TCP/IP协议簇(DoD参考模型) 用于简化OSI层次,以及相关的标准. 传输控制协议(tcp/ip)簇是相关国防部DoD所创建的,主要用来确保数据的完整性以及在毁灭性战争中维持通信 是由一组不 ...
- linux网络基础设置 以及 软件安装
ifconfig #查看所有已激活的网卡信息 临时配置 #yum install net-tools -y 默认ifconfig是没有安装的,可能需要安装 ifconfig eth0 #查看单独一块网 ...
- Linux网络基础配置
这是看itercast视频的笔记 Linux网络基础配置 以太网连接 在Linux中,以太网接口被命令为:eth0, eth1等, 0,1代表网卡编号 通过lspci命令可以查看网上硬件信息(如果是u ...
- Linux网络服务01——Linux网络基础设置
Linux网络服务01--Linux网络基础设置 一.查看及测试网络 1.使用ifconfig命令查看网络接口 (1)查看活动的网络接口 ifconfig命令 [root@crushlinux ~]# ...
- Linux网络基础-总
目录 Linux网络基础 一.网卡和数据包的转发 1.收包流程 二.多网卡bonding 三.SR-IOV 四.DPDK 五.TUN/TAP 六.Linux bridge 和VLAN 七.TCP/IP ...
- 【Linux网络基础】网络拓扑、OSI层次模型、TCP/IP协议簇
一.前言 一个运维有时也要和网络打交道,所以具备最基本的网络知识,对一个运维人员来说是必要的.但,对于我们的工作来说这些并不是重点,因此,我不可能从最基础的网络知识开始讲起.本节内容更多是从一个梳理和 ...
- 网络基础知识-TCP/IP协议各层详解
TCP/IP简介 虽然大家现在对互联网很熟悉,但是计算机网络的出现比互联网要早很多. 计算机为了联网,就必须规定通信协议,早期的计算机网络,都是由各厂商自己规定一套协议,IBM.Apple和Micro ...
- Linux高性能server编程——Linux网络基础API及应用
Linux网络编程基础API 具体介绍了socket地址意义极其API,在介绍数据读写API部分引入一个有关带外数据发送和接收的程序,最后还介绍了其它一些辅助API. socket地址API 主 ...
随机推荐
- [Go] 利用函数类型实现封装中的回调
当进行业务逻辑开发的时候,经常要进行封装,封装成独立的类文件,在类文件的属性中预留出函数类型的API 在调用该类文件中某些方法的时候,也根据业务需要调用类属性中的函数, 在主业务中可以传递特定的函数注 ...
- Django中的sql注入
Django中防止SQL注入的方法 方案一总是使用Django自带的数据库API.它会根据你所使用的数据库服务器(例如PostSQL或者MySQL)的转换规则,自动转义特殊的SQL参数.这被运用到了整 ...
- 阿里云 centOS系统 配置 node + ngnix
**centOS系统可以直接使用yun命令** 安装node 1.使用git将源码克隆到本地的~/.nvm目录下,并检查最新版本.> yum install git > git clone ...
- SSM实现mysql数据库账号密码加密连接
引言 咱们公司从事的是信息安全涉密应用的一些项目研发一共有分为三步,相比较于一般公司和一般的项目,对于信息安全要求更加严格,领导要求数据量和用户的用户名及密码信息都必需是要密文配置和存储的,这就涉及到 ...
- OAuth2.0授权登录
最近工作中遇到了多系统间的授权登录,对OAuth2.0进行了学习研究,并总结备忘. [场景] 我们登录一些论坛等网站的时候,如果不想单独注册该网站账号,可以选择用微信或QQ账号进行授权登录. 这样的第 ...
- 阿里面试实战题1----TreeSet,HashSet 区别
TreeSet,HashSet 区别 TreeSet public class TreeSet<E> extends AbstractSet<E> implements Nav ...
- 爬虫selenium中截图
一.整个页面截图 driver = webdriver.Chrome() driver.get(url) diver.save_screenshot('保存路径') 二.局部截图 driver = w ...
- Netty服务端Channel的创建与初始化
Netty创建服务端Channel时,从服务端 ServerBootstrap 类的 bind 方法进入,下图是创建服务端Channel的函数调用链.在后续代码中通过反射的方式创建服务端Channel ...
- 关于async function(){ let res = await } 详解
本文引自: https://www.jianshu.com/p/435a8b8cc7d3 async function fn(){ //表示异步,这个函数里面有异步任务 let result = aw ...
- 如何搭建node - express 项目
基于博主也是个菜鸟,亲身体验后步骤如下: 首先,我们需要安装node.js, https://www.runoob.com/nodejs/nodejs-install-setup.html 安装完成 ...