Hexo


  • 首页

  • 归档

C语言中‘左值’与‘右值’理解

发表于 2018-11-05 | 分类于 C语言

前言

在C语言学习过程中,大家或许听到过左值和右值的概念,甚至在调试程序时编译器也会给出”left operand must be l-value” 即左操作数必须为左值!今天我们将为大家详细解释这两个词,以及两者的区别!

简单而言,在赋值运算符“=”左边的就是左值,在赋值运算符“=”后边的就是右值,感觉像是废话,但非常好理解。但更多时候,我们是为了学习和理解不同情况下左值和右值的区别,下面来举例依次说明,着层深入,来让大家解渴!

1.变量做左值和右值的区别:

如x = 2;
这里x为整形变量,这里作为左值,代表的是一块内存单元,表示的是地址。

再如x = y;
现在看变量做右值情况,y做右值,这里呢就不在表示地址,而是代表该内存单元上的值!然后赋给x。

2.常量做左值和右值的区别:

继续x = 2;
这里2做右值,2是一个常量,没有任何疑问。

而如果1 = 2;
这里我们看左值,是1是常量,这里就会有问题了,编译会报错!因为常量不可被修改、不可以被赋值!所以大家可能会听过或见过“可修改/不可修改的左值”。

3.数组名做左值和右值的区别:

例如有字符数组char a[100];

当a做右值时候,我们可以把它赋给char *类型的指针,用来指向这个数组,这种情况下数组名做右值代表该数组首元素的首地址,是常量,是完全可以的。

而数组名无论右值和还是左值,都代表是地址,是常量,因此它不可以做左值,因为常量不可被修改!所以不少同学试图再定义数组之后再试图对数组赋字符串都是错误的!

4.字符串常量做右值

字符串常量想必大家都很清楚,是用双引号括起来的字符串,既然也是常量,也理所当然不可以做左值,但做右值呢?

答案是,会表示该字符串在内存中存储位置的首地址。就是char * p = “dotcpp.com”用法的原因。

以上四种,希望对大家深入理解左值和右值有帮助!大家有任何问题,请随时留言讨论!

转自:C语言网, 版权所有丨如未注明,均为原创丨本网站采用BY-NC-SA协议进行授权,转载请注明

C语言中‘指针’与‘指针变量’

发表于 2018-11-04 | 分类于 C语言

比较严格的说法是这样的:

系统为每一个内存单元分配一个地址值,C/C++把这个地址值称为“指针”。如有int i=5,存放变量i的内存单元的编号(地址)&i被称为指针。

“指针变量”则是存放前述“地址值”的变量,也可以表述为,“指针变量”是存放变量所占内存空间“首地址”的变量(因为一个变量通常要占用连续的多个字节空间)。比如在int i=5后有一句int *p=&i,就把i的指针&i赋给了int *型指针变量p,也就是说p中存入着&i。所以说指针变量是存放指针的变量。

有一个事实值得注意,那就是有不少资料和教科书并没有如上区分,而是认为“指针是指针变量的简称”,如对int *p=&i的解释是:声明一个int *型指针p,并用变量i的地址初始化。而严格说应该是声明一个int *型指针变量p才对。所以有时看书要根据上下文理解实质,而不能过于拘泥于文字表述。

转自:CSDN

Hello World

发表于 2018-05-27

Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.

Quick Start

Create a new post

1
$ hexo new "My New Post"

More info: Writing

Run server

1
$ hexo server

More info: Server

Generate static files

1
$ hexo generate

More info: Generating

Deploy to remote sites

1
$ hexo deploy

More info: Deployment

通过Anaconda管理多版本Python

发表于 2018-01-27 | 分类于 Python

Anaconda简介

Anaconda是一个Python科学计算环境,支持 Linux, Mac, Windows系统。它可以让用户非常方便地进行包管理与环境管理,而且可以解决多版本python并存、切换以及各种第三方包安装问题。Anaconda利用图形化界面/命令行conda来进行包管理与环境管理,并且已经包含了Python和相关的配套工具。当然还很方便的一键安装好Jupyter Notebook,Console,Spyder等常用模块。

Anaconda安装

直接到官网选择合适的版本进行下载、安装即可~

Python多版本之间切换

很多设备自身安装的Python版本为2.X,但是Python3.X逐渐成为主流版本,为了兼容老项目又要跟随潮流,所以需要经常切换Python版本。

