首先tcp三次握手是由客户机(图中1)主动向服务器(图中2)发起请求.其过程是a(SYN=1,seq=x)客户机向服务器发送数据报文 ,seq就是a发送的包数,这是第一次请求。
第一次请求到达服务器以后,服务器收到会立即回复一个请求,也就是b过程(SYN=1,ACK=1 seq=y ack=x+1)SYN与ACK=1表示客户端的数据报文服务器收到了。ack是确认号表示a过程的数据包服务器收到了,希望下次客户端发送x+1.b过程的seq是服务器自己的包数编号。这是第二次请求。
客户机收到请求后,还会发生一次请求(第三次请求) 最后确认一下 ACK=1,seq=x+1(第二次请求服务器希望发送的包数(ack=x+1)) ack=y+1(第二次请求服务器发送了向客户机seq=y,客户机回答ack=y+1,代表客户端收到了服务器的seq=y)。这是第三次请求。
在三次请求完成后客户端与服务器建立连接。这就是tcp的三次握手。
状态切换分析
在客户端发送第一次请求之前是关闭状态。而服务器要想接受客户端的请求必须处于监听状态(listen)一旦客户端发送第一次请求,服务器接受到后向客户端发送请求的这一阶段。客户端都处于SYN-SENT阶段。服务器在发送第二个请求到没有接受到第三个请求之前都处于SYN-RCVD阶段。然后客户端接受到服务器发送的请求,立即发送第三次请求之后就进入了ESTAB-LISHED(已建立连接状态)。而服务器收到第三次请求之后,也进入了ESTAB-LISHED状态。
tcp四次挥手
tcp四次挥手(双方都可以主动发送关闭请求,下面以客户端发送关闭请求为例)
首先,客户端发送关闭请求FIN=1,seq=u(FIN是数据报文,seq是客户端的包号),然后服务器接受到后立即回复请求ACK=1,seq=v,ack=u+1(ACK=1表示收到信息,seq=v是服务器的包数,ack=u+1是代表收到信息,希望下次发u+1)。在客户端收到回复之后,会有一段时间发送遗留数据。数据发送完之后,服务器在发出请求FIN=1,ACK=1,seq=w,ack=u+1。客户端接受到请求后回复ACK=1,seq=u+1,ack=w+1。服务器接受到回复后。双方都已经关闭。完成四次挥手。
补充在第二次挥手与第三次挥手中间的数据传输是单向的,因为被动接受的一方不知道这个请求就可能留有残留的数据,而主动发出请求的一方则没有数据残留的问题。
四次挥手的状态切换
在客户端发送关闭请求前,客户端与服务端都处于ESTAB-LISHED状态。客户端发送第一次请求后客户端立即进入FIN-WAIT-1(终止等待1)的状态。服务端接受请求并回复之后,立即进入CLOSE-WAIT(关闭等待)的状态。客户端收到回复之后会立即进入FIN-WAIT-2(终止等待2)的状态。服务器再次发出请求之后,服务端进入LAST-ACK状态(最后确认状态),服务端再次发送请求,客户端接受并回复,客户端同时进入TIME-WAIT(时间等待)状态,时间是2MSL(最大数据段生存时间)。TIME-WAIT结束后客户端关闭连接。而服务端收到回复之后断开连接。完成四次挥手。
静态配置网卡ip
ubuntu
首先先看一下ubuntu自带的网卡名与ip
这个ens33的网卡名在更换网卡的时候可能会被更换掉,因为我们要把他改成类似eth0这个样式的网卡名。
进入文件配置网卡名的命令
vi /etc/default/grub
或者使用sed命令来修改
sed -i.bak '/^GRUB_CMDLINE_LINUX=/s#"$#net.ifnames=eth0"#' /etc/default/grub
然后生成新的grub.cfg文件
grub-mkconfig -o /boot/grub/grub.cfg,效果如图所示
或者使用以下命令
update-grub
grep net.ifnames /boot/grub/grub.cfg
然后重启登录查看网卡名
改了网卡名,而配置里还是ens33导致配置和网卡名不匹配,所以eth0没有启动 。因此下面我们要配置ip,网关的配置。
网卡的相关配置必须使用yaml格式,必须以 /etc/yaml/netplan/xxx.yaml的文件名称来存放网卡的配置。程度
vim 00-installer-config.yaml
然后netplan apply生效。改完之后eth0就可以启动然后进行远程连接。
可以根据自己的配置来自己改。
yum私有仓库的实现
首先要想建立私有仓库点配置好yum文件
安装httpd服务
yum install -y httpd
然后启动httpd服务
systemctl enable --now httpd
进入httpd的共享文件夹 /etc/www/html/
写一个共享文件测试httpd是否可以共享。
测试成功
然后使用以下命令将epel源下载的东西存放在 /var/www/html下
dnf reposync --repoid=epel --download-metadata -p /var/www/html
然后就可以通过浏览器查看共享文件了
这样yum私有仓库就创建完成了。
脚本实现ssh免密远程登录
#!/bin/bash
color () {
RES_COL=60
MOVE_TO_COL="echo -en \\033[${RES_COL}G"
SETCOLOR_SUCCESS="echo -en \\033[1;32m"
SETCOLOR_FAILURE="echo -en \\033[1;31m"
SETCOLOR_WARNING="echo -en \\033[1;33m"
SETCOLOR_NORMAL="echo -en \E[0m"
echo -n "$1" && $MOVE_TO_COL
echo -n "["
if [ $2 = "success" -o $2 = 0 ] ;then
${SETCOLOR_SUCCESS}
echo -n $" ok "
elif [ $2 = "failure" -o $2 = "1" ] ;then
${SETCOLOR_FAILURE}
echo -n $"FAILED"
else
${SETCOLOR_WARNING}
fi
${SETCOLOR_NORMAL}
echo -n "]"
echo
}
#实现ssh自动登录
ssh_host() {
USER=root
PASSWORD=123456
while true;do
read -p "请输入ip(q退出):" IP
[[ $IP =~ ^(q|Q)$ ]] && exit;
[[ $IP =~ ^([0-9]{1,3}\.){3}[0-9]{1,3}$ ]] || { echo "IP不合法,请重新输入";continue; }
break;
done
#read -p "请输入用户名:" USER
#read -p "请输入密码:" PASSWORD
expect <<EOF
set timeout 20
spawn ssh-copy-id $IP
expect {
"yes/no" { send "yes\n";exp_continue }
"password" {send "$PASSWORD\n" }
}
expect eof
EOF
#while true;do
read -p "是否继续登录$IP(y/q):" Y
[[ $Y =~ y|Y ]] && ssh $IP || continue;
[[ $Y =~ q|Q ]] && break
}
#菜单
menu() {
while true;do
PS3="请输入指令(1-4):"
select MENU in 安装mysql 安装apache 免密登录远程主机 退出脚本;do
case $REPLY in
1)
install_mysql
break
;;
2)
install_apache
break
;;
3)
ssh_host
break
;;
4)
echo 退出!
exit
;;
esac
done
done
}
menu
效果如图所示