TCP && UDP





日常查看端口命令
# lsof -i 端口号 (80) 查看80端口是否被占用
yum(apt) install -y netcat 分别是在centos(nc)和ubuntu上下载
实验要占用两个不同的主机进行试验,过程有点绕,在两个系统下都同时开两个会话窗口比较好些,不然有点不好理解
使用命令开启个端口:9888
1)第一个shell窗口,打开端口
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端口

这里需要注意的是SYN和ACK都是通讯的校验位{0/1},seq和ack是起始序列号,seq和ack都会累加1,可以理解为收到第一条消息,请发第二条客户端和服务器端都有自己的tcp头部的序列起始序号和确认号。

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)
udp包头

网络层(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:A2:11:8C] 4.165ms
使用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 固定到缓存表中。
IP地址的组成
IP地址=网络ID (同一网络里网络id相同)+ 主机ID(主机id不同)
MAC=厂商ID(固定)+设备iD(自定义)
网络ID:主机在哪个网段,每个网段有自己的编号,叫网络ID,同一网段网路ID相同
主机ID:一个网段里的每个主机都是有唯一的标志的
主机id全为0:代表这个网络的名字
主机id全为1:代表是这个网络的广播
A类id: 最高位为0
主机数(主机id不同)=2^24 - 2 =1600万
网络数(0/127是特殊id)=2^7
地址分类
A 0(未知地址,不能用),127给每个主机的回环网卡保留了不能用
网络ID是前8位,主机ID的是后24位(bit/字节)
网络数=127
主机数=2^24 -2
1-126位A类地址
netmask=255.0.0.0 前八位十网络id
B
前两位是01不变
网络ID是前16位,主机ID的是后16位(bit/字节)
网络id数=2^14
主机数=2^16 - 2
前两位是01不变
01/1111111 最大191
01/000000 最小128
128 - 191
netmask=255.255.0.0 网络ID是前16位
C
前三位是110不变
网络ID是前24位,主机ID的是后8位(bit/字节)
网络id数=2^21
主机数=2^8 - 2=254
前三位是110不变
110/10000 最小192
110/111111 最大223
192 - 223
netmask=255.255.255.0 网络ID是前24位
D
多播地址没有网络和主机ID
前四位是1110不变
224-239
E 保留(研究使用)
240-
无类技术:不分类,网络ID不固定,按需指定,产生了子网掩码
nermask:子网掩码 32bit二进制,和IP成对使用,对应于IP中网络id为1,对应于主机id为0
255.255.0.0 16位网络id,和16位主机id,连续的0和连续的1
00000000 0
10000000 128
11000000 192
11100000 224
11110000 240
11111000 248
11111100 252
11111110 254
11111111 255
主机数=2^主机id - 2
网络数=2^可变网络ID
网络ID=ip与netmask
CIDR:无类域间路由
IP / 网络ID位数
10.0.0.123 / 12
10.0.0.123/12
255.240.0.0 8个一 + 4个一 = 12
1)测试
IP = 202.100.200.66/20
netmask= 255.255.240.0
IP 11001001 1100100 11001000 1000010
netmask 111111111 111111111 11110000 00000000
网络iD 202 100 11000000/192 0
主机数=2^(32-20) - 2 = 4094
网络数=2^20
netmask= 255.255.240.0
网络ID= 202 .100.192.0
2)测试
203.101.234.163/26 10100011
netmask=255.255.255.192 11000000
主机数=2^(32-26) - 2 = 62
网络数2^26
网路id=203.101.234.128
3)测试
a:10.0.1.1/24 10.0.1.0
b: 10.0.2.2/24|16 10.0.2.0
判段是否在同一网段,那本机的子网掩码和对方的IP相与
A---->B a通讯b,拿a的子网掩码与
a网络id= 10.0.1.0
b网路id= 10.0.2.0 主机id10.0.2.2与255.255.255.0
B--->A b通讯a,拿b的子网掩码与
b网路id=10.0.0.0
a网路id=10.0.0.0 主机id10.0.1.1与255.255.0.0
公共和私有地址

B类中有shi
公共IP地址:互联网上设备拥有的唯一地址

网络配置命令
静态指定:
ifconfig ,route,netstat
ip:object{link,addr,route},ss,tc
system-config-network-tui,setup
配置文件
# configurration 配置
# dynamic 动态
# host 宿主机
动态分配:DHCP
ifconfig命令(显示和禁用网卡)
# obsolete 被淘汰的
# MTU 以太网帧的最大值,最大传输单元MTU,帧大小最大为1500,lo回环网卡的,不是正真的网卡
# RX-OK 接收ok
# RX-ERR 出错的
# RX-DRP 被抛弃
# RX-OVR 超载的
来自于net-tools包,可以使用ip代替
# ifconfig ens37 down 禁用网卡
# ifconfig ens37 up 禁用网卡
# ifconfig ens37 192.168.10.100/24 修改网卡的地址
# ifconfig ens37:{1..9} 192.168.10.100/24 增加网卡地址
# ifconfig ens37:1 down 停用网卡地址
# ifconfig ens37 0 删除网卡信息
# ifconfig -s eth0/ens33 统计网卡流量
优化ping,防止被攻击
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all 输入1后网络流量会变慢
查看流量
ping 10.0.0.110 -f flood如同洪水般的ping,查看网卡的吞吐量
watch -n 0.5 ifconfig -s ens33 每隔0.5秒执行一次

route 命令 (网络路由)
# Destination 目标地
# Metric 费用,值小的优先级越高走
# route -n 查看路由表
# iface 接口
目标destination加子网掩码genmask,描述了目标网络怎么走
route record 路由记录
网络路由:表示一个网段的路由
主机路由:表示一个主机的路由
默认路由:表示一个未知网段的路由 0.0.0.0/0
路由表组成(增加网卡,在仅主机的模式下。相当于连到一个交换机hub上)
目标网络
netmask
接口:当前路由的出口,当前主机的接口
网关:下一个路由器的ip
路由增删改配置
ifconfig ens37:1 down # ifconfig ens37 192.168.10.100/24 修改网卡的地址 # ifconfig ens37:{1..9} 192.168.10.100/24 增加网卡地址 # ifconfig ens37:1 down 停用网卡地址 # ifconfig ens37 0 删除网卡信息
linux成为交换机,启用ip_forward转发的作用 # echo 1 > /proc/sys/net/ipv4/ip_forward mtr 地址 # 跟踪路由
# 使修改网卡生效 centos7
systemctl restart network
# 使修改网卡生效 centos8
nmcli connection reload
nmcli connection up eth0
nmcli connection up eth1
# 使修改网卡生效 ubuntu
netplan apply
network: version: 2 renderer: networkd ethernets: eth0: addresses: - 172.16.0.200/16 gateway4: 172.16.0.254 nameservers: addresses: [ 180.76.76.76, 223.6.6.6]
DEVICE=eth0 #设备装置名 NAME=eth0 #描述可写可不写 BOOTPROTO=none(static) #网卡的地址none(static)/静态 dhcp/自动 IPADDR=10.0.0.7 #IPv4地址 PREFIX=24 #子网掩码一种写法 PREFIX=24 另种写法 NETMASKE=255.255.255.0 GATEWAY=10.0.0.2 #网关 DNS1=223.6.6.6 #域名解析 DNS2=180.76.76.76

浙公网安备 33010602011771号