幸运的是,有Anaconda这样的神器,使得这个过程变得十分轻松。

通过命令行进行创建与切换

安装Python3.6

因为我所使用的Mac自身自带有Python2.7版本,所以我创建一个3.6版本的。

打开终端,输入:

1
conda create --name python36 python=3.6

目的是创建一个新的Python 3.6的环境。然后,终端会请求安装新的包到目录/Applications/anaconda/envs/python36下,按y同意请求(Anaconda之前选择装在了应用程序下,其实Python 3的包就单独装在.../envs/下)

激活Python3.6

激活新建的Python 3.6环境,终端输入:

1
source activate python36

激活后,会发现terminal输入的地方多了python36的字样, 再输入

1
python --version

可以看到系统已经成功切换到了Python 3.6的环境。

退出当前版本

如果要退出Python 3.6环境,输入:

1
source deactivate python36

可以看到系统退回Python 2.7环境。

通过可视化界面进行操作

打开安装好的Anaconda工具

很清晰的操作界面。通过可视化界面也可以很轻松的创建管理Python版本。

Python关键字

发表于 2018-01-23 | 分类于 基础 , 关键字

Python2.7环境中,关键字共有31个。

可以通过

1
2
>>> import keyword
>>> print keyword.kwlist

进行查看。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
and
as
assert
break
class
continue
def
del
elif
else
except
exec
finally
for
from
global
if
import
in
is
lambda
not
or
pass
print
raise
return
try
while
with
yield

需要注意,在变量命名的时候 防止使用到关键字!

Linux(CentOS)中运行Python脚本

发表于 2017-12-12 | 分类于 Linux

Python爬虫脚本完成之后,是需要长期/定时执行 爬取相关的内容。所以,我们通常将脚本上传到服务器进行执行(本文在CentOS环境下测试)。

  • Python脚本如何在服务器上运行?

    1.确保服务器安装有所需要的Python版本和相关依赖

    2.直接在终端中输入python script.py进行执行。

    1
    2
    3
    4
    5
    6
    7
    [root@centos ~]# python script.py
    Script is running!
    Script is running!
    Script is running!
    Script is running!
    Script is running!
    ...

    这种方式运行的时候,我们的shell不能关闭,否则会中断任务的进行。

  • Python脚本在服务器上后台运行?

    直接用unhup命令来让程序在后台运行,命令格式如下:

    1
    nohup python 文件名.py (> ***.log )&

    在这个命令中,python指定我们要执行的文件为python文件,后面的文件名.py即是我们要执行的文件。括号内容表示可以将平时输出到控制台中的内容重定向到*.log这个文件中,这个是可选的,如果没有这个,则会默认输出到nohup.out文件中。括号后面你的&表示后台运行。

    1
    2
    [root@centos ~]# nohup python -u main.py > out.log 2>&1 &
    [1] 25839 //返回执行PID

    此时,我们的script.py脚本已经在后台执行 而且输出的信息在 out.log文件中。

    现在当我们直接关闭shell窗口,再连接上服务器,查看Python的进程,发现进程还在

  • 如何查看脚本是否在后台执行?

    1.通过ps -e命令可以查看所有后台运行的进程

    1
    2
    3
    4
    5
    [root@centos ~]# ps -e
    PID TTY TIME CMD
    1 ? 00:00:00 init
    ...
    25839 pts/1 00:00:00 python //可以看到我们的程序正在运行

    2.通过jobs命令可以查看后台运行的程序(重新链接到终端后,该方法无效,请使用ps命令)

    1
    2
    [root@centos ~]# jobs
    [1]+ Running nohup python -u main.py > out.log 2>&1 &
  • 如何停止脚本运行?

    • 前台程序:使用Ctrl+c
    • 后台程序:通过kill命令 kill %mm(mm可以通过jobs获得)或者kill mm(mm可以通过ps获取pid)

常见命令:

  • & 加在命令的最后,可以把这个命令放到后台执行
  • ctrl + z 将一个正在前台执行的命令放到后台,并且处于暂停状态。
  • jobs 查看当前有多少在后台运行的命令,jobs -l选项可显示所有任务的PID,jobs的状态可以是running, stopped, Terminated。
  • fg 将后台中的命令调至前台继续运行。如果后台中有多个命令,可以用fg %jobnumber(是命令编号,不是进程号。通过jobs查看)将选中的命令调出。
  • bg 将一个在后台暂停的命令,变成在后台继续执行。如果后台中有多个命令,可以用bg %jobnumber将选中的命令调出

