IP、TCP、UDP、HTTP、WebSocket、SOCKET之间的关系和区别

学通讯先搞清楚各种协议和通信层、套接字等。

看看标准的七层模型,亦称OSI(Open System Interconnection)参考模型

7 应用层 例如HTTP、SMTP、SNMP、FTP、Telnet、SIP、SSH、NFS、RTSP、XMPP、Whois、ENRP
6 表示层 例如XDR、ASN.1、SMB、AFP、NCP
5 会话层 例如ASAP、TLS、SSH、ISO 8327 / CCITT X.225、RPC、NetBIOS、ASP、Winsock、BSD sockets
4 传输层 例如TCP、UDP、RTP、SCTP、SPX、ATP、IL
3 网络层 例如IP、ICMP、IGMP、IPX、BGP、OSPF、RIP、IGRP、EIGRP、ARP、RARP、 X.25
2 数据链路层 例如以太网、令牌环、HDLC、帧中继、ISDN、ATM、IEEE 802.11、FDDI、PPP
1 物理层 例如线路、无线电、光纤、信鸽

简化的TCP/IP四层模型主要分为:应用层、传输层、网络层、数据链路层。

大家对照着协议和层自己看看。上一层都是建立在下一层的基础上。

IP:网络层协议;(高速公路)

TCP和UDP:传输层协议;(卡车)

HTTP:应用层协议;(货物)。HTTP(超文本传输协议)是建立在TCP协议之上的一种应用。HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。

SOCKET:套接字,TCP/IP网络的API。(港口码头/车站)Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信。

Websocket:同HTTP一样也是应用层的协议,但是它是一种双向通信协议,是建立在TCP之上的,解决了服务器与客户端全双工通信的问题,包含两部分:一部分是“握手”,一部分是“数据传输”。握手成功后,数据就直接从 TCP 通道传输,与 HTTP 无关了。

注:什么是单工、半双工、全工通信?
数据只能单向传送为单工;
数据能双向传送但不能同时双向传送称为半双工;
数据能够同时双向传送则称为全双工。

TCP/UDP区别
TCP(传输控制协议,Transmission Control Protocol):(类似打电话)
面向连接、传输可靠(保证数据正确性)、有序(保证数据顺序)、传输大量数据(流模式)、速度慢、对系统资源的要求多,程序结构较复杂,
每一条TCP连接只能是点到点的,
TCP首部开销20字节。
UDP(用户数据报协议,User Data Protocol):(类似发短信)
面向非连接 、传输不可靠(可能丢包)、无序、传输少量数据(数据报模式)、速度快,对系统资源的要求少,程序结构较简单 ,
UDP支持一对一,一对多,多对一和多对多的交互通信,
UDP的首部开销小,只有8个字节。

Socket和WebSocket区别
Socket 其实并不是一个协议。它工作在 OSI 模型会话层(第5层),是为了方便大家直接使用更底层协议(一般是 TCP 或 UDP )而存在的一个抽象层。
而 WebSocket 则不同,它是一个完整的应用层协议,包含一套标准的 API 。
WebSocket 更易用,而 Socket 更灵活。

WebSocket与HTTP的区别
相同点:
1. 都是一样基于TCP的,都是可靠性传输协议。
2. 都是应用层协议。

不同点:
1. WebSocket是双向通信协议,模拟Socket协议,可以双向发送或接受信息。HTTP是单向的。
2. WebSocket是需要握手进行建立连接的。

WebSocket在建立握手时,数据是通过HTTP传输的。但是建立之后,在真正传输时候是不需要HTTP协议的。

发表在 服务器 | 标签为 | 留下评论

centos6.8 gcc升级至4.8

为了安装swoole扩展,在cenots6.8下默认gcc版本不到最低gcc4.8要求,如果centos7就够了。

1、检查本机centos版本:
$ cat /etc/centos-release
CentOS release 6.5 (Final)

2 、导入CERN’s GPG key

rpm –import http://linuxsoft.cern.ch/cern/slc68/x86_64/RPM-GPG-KEY-cern

3、添加slc6-devtoolset yum源

wget -O /etc/yum.repos.d/slc6-devtoolset.repo http://linuxsoft.cern.ch/cern/devtoolset/slc6-devtoolset.repo

