遇见sharon ’ 的文章存档

TCP 的那些事儿

作者:陈皓

来源: 酷 壳 – CoolShell.cn 

—————————————————

(上)

TCP是一个巨复杂的协议,因为他要解决很多问题,而这些问题又带出了很多子问题和阴暗面。所以学习TCP本身是个比较痛苦的过程,但对于学习的过程却能让人有很多收获。关于TCP这个协议的细节,我还是推荐你去看W.Richard Stevens的《TCP/IP 详解 卷1:协议》(当然,你也可以去读一下RFC793以及后面N多的RFC)。另外,本文我会使用英文术语,这样方便你通过这些英文关键词来查找相关的技术文档。

tin-can-phone

之所以想写这篇文章,目的有三个,

  • 一个是想锻炼一下自己是否可以用简单的篇幅把这么复杂的TCP协议描清楚的能力。
  • 另一个是觉得现在的好多程序员基本上不会认认真真地读本书,喜欢快餐文化,所以,希望这篇快餐文章可以让你对TCP这个古典技术有所了解,并能体会到软件设计中的种种难处。并且你可以从中有一些软件设计上的收获。
  • 最重要的希望这些基础知识可以让你搞清很多以前一些似是而非的东西,并且你能意识到基础的重要。

所以,本文不会面面俱到,只是对TCP协议、算法和原理的科普。
阅读全文

你深爱的操作系统其实很烂

1.Windows

嗯,你用Windows,很好。这说明你会用电脑。感到非常自豪,不是吗?大家猜一猜,谁是个大孩子了?谁刚学会用facebook了?是你。没错,就是你!

那么你用电脑都干些什么呢?把所有的时间都花在抱怨为什么自从你下载安装了Spammy Smiley Toolbar 9000 (TM)(注:应该是作者杜撰的一种垃圾邮件扩展工具栏) 后所有程序都不工作了。这不是你的不对,都是别人的不对。你只不过是想把全世界垃圾邮件制造者开发的工具栏都装上,可这个残酷的世界却不能如你所愿,可怜的家伙。

什么样的人用Windows:除了Windows不会别的,因为他们既买不起苹果电脑,又笨得学不会Linux。

Windows用户眼里的自己

03
阅读全文

zabbix企业应用之报表功能

对于运维来说,监控是一个重要的工作,如果做好了监控可以解决以下问题:

1、做了硬件监控,如果服务器出现硬件问题可以提前知晓,提前安排好解决方案,避免突然出现问题造成损失;

2、做了系统与服务的监控,如果系统资源与服务出现问题,可以及时知晓并解决,同时可以根据周期内监控数据,做好调优;

如果仅完成以上事情的话,只是对运维本身工作有所帮忙,如何对其他部门做支持,以及让公司领导看出运维团队的重要性,就需要多下一份功夫,毕竟如果出现问题,就是运维工作不到位,如果不出问题,是运维应该做的。

为了提供运维团队对其他部门的支持,以及为运维争取话语权,我除了对以上2个工作更好、快速的完成外,还对于监控数据充分利用起来,通过监控数据实现报表功能,实现以下工作:
阅读全文

一次Linux系统被攻击的分析过程

IT行业发展到现在,安全问题已经变得至关重要,从最近的“棱镜门”事件中,折射出了很多安全问题,信息安全问题已变得刻不容缓,而做为运维人员,就必须了解一些安全运维准则,同时,要保护自己所负责的业务,首先要站在攻击者的角度思考问题,修补任何潜在的威胁和漏洞。

 

一次Linux被入侵后的分析

下面通过一个案例介绍下当一个服务器被rootkit入侵后的处理思路和处理过程,rootkit

攻击是Linux系统下最常见的攻击手段和攻击方式。
阅读全文

10个免费的顶级跨浏览器测试工具

1. Browsera
Browsera 可以测试和报告在您的网站上的跨浏览器布局的差异和脚本错误。
Browsera不同于其他跨浏览器测试服务。其他服务,如Litmus,Browsershots,BrowserLab,以及 SuperPreview,它们仅仅截取每一个特定的页面,你必须具体再分析才行。

b1

2. BrowserStack
BrowserStack提供实时的,基于Web的浏览器测试的能力。
可以即时访问每个桌面和移动浏览器(目前超过300个),具有在内部服务器进行本地测试的能力,并且提供一个安全的设置。
a2

