Home > 基础知识
  • 【分享】TCP/IP和Socket的区别

    要写网络程序就必须用Socket,这是程序员都知道的。而且,面试的时候,我们也会问对方会不会Socket编程?一般来说,很多人都会说,Socket编程基本就是listen,accept以及send,write等几个基本的操作。是的,就跟常见的文件操作一样,只要写过就一定知道。 对于网络编程,我们也言必称TCP/IP,似乎其它网络协议已经不存在了。对于TCP/IP,我们还知道TCP和UDP,前者可以保证数据的正确和可靠性,后者则允许数据丢失。最后,我们还知道,在建立连接前,必须知道对方的IP地址和端口号。除此,普通的程序员就不会知道...
    阅读全文 →
  • 【工作】Linux 实用的端口转发工具:socat安装使用记录

    写在前面: 在实际生产中我们经常会遇到到一个场景就是,用一台机器作为转发服务器,连接AB两个网段,将转发服务器的某个端口上的流量转发到B网段的某台机器的某个端口,这样A网段的服务器就可以通过访问转发服务器上的端口访问到B网段的服务器端口。   这样的场景一般在和客户建立专线的连接时候经常用到,一般也可以采用iptables做转发,但是比较复杂,socat可以很轻松的完成这个功能。   socat可以看做netcat(nc)的替代产品,作用是在两个流之间建立双向的通道,且支持众多协议和链接方式:ip,tcp,udp,ipv6,pip...
    阅读全文 →
  • 【工作】Centos 6.5 PHP 5.3 yum升级到5.5、5.6、5.7版本方法

    系统环境: OS:CentOS 6.5 php version:  5.3.3 1.卸载系统已有php # yum remove php*   注意:对于线上环境运行上面的命令时候,确保机器没有对外提供业务,否则执行后会导致业务异常。 2.安装Remi的YUM源 Remi repository是包含最新版本 PHP 和 MySQL 包的 Linux 源,由 Remi 提供维护。有个这个源之后,使用 YUM 安装或更新 PHP、MySQL、phpMyAdmin 等服务器相关程序的时候就非常方便了。 CentOS 6 Yum源: # rpm -Uvh http://ftp.iij.ad.jp/pub/linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm # rp...
    阅读全文 →
  • 【分享】JVM性能调优监控工具总结

    摘星怪  /
     / 基础知识
    【写在前面】 在平时的运维工作中,我们经常会碰到下面这些问题: OutOfMemoryError,内存不足 内存泄露 线程死锁 锁争用(Lock Contention) Java进程消耗CPU过高 导致服务器CPU或者内存飙高影响线上业务,对于解决以上问题,我们常用的JVM性能调优监控工具有:jps、jstat、jstack、jmap、jhat、hprof、jinfo   如果想要查看Java进程中线程堆栈的信息,可以选择jstack,如果要查看堆内存,可以使用jmap导出并使用jhat来进行分析,包括查看类的加载信息,GC算法那,对象的使用情况等,还可以使用jstat来对JVM进...
    阅读全文 →
  • 【工作】CentOS下搭建sftp服务并指定不同用户的访问目录和权限

    摘星怪  /
     / 基础知识, 工作记录
    【写在前面】 客户现在有个需求,需要创建个文件服务器,可以实现对不同用户访问不同目录,且用户拥有不同访问权限。 目前文件服务器有很多种,常见的有vsftp、samba、sftp等,为了省事,我直接采用sftp实现这个需求。 目前服务器上都安装了ssh服务,则默认就包含sftp功能,只要sshd服务器启动了,sftp功能也就可以直接使用,端口就是ssh服务设置的登录端口,默认是22。 PS:本文只是描述sftp实现需求过程,其中一些安全设置操作省略没写,如果你是搭建用来给外网用户使用,请注意安全加固问题,起码要更改ssh的端...
    阅读全文 →
  • 【工作】Centos 7/6 内核版本由3.10.0 升级至 4.12.4方法

    【写在前面】 公司打算上Docker服务,目前需要安装运行环境,Docker新的功能除了需要Centos 7系统之外,内核的版本高低也决定着使用的效果,所以在此记录下系统内核版本升级过程。 注:对于线上环境的内核版本还需要根据实际情况谨慎选择,越新的版本未来可能遇到的问题越多,此文只是记录升级方法而已。 【文章内容】 关于内核版本的定义: 版本性质:主分支ml(mainline),稳定版(stable),长期维护版lt(longterm) 版本命名格式为 “A.B.C”: 数字 A 是内核版本号:版本号只有在代码和内核的概念有重大改变的时候...
    阅读全文 →
  • 【基础】小谈keepalived vip漂移原理与VRRP协议

    简介 什么是keepalived呢?keepalived是实现高可用的一种轻量级的技术手段,主要用来防止单点故障(单点故障是指一旦某一点出现故障就会导致整个系统架构的不可用)的发生。之所以说keepalived是轻量级的,是相对于corosync + ldirectord来说的。   keepalived也可以实现高可用集群,而且配置起来比corosync + ldirectord简单方便很多,keepalived与corosync的工作机制相差很多。corosync + ldirectord实现的功能虽然强大,但配置起来比较麻烦,而keepalived功能虽然简单,但配置起来比较容易。也就是说keepalived可...
    阅读全文 →
  • 【基础】怎样在 CentOS 里下载 RPM 包及其所有依赖包

    前几天我尝试去创建一个仅包含我们经常在 CentOS 7 下使用的软件的本地仓库。当然,我们可以使用 curl 或者 wget 下载任何软件包,然而这些命令并不能下载要求的依赖软件包。你必须去花一些时间而且手动的去寻找和下载被安装的软件所依赖的软件包。然而,我们并不是必须这样。 在这个简短的教程中,我将会带领你以两种方式下载软件包及其所有依赖包。我已经在 CentOS 7 下进行了测试,不过这些相同的步骤或许在其他基于 RPM 管理系统的发行版上也可以工作,例如 RHEL,Fedora 和 Scientific Linux。 方法 1 利用 “...
    阅读全文 →
  • 【理论】Linux bond 网卡绑定配置和模式详解

    摘星怪  /
     / 基础知识
    【文章内容】 bonding简介 将多个Linux网络端口绑定为一个,可以提升网络的性能,比如对于备份服务器,需要在一个晚上备份几个T的数据,如果使用单个的千兆网口将会是很严重的瓶颈。其它的应用,比如ftp服务器,高负载的下载网站, 都有类似的问题。因此使用Linux teaming或bond来绑定多个网卡作为一个逻辑网口,配置单个的IP地址,会大幅提升服务器的网络吞吐(I/O)。 Linux的多网卡绑定功能使用的是内核中的"bonding"模块,关于此模块可以参考Linux Ethernet Bonding Driver文档, 但是目前发布各个Linux版本内核...
    阅读全文 →
  • 【理论】详解tcp的半连接与完全连接队列

    摘星怪  /
     / 基础知识
    【写在前面】 前面转了一篇关于TCP全连接和半连接介绍的文章,感觉还是理解的不够深刻,网上又搜索了一篇,整篇文章都是详细解释这个知识点的,感觉不错,转载记录下。 【文章正文】 队列及参数 server端的半连接队列(syn队列) 在三次握手协议中,服务器维护一个半连接队列,该队列为每个客户端的SYN包开设一个条目(服务端在接收到SYN包的时候,就已经创建了request_sock结构,存储在半连接队列中),该条目表明服务器已收到SYN包,并向客户发出确认,正在等待客户的确认包(会进行第二次握手发送SYN+ACK 的包加...
    阅读全文 →
  • 【理论】关于TCP 半连接队列(syns)和全连接队列(accpet)

    阿里中间件团队博客  /
     / 基础知识
    【写在前面】 文章转载自阿里中间件团队博客,前半部分先介绍了一起由于tcp连接队列参数配置不当,导致的client端连接异常问题的解决过程,后半着重分析了TCP 半连接队列和全连接队列原理,文章写的不错,值得推荐。 【文章内容】 最近碰到一个client端连接异常问题,然后定位分析并查阅各种资料文章,对TCP连接队列有个深入的理解 查资料过程中发现没有文章把这两个队列以及怎么观察他们的指标说清楚,希望通过这篇文章能把他们说清楚一点 问题描述 JAVA的client和server,使用socket通信。server使用NIO。 1.间...
    阅读全文 →
  • 【工作】Centos6.5 升级glibc解决“libc.so.6: version GLIBC_2.14 not found”报错问题

    写在前面: 研发发来邮件说线上有台服务器跑程序报错,信息如下: ./agent: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by./agent)   从上面报错可以看出,程序运行时候,没有找到“GLIBC_2.14”这个版本库,而默认的Centos6.5 glibc版本最高为2.12, 所以需要更新系统glibc库。   glibc是gnu发布的libc库,即c运行库,glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc。glibc除了封装linux操作系统所提供的系统服务外,它本身也提供了许多其它一些必要功能服务的实现。   很...
    阅读全文 →
  • 【基础】Linux 开启telnet远程登录服务

    1.首先检查服务器是否安装telnet-server软件 # rpm -qa telnet-server 2.如果没有安装可以使用yum或者下载rpm包安装 # yum install telnet-server 3.开启telnet服务 # vim /etc/xinetd.d/telnet disable         = yes  改成--------> disable         = no 4.重启xinetd服务 # service xinetd restart 5.远程登录查看是否成功 [root@GS-2 ~]# telnet 172.16.20.227 Trying 172.16.20.227... Connected to 172.16.20.227. Escape character is '^]'. CentOS release 6.7 (Final) Kernel 2.6.32-573.el6.x86_...
    阅读全文 →
  • 【工作】解决Linux系统使用unzip解压后中文名乱码问题

    写在前面: 之前的一些工作遇到的问题都是以笔记的形式记录,现在开了博客后,打算把之前觉得有用的笔记放到博客上,帮助别人的同时,自己没事还能温故知新一下,一举两得。 问题现象: 如文章标题所说,Linux系统使用unzip解压zip软件包后,中文名乱码   问题原因: 此问题是由于zip格式的缺陷,zip文件格式中没有字段标志出文件名的编码格式,Windows下生成的zip文件中的编码是GBK/GB2312等,由于zip文件中没有声明其编码,所以 linux上的unzip一般以默认编码UTF8解压,因此,导致这些zip文件在Linux下解压时出...
    阅读全文 →
  • 【理论】关于TCP/IP传输层的知识点

    java_mzd  /
     / 基础知识
    关于TCP/IP传输层的20个问题: 1. 传输层的主要功能是什么? 2. 传输层如何区分不同应用程序的数据流? 3. 传输层有哪些协议? 4. 什么是UDP协议? 5. 为什么有了UDP,还需要TCP? 6. 什么是TCP协议? 7. 怎么理解协议和程序? 8. TCP是否真的有链接? 9. 链接是如何建立的(逻辑上)? 10. 所谓的建立TCP链接开销很大,具体是指什么? 11. 三次握手的目的是什么? 12. TCP如何提供可靠性? 13. 什么是预期确认?什么是肯定确认与重新传输?哪些情况会重传? 14. TCP中,序列号和应答号有哪些作用? ...
    阅读全文 →