网络协议和管理

一、OSI七层模型

 

 二、建立TCP连接:三次握手、断开TCP连接:四次挥手

 

 ●序号(seq):占用4个字节,表示本报文段所发送数据的第一个字节的编号,他的编号范围是0-2^32-1,即4294967296,当序号增加到2^32-1之后,下一个序号将又重新绕回到0开始编号。编号的方式是每个分包的起始字节号,例如第一次要发送的数据分包编号为seq=1,如果这次发送的数据长度是len=10字节,则下个分包的编号是seq=11,依次类推。

●确认号(ack):占4个字节,期待收到对方下一个报文段的第一个数据字节的序号;序列号表示报文段携带数据的第一个字节的编号;而确认号指的是期望接收到下一个字节的编号;因此当前报文段最后一个字节的编号+1即为确认号。

●ACK位:占用1个比特位,其值为0或1,ACK=1时才表明前面的ack确认号字段是有效的,当ACK=0时,确认号字段无效。TCP要求,连接建立完成之后,ACK字段总是设置为1.

●SYN位:占用1个比特位,其值为0或1,用于同步编号。当SYN=1而ACK=0时,说明连接尚未建立,所以这是一个TCP的连接请求,如果对方接受连接请求,则回复时将设置SYN=1且ACK=1。SYN会在连接建立后设置为0,所以SYN=1表示这是TCP连接建立前的请求或响应包,此时结合ACK即可判断是请求还是响应。

●FIN位:占用1个比特位,其值为0或1,当FIN=1时,表明请求释放TCP连接。

 

三次握手

TCP在传输数据之前,首先需要建立好TCP连接,后续所有数据都基于这个已建立的连接来传输。

 

 

 首先服务端B的服务进程已经监听在某个端口上,监听之后就可以一直等待客户端请求建立TCP连接

1、当客户端A想要和B建立TCP连接时,首先会发送一个连接请求报文给服务端B。在这个请求报文中,TCP首部中的SYN为设置为1,ACK位设置为0,假设此时的序号是x,即SYN=1、ACK=0、seq=x。这个包也称为SYN包,当客户端发送完SYN包后,它将进入SYN_SENT状态。

2、当B收到该报文后,发现其中的SYN=1、ACK=0,便知道这是一个TCP连接的请求包。如果B确认与A建立TCP连接,那么B需要回复A。回复时,SYN=1、ACK=1、ack=x+1、seq=y。注意区分这里的ACK和ack,ACK表示的是占用一个比特位的ACK位置位,ack是确认号。这个包通常被称为ACK包,当服务端发送完ACK包之后,它将进入SYN_RECV状态。

3、当A收到B的回复报文后,发现里面的SYN=1、ACK=1,于是也会向B回复一个ACK包,回复时,SYN=0、ACK=1、seq=x+1、ack=y+1。这里的SYN=0、ACK=1表示这不是建立连接的请求包,而是回复包。A发送完之后,就进入ESTABLISHED状态,表示连接在A这端已经建立完成。

4、B最终收到A的ACK包之后,也将进入ESTABLISHED状态,到此,TCP连接就建立完成。

B回复A时,也发送了一个SYN=1的包,相当于也是在请求A去建立TCP连接,所以A最后回复了一个ACK包。

 

四次挥手

建立TCP连接需要三次握手过程,在TCP连接断开(或释放)的时候则需要四次挥手的过程

 

 首先两端在开始释放TCP连接之前,都已经处于ESTABLISHED状态,假设现在A端开始请求释放连接(B端也可以主动释放连接)

1、A首先发送一个TCP首部中FIN位置为1的包给B端,假设此时序号是u,即seq=u。FIN=1意味着这是一个请求关闭TCP连接的数据包,这种包也称为FIN包。当发送FIN包之后,A将从ESTABLISHED状态转变为FIN-WAIT-1状态。

2、B收到FIN包之后,发现其中FIN=1,知道A端请求关闭,于是发一个回复包给A。回复时,设置ACK=1,ack=u+1,同时还设置序号seq=v(假设B现在发送到的数据序号是v),发送完这个回复包之后,服务端进入CLOSE-WAIT状态。到了这个阶段,A(主动请求关闭方)到B(被动方)方向的连接就已经释放了,A不能再发送传输数据给B,但是B到A方向的连接还没有关闭,它可以持续发送数据给A,A也会接受。因为在这个阶段只有一个方向的连接被释放,所以close-wait状态也称为半关闭状态。