阅读全文

Hadoop科普文—常见的45个问题解答

1.Hadoop集群可以运行的3个模式?

  1. 单机(本地)模式
  2. 伪分布式模式
  3. 全分布式模式

2.  单机(本地)模式中的注意点?

在单机模式(standalone)中不会存在守护进程,所有东西都运行在一个JVM上。这里同样没有DFS,使用的是本地文件系统。单机模式适用于开发过程中运行MapReduce程序,这也是最少使用的一个模式。
阅读全文

getsockopt的TCP层实现剖析

应用层

 

NAME

getsockopt – get options on sockets

SYNOPSIS

#include <sys/types.h>

#include <sys/socket.h>

int getsockopt (int s, int level, int optname, void *optval, socklen_t *optlen);

 

调用关系

阅读全文

流量劫持 —— 浮层登录框的隐患

传统的登录框

在之前的文章流量劫持危害详细讲解了 HTTP 的高危性,以至于重要的操作都使用 HTTPS 协议,来保障流量在途中的安全。

traditional-login

 

这是最经典的登录模式。尽管主页面并没有开启 HTTPS,但登录时会跳转到一个安全页面来进行,所以整个过程仍是比较安全的 —— 至少在登录页面是安全的。
阅读全文

深入剖析 redis 事务机制

redis 事务简述

MULTI,EXEC,DISCARD,WATCH 四个命令是 redis 事务的四个基础命令。其中:

  • MULTI,告诉 redis 服务器开启一个事务。注意,只是开启,而不是执行
  • EXEC,告诉 redis 开始执行事务
  • DISCARD,告诉 redis 取消事务
  • WATCH,监视某一个键值对,它的作用是在事务执行之前如果监视的键值被修改,事务会被取消。

在介绍 redis 事务之前,先来展开 redis 命令队列的内部实现。

redis 命令队列

redis 允许一个客户端不间断执行多条命令:发送 MULTI 后,用户键入多条命令;再发送 EXEC 即可不间断执行之前输入的多条命令。因为,redis 是单进程单线的工作模式,因此多条命令的执行是不会被中断的。
阅读全文

linux 信号量

信号量及信号量上的操作是E.W.Dijkstra 在1965年提出的一种解决同步、互斥问题的较通用的方法,并在很多操作系统中得以实现, Linux改进并实现了这种机制。

信号量(semaphore )实际是一个整数,它的值由多个进程进行测试(test)和设置(set)。就每个进程所关心的测试和设置操作而言,这两个操作是不可中断的,或称“原子”操作,即一旦开始直到两个操作全部完成。测试和设置操作的结果是:信号量的当前值和设置值相加,其和或者是正或者为负。根据测试和设置操作的结果,一个进程可能必须睡眠,直到有另一个进程改变信号量的值。

信号量可用来实现所谓的“临界区”的互斥使用,临界区指同一时刻只能有一个进程执行其中代码的代码段。为了进一步理解信号量的使用,下面我们举例说明。

 假设你有很多相互协作的进程,它们正在读或写一个数据文件中的记录。你可能希望严格协调对这个文件的存取,于是你使用初始值为1的信号量,在这个信号量上实施两个操作,首先测试并且给信号量的值减1,然后测试并给信号量的值加1。当第一个进程存取文件时,它把信号量的值减1,并获得成功,信号量的值现在变为0,这个进程可以继续执行并存取数据文件。但是,如果另外一个进程也希望存取这个文件,那么它也把信号量的值减1,结果是不能存取这个文件,因为信号量的值变为-1。这个进程将被挂起,直到第一个进程完成对数据文件的存取。当第一个进程完成对数据文件的存取,它将增加信号量的值,使它重新变为1,现在,等待的进程被唤醒,它对信号量的减1操作将获得成功。

上述的进程互斥问题,是针对进程之间要共享一个临界资源而言的,信号量的初值为1。实际上,信号量作为资源计数器,它的初值可以是任何正整数,其初值不一定为0或1。另外,如果一个进程要先获得两个或多个的共享资源后才能执行的话,那么,相应地也需要多个信号量,而多个进程要分别获得多个临界资源后方能运行,这就是信号量集合机制,Linux 讨论的就是信号量集合问题。

阅读全文