signed

QiShunwang

“诚信为本、客户至上”

网络协议和管理

2020/12/26 17:58:21   来源:

TCP和UDP区别
传输层
在这里插入图片描述
在这里插入图片描述
TCP: 面向连接 UDP:不面向连接
不容易丢数据 \ 速度快
有错误报告 \ 没有错误报告
不易丢数据 \ 容易丢数据
在这里插入图片描述
TCP包头结构
每一行4个字节,共5行20个字节
TCP 协议的上一层应用层/http/ssh/FTP
在这里插入图片描述
源端口和目的端口
游览器<------------------------------->nginx服务
这两个软件要互相发送数据,需要在数据报文里面,利用tcp协议写清楚它是http协议而不是ssh协议,http协议要区分出来需要靠端口号区分,端口号又分源端口和目标端口,源端口是指客户端的端口号,目标端口是指服务器的端口,端口号总量2^16,计算机要运行多个运用程序,每个应用程序都要有不同的端口号,服务器端的端口号是固定的。
数据偏移
指的是我们数据报文的头部,头部有可选的,我们的头部可能长过20个字节,数据偏移是指头有多长,头有多长决定了头有多少选项
六个标记位flag(标签) :
ACK(Acknowledgment/确认) SYN FIN 校验位{0或1 无用/有用}
PSH:当我们的数据报文通过网络发送到我们的网卡以后,如果我们的网卡收下来我们的数据报文,通常都是先放到网卡的缓冲区里,我们的数据报文从网络来,数据先放到缓存区里面,在把它复制到linux内核kernel,再由内核kernel交给app,PSH等于1的意思是不把数据报文放到缓冲区里等待,直接交给内核到应用程序,不放在缓冲区里,
RST:如果RST为1,表示对端的网路出现问题,主机崩溃了,立即释放链接从新开始,从新在建立连接,如果是0就是正常即可。
ack序列号 :约吗—>不约—>好吧 (seq 起始序号)+(ack 确认的序列号)
seq 起始序号
ack 确认的序列号 ,加一意思:第一个接受了,就是在发第二个数据报文
在这里插入图片描述
日常查看端口命令

ss -ntl 查看,打开的端口号

lsof -i 端口号 (80) 查看80端口是否被占用

cat /etc/services 定义了常用服务的端口(http,mysql,tomcat,xshell…)
自定义开启端口号
yum(apt) install -y netcat 分别是在centos(nc)和ubuntu上下载

实验要占用两个不同的主机进行试验,过程有点绕,在两个系统下都同时开两个会话窗口比较好些,不然有点不好理解

使用命令开启个端口:9888

1)第一个shell窗口,打开端口

root@ubuntu2004:~# nc -l 9888
2)第二个shel窗口,查看端口号
root@ubuntu2004:~# netstat -tunp

ISHED 6137/sshd: zhu [pri
tcp 0 0 10.0.0.14:9888 10.0.0.110:58484 ESTABL
成功开启端口

注意:在开启9888 端口后只要端口被其他主机连接,端口号会自动释放,可以在重新开启

例如

[root@centos8-2 ~]# nc 10.0.0.14 9888 10.0.0.14是Ubuntuip地址,此时已经和ubuntu建立连接,可以互相通讯,并重新开9888端口
系统端口号优化
/proc/sys/net/ipv4/ip_local_port_range 定义了客户端的端口范围,通常这个端口是够的
echo1024 65535 > /proc/sys/net/ipv4/ip_local_port_range 修改客户端的访问服务器的地址范围,当在同一时间很客户能够同时进入服务器访问
TCP三次握手(彼此确认的过程)
在这里插入图片描述
这里需要注意的是SYN和ACK都是通讯的校验位{0/1},seq和ack是起始序列号,seq和ack都会累加1,可以理解为收到第一条消息,请发第二条客户端和服务器端都有自己的tcp头部的序列起始序号和确认号。

四次挥手
测试实例/
在在一台服务器上启动一个http服务,下台主机连接上台服务器使用telnet 10.0.0.7 80;GET / HTTP/2.2 ; host:1.1.1.1,wireshark抓包
在这里插入图片描述
首先客户端和服务端都是建立连接状态,发出分手决定有可能是服务端也有可能是客户端
前两步只是互相确认了信息,只是A到B不通讯了,不代表B不和A通讯了,这是种半连接状态,B话还没说完,B还有没有传完的数据。

maximum segment lifetime(MSL) 段的最大生存期

2MSL (timewait) :先发的分手未必有后发的分手快,这就造成了,先发的分手数据还没传完,卡一下后发的分手就结束了立即执行第四步,这就造成数据的丢失,为了A都能收到两条信息,更可靠所以把时间给延长等待接收时间。

三次分手出现的场景:几乎客户端和服务端同时发起分手消息,互相分手后直接进入closeing状态。

测试实例

在一台服务器上启动一个http服务,再在另一台主机上curl 上台主机ip (10.0.0.7),使用wireshark抓包
在这里插入图片描述
在这里插入图片描述
 TCP超时重传

当TCP报文传递过程超时,会启动其内重传定时器,进行报文重传,当对方任然没有反应时,就会达到一个规定重传次数的上限,有个上限就还有个下限。

与TCP超时重传的两个内核参数:
/proc/sys/net/ipv4/tcp_retries1 #指定在底层ip接管之前TCP最少执行重传次数,默认值是3

/proc/sys/net/ipv4/tcp_retries2 #指定连接放弃前TCP最多可以执行的重传次数,默认值15(一般对应13~30min)

UDP(User Datagram Protocol)
在这里插入图片描述
网络层(internet)

在这里插入图片描述
ICMP协议判断网络状态(destination/送达地点 unreachable/不可达)

例如: win ping www.baidu.com -t

        linux  ping   www.baidu.com

1)设置一个ping不通的实战环境,一台服务端,一台客户端,一台提前阻止另一台ping自己,另一台区ping前一台,没有输出结果