3、当A收到B的ACK包之后,它将进入FIN-WAIT-2,等待B发起从B到A方向的连接关闭请求。

4、当B确认已经没有数据发送给A后,B开始主动关闭从B到A方向的TCP连接,这时会发送一个FIN包,同时ACK设置为1,ack仍然保持不变,是u+1,而seq则为一个新值w,因为进入CLOSE-WAIT之后,B可能还发送了一些数据。B发送完这个FIN+ACK包之后,将进入LAST-ACK(最后确认)状态。

5、当A收到B的FIN+ACK包之后,需要对B发送的关闭请求做出回复。回复时,ACK=1,seq=u+1不变,ack=w+1。当发送完这个ACK包之后,A不会立即就关闭,而是进入TIME-WAIT阶段等待一段时间(2倍的MSL时长)。

6、当B收到A的回复ACK包之后,意味着B到A方向的连接关闭已经确认了,于是B端关闭连接。

7、当A等待了2MSL的时长之后,将真正关闭连接。

 

三、IP地址

私有IP地址

A:10.0.0.0-10.255.255.255即10.0.0.0/8

B:172.16.0.0-172.31.255.255即172.16.0.0/12

C:192.168.0.0-192.168.255.255即192.168.0.0/16

 

子网划分计算公式:

网段数:2^可变网络ID的位数
主机数:2^主机ID的位数-2=2^(32-网络ID的位数)-2 >=120
网络ID:可以用来判断当前主机在哪个网段,netmaskID=IP^netmask
划分子网:将大网分成若干个小网,网络ID向主机ID借N位,可以划分为2^N个子网
合并超网:若干个小网合并成一个大网,主机ID向网络ID借位

四、网络配置

ss命令

-t:tcp协议相关

-u:udp协议相关

-w:裸套接字相关

-x:unix sock相关

-l:listen状态的连接

-a:所有

-n: 数字格式

-p:相关的程序及PID

-e:扩展的信息

-m:内存用量

-o:计时器信息

1、ss -nt 显示当前系统有哪些建立连接信息

[20:48:36 root@Centos7 ~]#ss -nt
State       Recv-Q Send-Q   Local Address:Port                  Peer Address:Port              
ESTAB       0      0             10.0.0.9:22                        10.0.0.1:56748     

 2、ss -ntl 查看当前系统有哪些处于监听状态的端口

[20:50:26 root@Centos7 ~]#ss -ntl
State      Recv-Q Send-Q   Local Address:Port                  Peer Address:Port              
LISTEN     0      100          127.0.0.1:25                               *:*                  
LISTEN     0      128                  *:22                               *:*                  
LISTEN     0      100              [::1]:25                            [::]:*                  
LISTEN     0      128               [::]:22                            [::]:*         

 

3、ss -ntlu  查看当前系统有哪些开启的udp端口

[20:52:07 root@Centos7 ~]#ss -ntlu
Netid  State      Recv-Q Send-Q Local Address:Port               Peer Address:Port              
udp    UNCONN     0      0                 *:68                            *:*                  
tcp    LISTEN     0      100       127.0.0.1:25                            *:*                  
tcp    LISTEN     0      128               *:22                            *:*                  
tcp    LISTEN     0      100           [::1]:25                         [::]:*                  
tcp    LISTEN     0      128            [::]:22                         [::]:*   

查看常用服务端口号

[21:06:29 root@Centos7 ~]#cat /etc/services 

 

ip命令

1、禁用eth1网卡

[21:06:29 root@Centos7 ~]#ip link set eth1 down 

 

2、网卡临时改名

[21:06:29 root@Centos7 ~]#ip link set eth1 name gjz

 

3、启用eth1网卡

[21:06:29 root@Centos7 ~]#ip link set eth1 up 

五、Centos6和Centos7、8网络配置

centos6修改网卡名称

修改下面的文件

[root@Centos6 ~]#vim /etc/udev/rules.d/70-persistent-net.rules 

 

1 # This file was automatically generated by the /lib/udev/write_net_rules
2 # program, run by the persistent-net-generator.rules rules file.
3 #
4 # You can modify it, as long as you keep each rule on a single
5 # line, and change only the value of the NAME= key.
6 
7 # PCI device 0x8086:0x100f (e1000)
8 SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:b9:93:0a", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

 

ethtool 

mii-tool 

查看网卡状态信息(适用于centos6、7、8)

