吞吐量:进出的流量
配额:分配给你的固定额度
网络抖动:网络质量不稳定 一会儿好一会儿坏
TCP差错控制体现的是可靠性
三次握手四次断开体现的是面向连接
问题:为什么是三次握手,却是四次断开
带宽:网络的带宽(对于服务器很重要)
网络是非常重要的
内核参数网络相关的调优:
阿里对内核调优的参数:(主要针对tcp三次握手和四次断开的调优 也有arp协议响应的调优)
我们对内核参数的调优:(路由转发和 tcp timewait的复用功能和不使用交换分区)
表示尽可能使用物理内存 尽量不使用交换分区
arp协议的调优参数:
怎么知道这台服务器开放了那些窗口?netstat -aputln
Send-Q:也可以理解为等待着重传的字节数有多少
怎么知道对方的服务器开放了哪些窗口?
扫描 scan 嗅探 渗透
一个端口一个端口去ping 看看能不能ping通
扫描命令:
netstat:查看本机开放了哪些端口
yum install net-tools -y
nc:扫描嗅探其他的机器开放了哪些端口
yum install nc -y
选项:-z 只扫描监听的端口 不发送任何数据
代表192.168.0.1的80端口一打开
-w:指定超时时间
扫描8080端口 设定超时时间为1s
也可以查看$?去查看 若是没有连接成功 则是1
nmap:探测一个机器或者整个局域网里机器开放了哪些端口 (nc升级版)
对自动把常用端口都扫描一遍(只扫描常见知名端口)
(如果有防火墙策略有些端口还不一定能够扫描的到)
yum install nmap -y
扫描这个网段的所有端口
扫描这个IP机器的所有端口(只有open才代表是打开的)
iftop:查看你的机器和那台机器之间的流量
nethogs:查看某个进程消耗了多少流量 知道哪些进程和外面进行通信
华为很多在东莞
lsof -p 进程号:查看该进程打开的文件加载的库 依赖关系
lsof -i 端口号:查看该端口被哪个进程占用了
top命令查看进程在哪个cpu里面使用 先按f 再按p
Linux分析工具:(大部分都是用python写的)
dstat:查看网络流量(可以看到网速怎么样)
dstat -am -N ens33,ens37 带宽(-am 看内存等 -N是指定网卡)
yum install dstat -y
ctrl +c停止
流量 B是代表多少字节 单位还有M K
glances:比top好很多 按q退出 类似于window里面的资源监视器
tcpdump:字符界面的抓包工具(yum install tcpdump -y)
tcpdump是一个Linux里的抓包工具(crtl+c 退出)
-i :指定从哪个接口进来
-nn:以数字的形式显示
-w 文件路径:将抓到的包存到文件里面
当有多个条件的时候用and连接
tcpdump -i ens33 -p tcp and src host 192.168.2.112 and dst port 80
ip地址:
src host
dst host
host 不区分源IP或者目的ip
端口:
src port
dst port
port
协议
arp
icmp
tcp
udp
抓arp协议的包
host代表主机
抓包工具:字符界面的抓包工具
图形界面的抓包工具:科来
wireshark:linux和windows里的图形化的抓包工具
如何知道用户访问过来了?
- 日志
- netstat
- 抓包:tcpdump (抓包目的端口 和 协议)(dump 导出,转储)
超文本传输协议HTTP:
http是什么?做什么用的?
http:超文本传输协议(hyper text transfer protocol)
作用:在网络上传输网页
http协议就是在浏览器和web服务器之间使用,用来传输网页
所有的浏览器都懂HTTP协议
爬虫模块:python,Java里的都能读懂http协议
所有的web服务器:nginx,tomcat,IIS,python web,go web, java web 都能读懂HTTP协议
html是我们编写网页的语言
浏览器可以读懂html语言,将拿到的index.html文件在浏览器里渲染(呈现,展示,显示)
site:站点(一个网站就是一个站点)
https是http的升级版
什么是URL?
什么是超文本传输协议HTTP?
http也有请求包和响应包
报文 segment:封装了数据的数据(也可以理解成一种容器)
段:传输层的数据格式
http的工作原理:
(7,8调换一下)
http两种数据类型格式:
- 请求包(request)
user-agent:用户代理:就是帮助用户去访问网页的代理工具(其实就是我们的浏览器)
- 响应包(response)
Headers:封装的头部信息
7 8应该调换一下位置 最后才四次挥手
tcp:面向连接
三次握手完成就建立链接了
连接:长连接:长时间连接(保持一段时间,然后再进行四次断开)
如nginx的65秒
短连接:短时间连接(事情完成就进行四次断开)(频繁的连接断开会降低效率)
http协议版本:
0.9是比较成熟比较早的版本了(只支持短连接 不支持长连接)
主流版本1.1 (支持长连接,传输的数据是文本格式)
比较新的是2.0 (速度更加快,数据格式是二进制,支持多路复用 可以理解为一个连接处理多个请求 可以提升效率)
HTTP连接方式(传输层的连接 tcp建立的连接):
持久性连接(长连接):1.1 和 2.0版本
非持久性连接(短链接):0.9 和 1.0 版本
HTTP的无状态性:是web服务器端的nginx不知道你的请求是第一次来请求还是第2次,第3次,不区分新的请求还是旧的请求
有状态:服务器手机了客户端的数据,记录了它的信息,通过这些信息可以判断你是老用户还是新用户
session和cookie技术:可以保留用户的信息
session相当于人脸识别系统(用户的信息保存在服务器端 放在数据库或者内存里的一个数据结构里面)
cookie相当于会员卡(让浏览器保存用户信息 信息保存到客户端 放到浏览器的cookie cookie就相当于存放数据的地方)(也就是在请求报文里面加入一个字段)
HTTP报文结构:
请求报文:即从客户端(浏览器)向web服务器发送的请求报文,报文的所有字段都是ASCII码
请求报文里的方法:都是客户端想获取服务器的资源,用来告诉服务器的方法
GET和POST方法的区别?
GET:在URL里可以看到,携带的明文数据 同时携带的信息量有限不能很多
POST:不在URL里显示,是通过表单传输,可以携带更大的信息量
首部字段:就是请求报文的头部封装里需要封装的内容,是可以自己调整的,可增加也可以减少(是可以变化的 如cookie就是可选的首部字段)(首部字段可以理解为携带的信息)
Connection:keep-alive表示长连接有效 closed表示连接已经断开
Host:服务器的IP或者域名
User-Agent:表示使用的什么浏览器
Accept-Language:支持的语言
Accept-Encoding:是否支持压缩和解压缩(提高网络传输的效率)
Accept:表示浏览器可以接收哪些类型的文件
实体主体部分就是放置我们需要的东西(请求报文里一般比较少甚至于没有)
响应报文:即从web服务器到客户机(浏览器)的应答,报文的所有字段都是ASCII码
http中间传输的数据为明文 而https传输的数据是加密的
状态码是服务器里面的操作
常见的状态码:
Nginx版本一般会隐藏,防止有人知道版本查找漏洞,故意攻击
主要记server和状态码
状态码:
304只是单单刷新了一下,页面并没有任何改变,告诉浏览器跟之前的缓存相同(直接用缓存 不用再发数据了)
怎么判断是否被修改呢?
请求报文里面有(是否被修改)
响应报文里面有(上一次修改的时间)
200:是服务器重发的数据(是最新的数据)
403:服务器没有权利访问这个网页(文件的权限问题)
404:网页找不到
405:方法不被允许
cookie字段可以存在响应报文 也可存在请求报文
go语言外包服务器的代码
handler:处理函数 main函数也就是主函数
安装go语言函数:yum install go -y
查看go语言环境的版本
go build server.go :用go语言将server.go编译成一个可执行二进制文件server
./server &:后台执行二进制文件
服务器的形式就是url后面是什么就显示什么