-A 追加到链接(Append to chain)

-j 加载目标扩展(load target extension)

-s address
[root@MiniCentOS8 ~]# iptables -A INPUT -s 10.0.0.14 -j DROP

root@ubuntu2004:~#     ping 10.0.0.159

2)删除路由表后查看网络联通情况,ping百度时不通

ip route 查看路由

default 默认

route 路由

del 删除

add 增加
root@ubuntu2004 ~# ip route

root@ubuntu2004:~# iproute del default via 10.0.0.2 dev ens33 proto static

root@ubuntu2004:~# ping www.baidu.com

root@ubuntu2004:~# iproute add default via 10.0.0.2 dev ens33 proto static

3)查看是不是网线断了,导致ping命令使用的imcp报文不通,正常连接状态如下图2
在这里插入图片描述

root@ubuntu2004:~# mii-tool ens33
ens33: negotiated 1000baseT-FD flow-control, link ok

4)线路出现问题把线路连接到两个交换机的两个头上,导致环路,广播一直回环,消耗带宽,网络就瘫掉了,一般交换机都有stp协议来解决环路问题

总结:icmp是属于internet层较上的层,ping命令是属于icmp协议类型进行数据交换的

ARP 通过ip地址解析mac地址,通过交换机找到对应主机(地址解析协议)

arp -n 查看通讯过主机ip和本身的mac地址对应关系

-nn 以数字化模式读去

-i interface 网卡接口

-s 设置一个新的arp关系(set a new ARP entry)

注意:当本地主机需要和远程主机通讯的时候,第一步先查缓存,缓存里有mac地址就直接通讯,如果没有就通过arp广播,当然本地主机过一段时间不和远程主机通讯,里面的缓存将会失效,缓存的有效期到了,缓存里的mac信息将会删除。(一问一答的工作逻辑,你发问,我回答,你就信,这使arp通讯很不安全,容易造成arp欺骗。

通过抓包来更深入了解arp的沟通过程(tcpdump/抓包命令)

[root@centos8-2 ~]# tcpdump -i ens33 -nn arp

root@ubuntu2004:~# ping 10.0.0.110 -c1

12:32:35.719706 ARP, Request who-has 10.0.0.14 (00:0c:29:60:9a:5f) tell 10.0.0.3, length 46
12:32:35.719761 ARP, Reply 10.0.0.14 is-at 00:0c:29:60:9a:5f, length 46

解决缓存一定时间后消失,ip又要重新发arp广播通过找mac的过程,防止有黑客窃取数据,现在就可以绑定ip和mac地址的关系,只要不关机就一直存在,从而实现静态绑定

[root@centos8-2 ~]# arp -s 10.0.0.14 00:0c:29:60:9a:5f

[root@centos8-2 ~]# arp -n
10.0.0.14                ether   00:0c:29:60:9a:5f   CM 

arp欺骗:
在这里插入图片描述
Gratuitous ARP (免费arp,它可以避免地址冲突)
当服务器启动的时候或这网卡启动的时候,服务器会向网络中发送报文,说网络中谁拥有这个地址10.0.0.110,如果网络中有人在用这个地址,它就会回答这个请求,我服务器收到了网络中也有人在用自己的地址,发现网络中有地址冲突了,linux系统会自动禁用地址不让它生效了,如果网络中发了几次没人理,然后服务器就发一个自问自答的包,对外宣称我拥有这个地址,这就是免费arp的逻辑

label 标签

add 增加

duplicate 完全一样
测试地址冲突,给一台主机增加另一台主机的地址,在从第三台主机上使用arping命令就可以发现有两个mac地址用的都是10.0.0.110的地址,首先要在服务器上下载arping包(apt/yum install iputils-arping)

[root@centos7_2009 ~]# ip a add(del/删除) 10.0.0.110/24 dev ens33 label ens33:1
root@zhu:~# arping 10.0.0.110

  Unicast reply from 10.0.0.110 [00:0C:29:57:45:DA]  2.595ms
  Unicast reply from 10.0.0.110 [00:0C:29:57:45:DA]  2.595ms

使用wireshark抓包,确定已经被占用
在这里插入图片描述
如果两台主机故意配置同样的地址,但又不产生冲突,可以使用Gratuitous arp技术,跨网段通讯,需要用arp技术不断的跨路由进行连接。

Internet协议
在这里插入图片描述
版本 4个位,局域网一般使用的都是ipv4 ,互联网现在好多都是ipv6版本

源地址/目的地址 32个位,可以算出ipv4的地址有2^32=43亿个ip地址

标识 一个大的段,需要切成小包,切除三个包,三个包都是一个标识切出来的,所以标识要一样,一样表示是同一大端的小包

标志 表示是切片包还不是切片包,是头切片包还不是头切片包

片偏移 是大包里的第几个包(ttl/生命期)

ttl linux和win的初始ttl不同,linux是128,是以进过路由器的数量为单位,每经过一个路由器就减一,为0数据包就生命终止了

协议 上层协议 tcp/udp/icmp
在这里插入图片描述
打开网站经历了什么:首先是建立连接要使用tcp协议,怎们建立tcp协议了,那就先要使用arp协议发广播(broadcast)找到目标的物理地址mac ,广播通过路由发送到目标主机,目标主机收到回应,然后目标的mac和IP就写到包的源地址中,通过tcp报文传给宿主机,宿主机就把包里的地址和ip写到arp缓存表里,要实现持久缓存的话就需要执行命令arp -s ip mac 固定到缓存表中。