[root@Centos6 ~]#ethtool eth0
Settings for eth0:
    Supported ports: [ TP ]
    Supported link modes:   10baseT/Half 10baseT/Full 
                            100baseT/Half 100baseT/Full 
                            1000baseT/Full 
    Supported pause frame use: No
    Supports auto-negotiation: Yes
    Advertised link modes:  10baseT/Half 10baseT/Full 
                            100baseT/Half 100baseT/Full 
                            1000baseT/Full 
    Advertised pause frame use: No
    Advertised auto-negotiation: Yes
    Speed: 1000Mb/s
    Duplex: Full
    Port: Twisted Pair
    PHYAD: 0
    Transceiver: internal
    Auto-negotiation: on
    MDI-X: off (auto)
    Supports Wake-on: d
    Wake-on: d
    Current message level: 0x00000007 (7)
                   drv probe link
    Link detected: yes
[root@Centos6 ~]#mii-tool eth0
eth0: negotiated 100baseTx-FD, link ok

 

centos6重新加载网卡

[root@Centos6 ~]#service network restart

 

centos7、8重新加载网卡

[21:24:26 root@Centos8 ~]#nmcli connection up eth0 

 

完整的网卡配置信息

 1 TYPE="Ethernet"                  接口类型;常见的有Ethernet,Bridge
 2 PROXY_METHOD="none"              
 3 BROWSER_ONLY="no"
 4 BOOTPROTO="static"               激活此设备时使用的地址配置协议
 5 IPADDR=10.0.0.9                  指名IP地址
 6 NETMASK=255.255.255.0            子网掩码
 7 GATEWAY=10.0.0.2                 网关
 8 DNS1=180.76.76.76                第一个DNS服务器
 9 DNS2=223.6.6.6                   第二个DNS服务器
10 DEFROUTE="yes"
11 IPV4_FAILURE_FATAL="no"
12 IPV6INIT="yes"
13 IPV6_AUTOCONF="yes"
14 IPV6_DEFROUTE="yes"
15 IPV6_FAILURE_FATAL="no"
16 IPV6_ADDR_GEN_MODE="stable-privacy"
17 NAME="eth0"                                       此配置文件应用到的设备          
18 UUID="64318eb4-1bf8-433a-8cf5-e149ad034b20"       设备的唯一标识
19 DEVICE="eth0"                                     设备名
20 ONBOOT="yes"                                      在系统引导时是否激活此设备

 

验证网卡是否配置正确

ifconfig查看ip地址是否生效

 1 [21:36:14 root@Centos7 ~]#ifconfig 
 2 eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
 3         inet 10.0.0.9  netmask 255.255.255.0  broadcast 10.0.0.255
 4         inet6 fe80::36db:48f0:9bf1:e63a  prefixlen 64  scopeid 0x20<link>
 5         inet6 fe80::c172:90f2:11f3:fede  prefixlen 64  scopeid 0x20<link>
 6         ether 00:0c:29:58:50:5c  txqueuelen 1000  (Ethernet)
 7         RX packets 4456  bytes 778847 (760.5 KiB)
 8         RX errors 0  dropped 0  overruns 0  frame 0
 9         TX packets 2843  bytes 1252178 (1.1 MiB)
10         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
11 
12 eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
13         ether 00:0c:29:58:50:66  txqueuelen 1000  (Ethernet)
14         RX packets 41  bytes 3228 (3.1 KiB)
15         RX errors 0  dropped 0  overruns 0  frame 0
16         TX packets 4881  bytes 813878 (794.8 KiB)
17         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
18 
19 lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
20         inet 127.0.0.1  netmask 255.0.0.0
21         inet6 ::1  prefixlen 128  scopeid 0x10<host>
22         loop  txqueuelen 1000  (Local Loopback)
23         RX packets 0  bytes 0 (0.0 B)
24         RX errors 0  dropped 0  overruns 0  frame 0
25         TX packets 0  bytes 0 (0.0 B)
26         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

 

route -n 检查网关是否生效,查看是否有默认路由

1 [21:36:18 root@Centos7 ~]#route -n
2 Kernel IP routing table
3 Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
4 0.0.0.0         10.0.0.2        0.0.0.0         UG    100    0        0 eth0
5 10.0.0.0        0.0.0.0         255.255.255.0   U     100    0        0 eth0

 

查看dns配置是否生效

1 [21:37:49 root@Centos7 ~]#cat /etc/resolv.conf 
2 # Generated by NetworkManager
3 nameserver 180.76.76.76
4 nameserver 223.6.6.6

 

如遇子命令无法补全问题需安装bash-completion软件包

 

posted @ 2020-04-26 21:42  Ambition~  阅读(310)  评论(0)    收藏  举报