在requests库中使用代理

发表于 2017-12-07 | 分类于 Python

前言

一直以来都想学点Python相关的内容,最近有需要爬取一些网页,开始Python的学习之旅。

对于有一定其他语言基础的人来说,Python上手十分简单。基础的语法,基本的数据结构,常用函数等等这些入门知识在一两天内就可以学完。

到了网络方面,有了强大的第三方 requests库的支持,对于网络的访问,减少了我们很大的学习量,附带官网地址 ,中文!很友善!!!

学会使用这个网络库就可以自己动手去练习爬取一些简单的网页了。

在练习过程中,我遇到了下面的问题:

遇到的问题以及解决思路

问题:如何爬取国内无法正常访问的的网页?

大家都知道,许多很多语言/IDE/第三方lib都是英文的,而且网站一般都架设在国外,访问起来比较慢或者有些根本就无法访问。

解决办法:

requests高级应用中可以让我们设置代理来对网站进行访问。使用代理的好处:1,可以突破部分网站对于IP访问限制的反爬虫机制。2.使用海外代理可以访问国内访问速度慢或者无法访问的网站。

  1. 代理IP从什么地方获取?

    常见的免费的代理IP网站有:66ip,xicidaili,data5u,proxydb。 优点是数量多,取之不尽,免费,缺点是质量差,需要自己手动测试ip是否可用(自己建立一个IP代理池)

    收费的代理可以自己找一些知名代理商购买。优点是省心,可用性高,缺点是花钱(贫穷提高了我的技术)

  2. 自己搭建代理服务器

    之前因需要查找资料,自己有购买过一台vps搭建ss 科学上网。但是刚开始一脸懵逼,并不知道如何才能在requests库中使用自己的vps进行代理上网。

    经过自己对官方文档的阅读(requests-代理)以及知乎各位老师的帮助,逐渐搞清楚了一些概念性的东西。

    ss那个东西好像传输层并不是标准的代理接口,它是由本地客户端实现的socks代理接口,然后封装成自己的协议传输至服务端,服务端再解析回socks的。所以无法做到本地不启动客户端,因为ss的协议属于私有协议,常见的库当然无法支持直接使用,必须要有它自己的客户端转换成socks才行。

    作者:旅人链接:https://www.zhihu.com/question/263712538/answer/272203940来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    逐渐明白在Python中使用代理和自己使用ss客户端登录是不一样的。

    再通过资料查询,看到这么一片文章:CentOS7 配置SOCKS5代理服务 参考此文章最终完成在vps搭建代理服务器。

在VPS上搭建代理服务器

写在前面

本文内容将详细说明如何向自己的服务器添加代理功能(SOCKS5)。

环境

服务器主机 :DigitalOcean 512 MB Memory / 20 GB Disk
服务器操作系统:CentOS 7.2 64位
客户端操作系统:Mac(客户端无所谓,只是用来登录远程主机而已)

关于SOCKS5

这里只做简单介绍。
SOCKS5 是一个代理协议,它在使用TCP/IP协议通讯的前端机器和服务器机器之间扮演一个中介角色,使得内部网中的前端机器变得能够访问Internet网中的服务器,或者使通讯更加安全。

正常情况下客户端和服务端的通信:客户端<–>服务端

使用了SOCKS5代理后的通讯:客户端<–>代理服务器<–>服务端

我接触这个是因为,我的客户端没有办法直接访问一部分服务端(被墙了),但是我可以访问代理服务器,而且代理服务器可以访问我需要的服务端。
所以我尝试通过代理服务器来访问需要的服务端(翻墙)。

