TCP协议头部结构 详细信息
TCP通过三次握手建立链接 三次握手的报文 服务端队列详情 SYNS_QUEUE 半连接队列 如果SYNS队列满了,那么会直接丢弃clent发过来的syn包。此时client端会重试连接,其重试次数由参数【/proc/sys/net/ipv4/tcp_syn_retries】来决定,默认值为6:
第 1 次发送 SYN+ACK 报文后等待 1s(2的0次幂),如果超时,则重试 第 2 次发送后等待 2s(2 的 1 次幂),如果超时,则重试 第 3 次发送后等待 4s(2 的 2 次幂),如果超时,则重试 第 4 次发送后等待 8s(2 的 3 次幂),如果超时,则重试 第 5 次发送后等待 16s(2 的 4 次幂),如果超时,则重试 第 6 次发送后等待 32s(2 的 5 次幂),如果超时,则重试 第 7 次发送后等待 64s(2 的 6 次幂),如果超时,则超时失败 总共127秒。 半连接队列的大小取决于:max(64,/proc/sys/net/ipv4/tcp_max_syn_backlog),不同版本的系统会有些差异。
ACCEPT_QUEUE 连接队列 如果ACCEPT队列满了,server通过【/proc/sys/net/ipv4/tcp_abort_on_overflow】来决定如何返回
tcp_abort_on_overflow为0,不会把连接从SYN队列中移除,server过一段时间再次发送syn+ack给client(也就是重新走握手的第二步)这样来回重发几次,次数由【/proc/sys/net/ipv4/tcp_synack_retries】(centos默认为5) 指定。
tcp_abort_on_overflow为1,则server发送一个RST包给client,表示废掉这个握手过程和这个连接(本来在server端这个连接就还没建立起来),客户端会出现【connection reset by peer】的异常。
gogs是一款轻量,占用资源少,极易搭建的Git服务,掌握了它,我们就可以搭建自己的git服务站点
gogs官网: https://gogs.io/, github中文地址:https://github.com/gogs/gogs/blob/master/README_ZH.md
本文基于docker搭建所有环境,docker的安装可以参考:Docker安装以及常用命令
下载gogs的docker镜像 sudo docker pull gogs/gogs 创建数据存储目录 sudo mkdir -p /home/ubuntu/data/gogs 运行容器 sudo run -d --name=gogs -p 10022:22 -p 10080:3000 -v/home/ubuntu/data/gogs:/data gogs/gogs 配置NGINX server { listen 80; server_name git.liumurong.org; location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://127.0.0.1:10080; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.
系统环境: Ubuntu 18.04.3 LTS
安装docker 安装最新的docker-ce curl -fsSL http://get.docker.com/ | sh 更改配置文件 ## vim /etc/sysconfig/docker other_args="--exec-driver=lxc --selinux-enabled" 启动服务 sudo service docker start // 启动docker sudo systemctl enable docker // 加开机启动并启动docker sudo systemctl start docker 上述两种方式任选其一 重启服务 sudo systemctl daemon-reload // 重新加载配置 sudo systemctl restart docker // 重启docker docker常用命令 docker images docker images [OPTIONS] [REPOSITORY[:TAG]] OPTIONS说明:
-a :列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层);
–digests :显示镜像的摘要信息;
-f :显示满足条件的镜像;
chown命令将指定文件的拥有者改为指定的用户或组。用户可以是用户名或者用户ID,组可以是组名或者组ID。
全称 chown: Change Owner
格式 1 2 3 $ chown [options]... owner[:group] file... $ chown [options]... --reference=rfile file... 常用选项 -c: 当发生改变时输出调试信息,效果类似选项-v,但仅输出更改的部分
-f: 不显示错误信息
-v: 显示指令执行过程
-h: 显示帮助信息
–reference=rfile: 参考文件或者目录。将指定文件或者目录的所属用户或所属群组全部设成和参考文件或目录所属用户或所属组相同。
-R: 以递归的方式处理目录下的所有子目录和文件。
实例 修改文件所属用户 1 $ sudo chown jas start.sh 注: chown需要管理员权限。
修改文件所属用户和所属组 1 $ sudo chown jas:john boostrap 根据参考文件修改文件所属用户和组 1 $ sudo chown --reference=start.sh bootstrap 递归修改目录及其下文件的所属用户和组 1 $ sudo chown -R jas:john log
chmod命令用来改变linux系统中文件或者目录的访问权限。chmod命令有两种用法,一种是包含字母和操作符表达式的文字设定法,另一种是包含数字的数字设定法。
Linux文档的基本权限有九个,分别是owner/group/others三种身份各有自己的read/write/execute权限,这九个权限是三个三个一组的!其中,我们既可以使用字母也可以使用数字来代表各个权限,各权限的分数对照表如下:
r:4
w:2
x:1
每种身份(owner/group/others)各自的三个权限(r/w/x)分数是需要累加的,例如当权限为: [-rwxrwx—] 分数则是:
owner = rwx = 4+2+1 = 7 group = rwx = 4+2+1 = 7 others= — = 0+0+0 = 0 所以770是和权限[-rwxrwx—]对应的。
格式 1 2 3 4 5 $ chmod [option]... mode[,mode]... file... $ chmod [option]... octal-mode file... $ chmod [option]... --reference=rfile file... 常用选项 -c: 当发生改变时,报告处理信息。
-L 不输出错误信息。
-v: 显示详细处理信息。
在Linux系统里,文件或目录的权限的掌控以拥有者及所属群组来管理。可以使用chgrp命令来改变文件或者目录的所属群组。设置时,采用群组名称或者群组识别码皆可。
全称 chgrp: Change Group
格式 1 2 3 $ chgrp [options]... group file... $ chgrp [options]... --reference=rfile file... 常用选项 -c: 当发生改变时输出调试信息,效果类似选项-v,但仅输出更改的部分
-f: 不显示错误信息
-v: 显示指令执行过程
-h: 显示帮助信息
–reference=rfile: 参考文件或者目录。将指定文件或者目录的所属群组全部设成和参考文件或目录所属组相同。
-R: 以递归的方式处理目录下的所有子目录和文件。
实例 修改文件所属组 1 $ sudo chgrp jas start.sh 注: chgrp需要管理员权限。
根据参考文件修改文件所属组 1 $ sudo chgrp --reference=start.sh bootstrap 递归修改目录及其下文件的所属组 1 $ sudo chgrp -R jas log