4、安装devtoolset-2

yum install devtoolset-2

5、 生效devtoolset-2

source /opt/rh/devtoolset-2/enable

可以将此命令写入.bashrc中,以免每次手动执行

echo ‘source /opt/rh/devtoolset-2/enable’ >> ~/.bashrc

6、查看gcc版本:

$ gcc -v
gcc (GCC) 4.8.2 20140120 (Red Hat 4.8.2-15)

发表在 服务器 | 标签为 | 留下评论

内网连接访问mysql时很慢

在内网无论使用PHP还是客户端去远程连接MYSQL,都要等待几秒时间,就算连接上后任何操作也是需要等待的。主要因为MYSQL默认开启了DNS的反向解析,这时候只要禁止mysql做域名解析。

[mysqld]
skip-name-resolve

加入上面语句后重启mysql即可。

发表在 服务器 | 标签为 , | 留下评论

nginx日志统计中经常使用到的命令

awk、uniq、sort、grep、cat、tail

1.awk(数据处理工具,将一行分割成多个“字段”来处理)

awk -F ‘文本切割符’‘{处理过程}’ 文件名称

如:cat /ect/passwd | awk -F ‘:’ ‘{print $1}’   #以:分割,打印第一列的数据;如果为$0表示整个文件内容

cat /etc/passwd | awk -F ”BEGIN {print “begin,goto”} {print $1″,”$7} END {print “end,end”}  #以空白符作为分割,打印begin,goto开始执行信息,打印1,7行,以end,end结束

2.uniq 命令用来过滤重复部分显示文件内容,这个命令读取输入文件,并比较相邻的行

参数:

-c  显示输出中,在每行行首加上本行在文件中出现的次数

-d  只显示重复行

-u  只显示文件中不重复的各行

-n  前n个字段与每个字段前的空白一起被忽略

+n 前n个字符被忽略,之前的字符被跳过(字符从0开始编号)

-f   n与-n相同,这里n是字段数

-s   n与+n相同,这里n是字符数

常用: uniq -c  首行显示文件中出现的次数

3.sort 排序

参数:

-u  在输出行中去除重复行

-r   默认的排序方式为升序,-r转换为降序排列

-n  默认按照字符来排序出现10在2前面,-n以数值来排序

-t   后面设定间隔符

-k  指定列数

如:sort -n -k 2 -t : test.txt  以数值排序,按照第二列以“:”间隔来排列顺序

发表在 服务器 | 标签为 | 留下评论

Nginx日志统计常用命令

IP相关统计

统计IP访问量(独立ip访问数量)

awk '{print $1}' access.log | sort -n | uniq | wc -l

查看某一时间段的IP访问量(4-5点)

grep "07/Apr/2017:0[4-5]" access.log | awk '{print $1}' | sort | uniq -c| sort -nr | wc -l

查看访问最频繁的前100个IP

awk '{print $1}' access.log | sort -n |uniq -c | sort -rn | head -n 100

查看访问100次以上的IP

awk '{print $1}' access.log | sort -n |uniq -c |awk '{if($1 >100) print $0}'|sort -rn

查询某个IP的详细访问情况,按访问频率排序

grep '127.0.01' access.log |awk '{print $7}'|sort |uniq -c |sort -rn |head -n 100

页面访问统计

查看访问最频的页面(TOP100)

awk '{print $7}' access.log | sort |uniq -c | sort -rn | head -n 100