主机安装SS5

  1. 通过yum安装ss5 依赖包:

    install gcc openldap-devel pam-devel openssl-devel```
    1
    2
    3
    4
    5
    6
    7
    8

    2. 安装成功之后,**安装ss5**:

    1. 首先下载ss5

    ```shell
    # 这个是一个日本大学的sourceforge镜像
    wget http://jaist.dl.sourceforge.net/project/ss5/ss5/3.8.9-8/ss5-3.8.9-8.tar.gz

    下载

    1. 然后解压压缩包:

      1
      2
      3
      # 解压,"ss5-3.8.9-8.tar.gz"是刚才下载的压缩包
      # -v过程显示文件 -z解压/压缩gzip -x解压操作 -f 后面加要操作的文件
      tar -vzx -f ss5-3.8.9-8.tar.gz

      会解压出来很多文件,进入解压目录

      1
      cd ss5-3.8.9/

      进入目录

    2. 运行’./configure’

      1
      2
      3
      4
      5
      # configure是一个shell脚本
      # 主要的作用是对即将安装的程序进行配置,
      # 检查当前的环境是否满足要安装程序的依赖关系.
      # 如果系统环境合适,就会生成makefile,否则会报错。
      ./configure

      运行config文件

      可以看到check通过了生成了makefile文件~

      这时,我们ls一下就会看到文件(红色方框):

      makefile

    3. 接下来我们按照makefile中的规则编译ss5。

      1
      2
      3
      4
      5
      # make是一个命令工具
      # 解释 Makefile 中的规则。
      # Makefile文件中描述了整个工程所有文件的编译顺序、编译规则。
      # 实际上make是执行Makefile中的第一条命令
      make
    4. 接下来开始安装刚刚编译的程序:

      1
      2
      3
      4
      # 执行Makefile中的install
      # 这些都可以在Makefile文件中看到
      # 可以使用vim Makefile查看文件
      make install

      这样安装就完成了。

ss5基本配置

这时我们启动ss5

1
service ss5 start

可能会出现如下情况:

权限问题

原因权限不足,我们修改一下权限:

1
2
# a+x 给所有人加上可执行权限(所有者,所属组,其他)
chmod a+x /etc/init.d/ss5

再启动ss5,就没有问题了~

重新启动

目前为止只是安装上了ss5,也可以正常运行服务,但实际上代理服务还是用不了,
需要配置一下文件。

首先我们打开ss5的配置文件。

1
vim /etc/opt/ss5/ss5.conf

auth

permit

把这两处的注释打开(就是auth,permit这两行)

保存并重启ss5(service ss5 restart)

这样一个最基本的代理功能就可以使用了

但是有时我们想设置用户,只允许他们使用代理。

这样,我们就需要将上面两处改为

1
auth 0.0.0.0/0 – u
1
permit u 0.0.0.0/0 – 0.0.0.0/0 – – – – -

就是将其中的一个’-‘用’u’代替。

然后打开/etc/opt/ss5/ss5.passwd

1
vim /etc/opt/ss5/ss5.passwd

在第一行加入你允许的用户名和密码,例如

设置用户名密码

别忘了 重启ss5 (service ss5 restart)

测试代理是否成功

首先:

使用Python写一个简单的网页读取程序:

demo

关于proxies的规则,参考requests官方文档。

get()函数加入proxies参数之前

fail

添加代理之后

成功过墙读取到目标网页。

以上的命令汇总

1
2
3
4
5
6
7
8
9
10
11
12
yum install gcc openldap-devel pam-devel openssl-devel
wget http://jaist.dl.sourceforge.net/project/ss5/ss5/3.8.9-8/ss5-3.8.9-8.tar.gz
tar -vzx -f ss5-3.8.9-8.tar.gz
cd ss5-3.8.9/
./configure
make
make install
chmod a+x /etc/init.d/ss5
service ss5 start
vim /etc/opt/ss5/ss5.conf
# 修改配置文件
service ss5 restart

后续更新

上次创建代理成功之后,一直都使用的非常嗨皮~ 但是,由于某次vps因故重启后,ss5竟然不工作了。

因为之前是将ss5的启动加入到自启动列表的,所以ss5应该是会自启动的,但是使用的时候,一直代理异常。于是:

  • ssh登录到vps 手动启动一下ss5服务

    1
    service ss5 start

    系统提示 ok。 但是测试代理 还是链接异常

  • 通过命令查看当前启动的服务

1
service --status-all

返回:

1
2
3
4
5
6
7
8
9
10
11
● ss5.service - SYSV: This script takes care of starting and stopping ss5
Loaded: loaded (/etc/rc.d/init.d/ss5; bad; vendor preset: disabled)
Active: active (exited) since Sat 2017-12-23 08:34:53 UTC; 4min 2s ago
Docs: man:systemd-sysv-generator(8)
Process: 14104 ExecStart=/etc/rc.d/init.d/ss5 start (code=exited, status=0/SUCCESS)

Dec 23 08:34:53 localname systemd[1]: Starting SYSV: This script takes care of starting and stopping ss5...
Dec 23 08:34:53 localname ss5[14104]: [67B blob data]
Dec 23 08:34:53 localname ss5[14104]: Can't unlink pid file /var/run/ss5/ss5.pid
Dec 23 08:34:53 localname systemd[1]: Started SYSV: This script takes care of starting and stopping ss5.
Dec 23 08:34:53 localname ss5[14104]: done

其中一句:

1
Can't unlink pid file /var/run/ss5/ss5.pid

根据此句继续查找解决方案

  • 创建 /var/run/ss5 目录后再启动 ss5

    每次重启电脑后会将该文件夹删除。so,重建该文件夹后重新启动ss5 就ok了~

    ​

Python中序列学习笔记

发表于 2017-12-06 | 分类于 Python

1.序列

(1) 序列的标准类型运算

<、>、<=、>=、==、!= 值比较

is、is not 对象身份比较

and、or、not 逻辑运算

(2) 通用序列类型操作

seq[start: end] 切片操作

* 重复组合序列数据

+ 连接 2 个序列

in、not in 判断元素是否存在序列中

(3) 序列常用函数

函数 描述
list(iter) 将可迭代对象iter转换成列表
tuple(iter) 将可迭代对象iter转换成元组
str(obj) 将对象obj转换成字符串表示
len(sequence) 返回sequence的长度,为整型类型
sorted(iter, key, reverse) 返回可迭代对象iter排序后的列表,key用来指定排序的规则,reverse用来指定顺序还是逆序排列
reversed(sequence) 返回序列sequence逆序排列后的迭代器
sum(iter, start) 将iter中的数值和start参数的值相加,返回float类型数值
max(iter) 返回可迭代对象iter中的最大值
min(iter) 返回可迭代对象iter中的最小值
enumerate(iter[, start]) 返回一个enumerate对象,可生成一个迭代器,该迭代器的元素是由参数iter元素的索引和值组成的元组
zip(iter1 [,iter2 […]]) 返回一个zip对象,可生成一个迭代器,该迭代器的第n个元素是每个可迭代对象的第n个元素组成的元组

2.字符串

字符串常用方法

方法 描述
s.capitalize() 返回字符串s首字母大写其余小写的形式
s.lower() 返回字符串s的小写形式
s.upper() 返回字符串s的大写形式
s.title() 返回字符串s的标题形式即单词首字母大写形式
s.format(args, *kwargs) 格式化字符串操作
s.count(sub[, start[, end]]) 返回指定字符在[指定位置的]字符串s中出现的次数
s.find(sub[, start[, end]]) 返回指定字符在[指定位置的]字符串s中出现的索引号,找不到则返回-1
s.index(sub[, start[, end]]) 与 find()类似,不同的是如果找不到会引发ValueError异常
s.replace(old, new[, count]) 把字符串s中的old(旧字符串)替换成new(新字符串)。如果指定第三个参数count,则仅仅替换前count次出现的子串
s.lstrip([chars]) 移除字符串s左边的指定字符(默认为空格),返回移除字符串s左边指定字符后生成的新字符串
s.rstrip([chars]) 移除字符串s末尾的指定字符(默认为空格),返回移除字符串s末尾指定字符后生成的新字符串
s.strip([chars]) 移除字符串s头尾指定的字符(默认为空格),返回移除字符串s头尾指定字符后生成的新字符串
s.join(iterable) 用指定的字符串s连接元素为字符串的可迭代对象
s.split(sep=None, maxsplit=-1) 以指定的字符作为分隔符(默认为空格)分割字符串s,maxsplit指分割次数(默认为不限制次数)
s.endswith(suffix[, start[, end]]) 判断字符串s[的指定位置]是否以后缀suffix结尾
s.startswith(prefix[, start[, end]]) 判断字符串s[的指定位置]是否以前缀prefix开头

3.列表

列表常用方法