查看访问最频的页面([排除php页面】(TOP100)

grep -v ".php"  access.log | awk '{print $7}' | sort |uniq -c | sort -rn | head -n 100

查看页面访问次数超过100次的页面

cat access.log | cut -d ' ' -f 7 | sort |uniq -c | awk '{if ($1 > 100) print $0}' | less

查看最近1000条记录,访问量最高的页面

tail -1000 access.log |awk '{print $7}'|sort|uniq -c|sort -nr|less

每秒请求量统计

统计每秒的请求数,top100的时间点(精确到秒)

awk '{print $4}' access.log |cut -c 14-21|sort|uniq -c|sort -nr|head -n 100

每分钟请求量统计

统计每分钟的请求数,top100的时间点(精确到分钟)

awk '{print $4}' access.log |cut -c 14-18|sort|uniq -c|sort -nr|head -n 100

每小时请求量统计

统计每小时的请求数,top100的时间点(精确到小时)

awk '{print $4}' access.log |cut -c 14-15|sort|uniq -c|sort -nr|head -n 100

性能分析

nginx log中最后一个字段加入$request_time

列出传输时间超过 3 秒的页面,显示前20条

cat access.log|awk '($NF > 3){print $7}'|sort -n|uniq -c|sort -nr|head -20

列出php页面请求时间超过3秒的页面,并统计其出现的次数,显示前100条

cat access.log|awk '($NF > 1 &&  $7~/\.php/){print $7}'|sort -n|uniq -c|sort -nr|head -100

蜘蛛抓取统计

统计蜘蛛抓取次数

grep 'Baiduspider' access.log |wc -l

统计蜘蛛抓取404的次数

grep 'Baiduspider' access.log |grep '404' | wc -l

TCP连接统计

查看当前TCP连接数

netstat -tan | grep "ESTABLISHED" | grep ":80" | wc -l

用tcpdump嗅探80端口的访问看看谁最高

tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F"." '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -nr
发表在 服务器 | 标签为 | 留下评论

windows如何批量修改删除文件后缀名

今天在百度云盘上下来一批视频文件名格式是*.mp4.sw,多了不想手动修改,经过研究很很方便,系统自带ren命令就能处理。

快捷键“win+r”在运行框中输入“CMD”,来打开命令窗口。

D盘下有1.mp4.sw/2.mp4.sw/3.mp4.sw三个文件,cd 路径进去目录。
批量删除文件后缀名。

输入“ren D:\* *.”,回车。

单个文件修改后缀名。

输入”ren D:\1.mp4.sw 1.mp4″命令,回车。

批量修改后缀名。

输入“ren D:\* *.mp4”命令,回车。

批量修改指定文件类型的后缀名。

输入“ren D:\*.mp4.sw *.mp4”,回车。

发表在 服务器 | 标签为 | 留下评论

nginx禁止限制某个IP地址或网段访问服务器

#屏蔽单个IP的命令是
deny 192.168.0.1
#封整个段即从192.0.0.1到192.255.255.254的命令
deny 192.0.0.0/8
#封IP段即从192.168.0.1到192.168.255.254的命令
deny 192.168.0.0/16
#封IP段即从192.168.0.1到192.168.0.254的命令是
deny 192.168.0.0/24

发表在 服务器 | 标签为 | 留下评论

phpstrom 2018.2 修改代码星号不见

安装2018.2新版本后发现在修改代码后标签栏的星号标记不见了。不知道为什么默认取消了,重新设置即可。
进入 File -> Settings -> Editor ->General-> Editor Tabs,
勾选下面选项:
Mark modified (*)

发表在 服务器 | 标签为 | 留下评论

git本地删除修改文件后从远程拉取

命令模式:

一个文件就:

git checkout origin/master netpc.com.cn.txt

全部就:

git checkout origin .

 

发表在 服务器 | 标签为 | 留下评论

CentOS安装服务器端Git

服务器端

安装git
yum –y install git

创建git用户
useradd git
passwd git

创建git项目
cd /data/git
git init –bare netpc.com.cn.git
chown git:git netpc.com.cn.git

为了安全设置git登录方式
vi /etc/passwd
git:x:502:502::/home/git:/usr/bin/git-shell

客户端

网上找个安装git for windows

加入密钥方式免密码同步。

创建密钥
ssh-keygen -t rsa -C “你的邮箱”

本地取得密钥
一般到C:\Users\Administrator\.ssh\id_rsa.pub找到.ssh目录下的id_rsa.pub文件,复制其中内容到服务器端。

将密钥加入服务器列表
服务器创建了git用户,在home就有该目录了,没有对应文件就创建,复制秘钥的内容到文件里。

vi /home/git/.ssh/authorized_keys

复制后保存退出。

或者将id_rsa.pub传到 git服务器,使用命令复制
cat id_rsa.pub >> authorized_keys (注意是>>,不是>,>会覆盖旧的数据

设置ssh文件夹为700权限,authorized_keys为 600权限

本地git pull试试看

 

发表在 服务器 | 标签为 | 留下评论