方法 描述
l.append(obj) 在列表l末尾添加新的对象
l.count(obj) 统计某个元素在列表l中出现的次数
l.extend(seq) 在列表l末尾一次性追加另一个序列seq中的多个值(用新列表扩展原来的列表)
l.index(obj) 从列表l中找出某个值第一个匹配项的索引位置,索引从0开始
l.insert(index, obj) 将对象obj插入列表l中索引为index的元素前
l.pop(index) 移除列表l中索引为index的一个元素(默认为最后一个元素),并且返回该元素的值
l.remove(obj) 移除列表l中某个值的第一个匹配项
l.reverse() 将列表l中的元素反转
l.sort(key=None, reverse=False) 对原列表l进行排序,可通过参数key指定排序依据,通过参数reverse指定顺序(默认方式)或逆序排列

4.元组

元组常用函数

函数 描述
len(t) 计算元组t的元素个数
max(t) 返回元组t中元素的最大值
min(t) 返回元组t中元素的最小值
tuple(seq) 将序列seq转换为元组

常见的User Agent设置

发表于 2017-12-03 | 分类于 Python

User Agent中文名为用户代理,简称 UA。

它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等信息。

User Agent各字段的解释

1
2
3
Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.29 Safari/537.36
//Safari浏览器的UA:Mozilla/5.0 (平台;加密类型;操作系统或CPU;语言)AppleWebKit/AppleWebKit版本号(KHTML, like Gecko) Safari/Safari 版本号
//Chrome浏览器的UA:Mozilla/5.0 (平台;加密类型;操作系统或CPU;语言)AppleWebKit/AppleWebKit版本号 (KHTML, like Gecko) Chrome/ Chrome 版本号 Safari/Safari 版本号
  • Mozilla/5.0 网景公司浏览器的标识,由于互联网初期浏览器市场主要被网景公司占领,很多服务器被设置成仅响应含有标志为Mozilla的浏览器的请求,因此,新款的浏览器为了打入市场,不得不加上这个字段。
  • (Windows NT 6.3; WOW64)
    • Windows NT 6.3 Windows 8.1的标识符
    • WOW64 32位的Windows系统运行在64位的处理器上
  • AppleWebKit/537.36 苹果公司开发的浏览器引擎,常见其他的有:Gecko(Mozilla Firefox 等使用)和Trident(也称MSHTML,IE 使用)
  • KHTML 是Linux平台中Konqueror浏览器的呈现引擎KHTML
  • Geckeo 呈现引擎
  • like Gecko 表示其行为与Gecko浏览器引擎类似

常见的User Agent整理

  • Android

    • 1
      Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19
    • 1
      Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19
    • 1
      Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19
  • Firefox

    • 1
      Mozilla/5.0 (Windows NT 6.2; WOW64; rv:21.0) Gecko/20100101 Firefox/21.0
    • 1
      Mozilla/5.0 (Android; Mobile; rv:14.0) Gecko/14.0 Firefox/14.0
  • Google Chrome

    • 1
      Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36
    • 1
      Mozilla/5.0 (Linux; Android 4.0.4; Galaxy Nexus Build/IMM76B) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.133 Mobile Safari/535.19
  • iOS

    • 1
      Mozilla/5.0 (iPad; CPU OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3
    • 1
      Mozilla/5.0 (iPod; U; CPU like Mac OS X; en) AppleWebKit/420.1 (KHTML, like Gecko) Version/3.0 Mobile/3A101a Safari/419.3

OSI参考模型(七层)

发表于 2017-11-30 | 分类于 计算机网络

OSI参考模型–概念

  • 应用层

    所有能产生网络流量的程序

  • 表示层

    在传输之前是否进行加密或压缩处理,二进制、ASCII

  • 会话层

    查木马 netstat-n

  • 传输层

    可靠传输流量控制不可靠传输

  • 网络层

    负责选择最佳路径规划IP地址

  • 数据链路层

    帧的开始和结束透明传输差错校验

  • 物理层

    接口标准、电气标准,如何在物理链路上传输更快的速度

OSI参考模型–图例

OSI参考模型

OSI参考模型

OSI参考模型

资料来源:
1.计算机网络 UP主:zuilive
2.图源:钛白Logic

123

HaoZ

This is a simple website, I will try record something that I studying!

28 日志
14 分类
43 标签
RSS
© 2018 HaoZ
由 Hexo 强力驱动
|
主题 — NexT.Muse v5.1.4