一个执着于技术的公众号

1 OSI七层模型


层次 说明 功能/协议
应用层 应用程序及接口 提供应用程序的接口;FTP telnet http pop3等
表示层 对数据进行转换、加密和压缩 将上层的数据进行转换和编译压缩为标准的文件,如jpg,gif,ascii码等
会话层 对应主机进程,指本地主机与远程主机正在进行的会话 建立,管理和终止会话
传输层 提供可靠的端到端的报文传输和差错控制,实质上就是负责建立连接的 TCP UDP 建立可靠和非可靠连接将上层的数据进行分段处理
网络层 将分组从源端传送到目的端,提供网络互联 实质上就是提供路由寻址(IP协议)将上层分段的数据进行打包
数据链路层 将分组数据封装成帧,提供节点到节点的传输 帧就是本地局域网中传输数据的一个单元,负责在局域网内部的点对点的寻址
物理层 在媒体上传输比特 就是底层的链路介质的规范
特点说明:
  1. OSI模型每层都有自己的功能集

  2. 层与层之间相互独立又互相依靠

  3. 上层依赖于下层,下层为上层提供服务

2 TCP/IP三次握手和四次挥手


2.1 三次握手

1)第一次握手:Client将标志位SYN置为1,随机产生一个seq=x,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。

2)第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=x+1,随机产生一个值seq=y,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。

3)第三次握手:Client收到确认后,检查ack是否为x+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=y+1,并将该数据包发送给Server,Server检查ack是否为y+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。

2.2 四次挥手

1)第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传输,同时发送一个seq=x的随机序号。Client进入FIN_wait_1状态

2)第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号)Server进入CLOSE_WAIT状态。

3)第三次挥手:Server发送一个FIN,用来关闭Server到CLient的数据传输,同时发送一个seq=y的随机数,Server进入LAST_ACK状态

4)第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次回挥手

3 DNS解析流程原理

1)在浏览器中输入www.qq.com域名,操作系统会先检查自己本地的hosts文件是否有这个网址映射关系,如果有,就先调用这个IP地址映射,完成域名解析。

2)如果hosts里没有这个域名的映射,则查找本地DNS解析器缓存是否有这个网址映射关系;如果有,直接返回,完成域名解析。

3)如果hosts与本地DNS解析器缓存都没有相应的网址映射关系,首先会找TCP/ip参数中设置的首选DNS服务器,在此我们叫它本地DNS服务器,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。

4)如果要查询的域名,不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性。

5)如果本地DNS服务器本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置(是否设置转发器)进行查询,如果未用转发模式,本地DNS就把请求发至13台根DNS,根DNS服务器收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个IP。本地DNS服务器收到IP信息后,将会联系负责.com域的这台服务器。这台负责.com域的服务器收到请求后,如果自己无法解析,它就会找一个管理.com域的下一级DNS服务器地址(qq.com)给本地DNS服务器。当本地DNS服务器收到这个地址后,就会找qq.com域服务器,重复上面动作,进行查询,直至找到www.qq.com主机。

6)如果用的是转发模式,此DNS服务器就会把请求转发至上一级DNS服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根DNS或把转发请求转至上上级,以此循环。不管是本地DNS服务器用的是转发,还是根提示,最后都是把结果返回给本地DNS服务器,由此DNS服务器再返回给客户机。

4  http解析原理:

1)地址解析

如客户端浏览http://test:8080/index.html

协议名:http

主机名:test.com

端口:8080

对象路径:/index.html

在这一步需要域名系统DNS解析域名test.com得到主机的IP地址。

2)封装HTTP请求数据包

把第一步的解析结果再结合本机自己的信息,封装成一个HTTP请求数据包

3)封装成TCP包,建立TCP连接

TCP的三次握手

4)客户机发送请求命令

建立连接后,客户机发送一个请求给服务器,请求的格式为:统一资源标识符(URL),协议版本号,后边是MIME信息包括请求修饰符,客户机信息许可内容

5)服务器响应

  • 服务器接到请求后,给予相应的响应信息,格式为一个状态行,包括信息的协议版本号,一个成功或错误的代码,后边是MIME信息包括服务器信息,实体信息和可能的内容。

  • 实体消息是服务器向浏览器发送头信息后,它会发送一个空白行来表示头信息的发送到此为结束,接着,它就以Content-Type应答头信息所描述的格式发送用户所请求的实际数据

6)服务器关闭TCP连接

一般情况下,一旦Web服务器向浏览器发送了请求数据,它就要关闭TCP连接,然后如果浏览器或者服务器在其头信息加入了这行代码 Connection:Keep-alive。TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立连接所需要的时间,还节约了网络带宽。

综上:http解析的过程,虽然写的比较具体,但其实大家只需要了解大概的过程就可以,建立URL请求,发起URL请求,处理及返回URL的过程。

5 同网段和跨网段数据传输原理


5.1 同网段下(同广播域),两台主机通信过程

我们知道两主机要通信传送数据时,就要把应用数据封装成IP包(因为我们的网络大多都是TCP/IP的以太网),然后再交给下一层数据链路层继续封装成帧;之后根据MAC地址才能把数据从一台主机准确无误的传送到另一台主机。

当NO要和N1通信时:

1)假如NO知道N1的IP但却不知道它的MAC地址,那NO就会发送一个ARP的广播请求(里面源IP是NO目标IP是N1源MAC是N0目标MAC是12个F)给同一广播域中的所有成员。

2)当交换机SW0从自己的1接口上收到这个广播包,然后它会读取这个帧的源MAC地址和目标MAC地址,由于交换机SW0刚启动加电时,它的MAC表为空的。所以它会把NO的MAC地址与之相对应的接口1放到一张表里,这张表就是MAC地址表。

3)然后SW0再从别的接口广播这个数据帧,当别的主机收到这个广播时,查看目标IP不是自己的,就会丢弃此包。如果N1接收到这个数据帧,它检查目标IP和这个的IP是一样的,就会回应这个ARP请求,把自己的IP和MAC封装成源IP和源MAC,N0的IP和N0的MAC地址为目标IP与目标MAC,并记录N0的MAC与IP,放进自己的ARP缓存表中。

4)此时,这个应答包经过交换机SWO时,它又会检查源MAC,目标MAC,把N1的MAC和自己接口2放进MAC地址表中,再查看自己的MAC地址表,发现存在目标MAC与自己的1接口对应(由于刚开始有记录过N0的MAC),那它就会直接把这个应答包从接口1送出去了。

5)主机N0收到这个包后发现目标MAC是自己,就会处理这个包。并把N1的MAC与IP放进自己的ARP缓存表中。这时主机N0就知道N1的MAC地址了

6)后续的发送数据任务,就会直接把N1的IP与MAC封装进帧中进行点对点的发送了。

5.2 跨路由(不同网段)数据传输过程

当N0要和N2通信时:

1)N0会先检查N2的IP地址和自己是否处于同一网段,由于N2和自己处在不同网段,因此,N0会把数据包给它的网管,也就是R0上的F0/0接口了。

2)当这个数据包到达R0时,路由器R0会查看目标IP是否是自己的,由于目标不是自己,所以会查看自己的路由表,找出到达N2网段的路由;(如果找不到就会丢弃数据包)

3)当R0查看路由表发现到达N2网段的出接口是F0/1.于是,把数据包转到F0/1接口上,再由接口F0/1传给R1.这个过程,数据包的源IP是N0源MAC是F0/1目标IP是N2目标MAC是R1的F0/1接口IP

4)当R1收到这个数据包后,同样也要检查包的目标IP是否自己,它会主动查找自己的路由表,发现目标IP跟自己F0/0接口处在同一网段,于是就把包传到F0/0接口上去发给N2。)

6 Linux网络相关配置

6.1 配置网卡

编辑配置文件:

/et/sysconfig/network-scripts/ifcfg-eth0

通过软件修改网卡:

1)输入命令setup

2)Network configuration进入网卡配置文件

网卡生效:

1)针对单一网卡

ifup ens33 启动ens33网卡

ifdown ens33 停掉ens33网卡

2)针对所有网卡重启

/etc/init.d/network restart

注意:

  1. 网卡配置里的DNS优先于/etc/resolv.conf配置的,并且重启网卡,会把/etc/resolv.conf里的覆盖

  2. 网络如果没有配置DNS,那么在/etc/resolv.conf里配置会生效,如果有多块网卡(DHCP获取方式)时候,可能会覆盖/etc/resolv.conf里已有配置

6.2 主机名变更

1)临时修改主机名(重启系统失效)

hostname 主机名

2)永久修改主机名

echo "qll251" > /etc/hostname

6.3 默认网关的更改

第一生效文件:

[root@qll251 ~]# grep -i gate /etc/sysconfig/network-scripts/ifcfg-eth0
GATEWAY=192.168.1.1

第二生效文件:

[root@qll251 ~]# grep -i gate /etc/sysconfig/network
GATEWAY=192.168.1.1

第三:命令行下临时生效

route -n 查看路由规则

route add default gw 10.0.0.254 #添加路由规则

route del default gw 10.0.0.254 #删除路由规则

6.4 命令行配置ip别名辅助

小提示:linux一块网卡可以配置多个临时的IP地址

7 已知端口查服务的多种方法

方法一:lsof

知识扩展:文件已经被删除,但进程还在占用,导致磁盘空间不释放,怎么查找?

[root@qll251 ~]# lsof | grep del
php-fpm 1165 root 3u REG 8,3 0 132492 /tmp/ZCUDnCFFxq (deleted)
php-fpm 1166 nginx 3u REG 8,3 0 132492 /tmp/ZCUDnCFFxq (deleted)
php-fpm 1167 nginx 3u REG 8,3 0 132492 /tmp/ZCUDnCFFxq (deleted)
php-fpm 1168 nginx 3u REG 8,3 0 132492 /tmp/ZCUDnCFFxq (deleted)
php-fpm 1169 nginx 3u REG 8,3 0 132492 /tmp/ZCUDnCFFxq (deleted)
php-fpm 1170 nginx 3u REG 8,3 0 132492 /tmp/ZCUDnCFFxq (deleted)
方法二:netstat -lntup


8 网络及服务故障的排查思路

例:假如https://blog.csdn.net/weixin_38889300 网址打不开

排查思路

1)查一下看看通不通


ping -c3 -i2 -s512 www.blog.csdn.net icmp协议是否被禁止 参数解释:
-c:次数
-i:时间间隔
-s:发包大小

2)查看各个节点是否畅通

traceroute www.blog.csdn.net

3)检查服务器WEB有没有开启,服务开没开,以及防火墙有没有挡住。

telnet www.blog.csdn.net 80

综上:如果不通

1,80服务没开或端口不存在

2,服务被防火墙阻挡了

3,服务监听的端口不在连接的IP上(被限定了连接IP)


9 企业面试题两道

9.1 局域网的某个机器无法上网(网管角度~)

基本检查思路:

(一)单机器无法上网

1)ping www.baidu.com
如果通,但不能上网,可能是浏览器,中毒等问题

2)ping 网关(目的是排除物理链路问题)

  • 如果ping网关不通,则查看ip设置,然后ping自身ip或ping网内其他机器IP;如果ping自身不通:检查ip设置,网卡驱动,物理链路

  • 如果ping网关通,则检查DNS的设置是否正确。pingDNS地址看看通不通或者nslookup进行公网的域名解析看看是否正常。

3)上网的路由器以及ISP线路问题

4)辅助排查:IP地址冲突,ARP病毒,核心交换机坏了,交换机环路,其他人能否上网

(二)大面积不能上网思路:

路由器,ISP,核心交换机,ARP病毒,核心交换机坏了,交换机环路等。

9.2 客户反应打开的网站慢,如何排查?(运维角度~)

一)用户个例还是全部都如此:

先模拟用户环境,进行访问测试,如果没有问题,就从客户角度思考,如果自己测试同样有问题,按下面思路排查:

1,路是否通的问题

1)ping 网站地址,看看道路通不通

  • 如果ping通,不丢包。就是服务有问题(服务宕机,服务过载)

  • 如果ping通,但丢包。机房问题(带宽不稳定,各个线路不稳定)

  • 如果ping不通,那么ping百度看看通不通,如果也不通,那还是机房问题。

2)路由追踪:看看从客户端到服务器的线路节点是否有问题

traceroute -d(linux)
tracert -d(windows) 参数解释:
-d禁止反向解析(速度快)

2,机房业务是否OK

3)检查服务器WEB服务有没有开启以及防火墙有没有挡住

telnet www.baidu.com 80
nmap www.baidu.com -p 80
curl www.baidu.com 或wget www.baidu.com #相当于浏览器访问

4)提供服务的服务器是否资源过载,服务器及服务连接数过多,负载高,CPU高,IO高等

3,外部问题

5)网站购买的带宽满了,通过流量监控服务查看

6)内链外链(调用外部网站网址有问题)

根据网站URL调试网站

  • a,google浏览器直接F12

  • b,火狐firebug等

如果没有错误,只是有点警告(警告没事)

若有错误,则需要配合开发同事看看是不是错误导致

4,其他问题:

个别客户自身,例如用户的网络线路和运营商网站带宽线路不符(联通VS电信)

5,集群架构问题

  • web服务问题;

  • 数据库问题:

    登录数据库看看是否有慢查询语句show proceslist,调整MYSQL配置,优化SQL语句

  • 存储等问题:

    判断是不是存储服务器如NFS,MFS的负载及磁盘IO高

    10 总结

  • tcp/ip协议三次握手和四次断开过程

  • http协议的工作原理

  • 机器无法上网

  • 网站打开慢

  • DNS解析原理

  • osi七层网络模型

  • route如何添加一个网络路由

  • 如何查看已知端口对应的服务

作者:陈思齐

https://www.cnblogs.com/chensiqiqi/p/6503278.html

往期精彩

◆  手把手教你搭建一套OpenStack云平台

◆  利用expect批量修改Linux服务器密码

◆  Linux运维工程师面试问答录

◆  干货 | Linux平台搭建网关服务器

◆  干货 | 理解正向代理与反向代理的区别

◆  硬核科普服务器硬盘组成与基本原理

◆  一文带你速懂虚拟化KVM和XEN

◆  实战 | Hadoo大数据集群搭建

◆  运维工程师心法:6大技能让你告别背锅

如有收获,点个在看,诚挚感谢

Linux网络重点知识总结性梳理的更多相关文章

  1. 【Linux网络基础】网络拓扑、OSI层次模型、TCP/IP协议簇

    一.前言 一个运维有时也要和网络打交道,所以具备最基本的网络知识,对一个运维人员来说是必要的.但,对于我们的工作来说这些并不是重点,因此,我不可能从最基础的网络知识开始讲起.本节内容更多是从一个梳理和 ...

  2. [转] - Linux网络编程 -- 网络知识介绍

    (一)Linux网络编程--网络知识介绍 Linux网络编程--网络知识介绍客户端和服务端         网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端. 客户 ...

  3. Linux运维笔记(一)网络基础知识

    网络基础知识 一.基本概念 1.ARPANET & TCP/IP:以“软件”技术将网络硬件整合,使得不同的计算机或者数据可以通过这个软件达成数据沟通(TCP/IP技术也被称为Internet) ...

  4. LINUX涉及网络相关知识

    才接触到网络的老铁,是否比较晕呢? 简单记录一下网络相关知识吧(IPV4)! A0. 网络号.主机号 A1.网络地址分类: A2. 保留地址: A3. 子网掩码作用:(子网掩码.IPV4地址做“与”运 ...

  5. Mysql优化系列(0)--总结性梳理

    对于一个网站来说,在运行很长一段时间后,数据库瓶颈问题会越来越暴露出来.作为运维人员,对数据库做必要的优化十分重要!下面总结以往查阅到的以及自己工作中的一些优化操作经验,并根据OSI七层模型从下往上进 ...

  6. 【深入浅出Linux网络编程】 "开篇 -- 知其然,知其所以然"

    [深入浅出Linux网络编程]是一个连载博客,内容源于本人的工作经验,旨在给读者提供靠谱高效的学习途径,不必在零散的互联网资源中浪费精力,快速的掌握Linux网络编程. 连载包含4篇,会陆续编写发出, ...

  7. Kali Linux渗透基础知识整理(四):维持访问

    Kali Linux渗透基础知识整理系列文章回顾 维持访问 在获得了目标系统的访问权之后,攻击者需要进一步维持这一访问权限.使用木马程序.后门程序和rootkit来达到这一目的.维持访问是一种艺术形式 ...

  8. Linux 操作系统基础知识

    1.操作系统总体介绍 •CPU: 就像人的大脑,主要负责相关事情的判断以及实际处理的机制.查询指令: cat /proc/cpuinfo•内存: 大脑中的记忆区块,将皮肤.眼睛等所收集到的信息记录起来 ...

  9. 由PPPOE看Linux网络协议栈的实现

    http://www.cnblogs.com/zmkeil/archive/2013/05/01/3053545.html 这个标题起得比较纠结,之前熟知的PPPOE是作为PPP协议的底层载体,而实际 ...

随机推荐

  1. 什么是CopyOnWriteArrayList,它与ArrayList有何不同?

    CopyOnWriteArrayList是ArrayList的一个线程安全的变体,其中所有可变操作(add.set等等)都是通过对底层数组进行一次新的复制来实现的.相比较于ArrayList它的写操作 ...

  2. Java 语言如何进行异常处理,关键字:throws、throw、 try、catch、finally 分别如何使用?

    Java 通过面向对象的方法进行异常处理,把各种不同的异常进行分类,并提供了良好的接口.在 Java 中,每个异常都是一个对象,它是 Throwable 类或其子类的实例.当一个方法出现异常后便抛出一 ...

  3. 什么是 bean 装配?

    装配,或 bean 装配是指在 Spring 容器中把 bean 组装到一起,前提是容器需要 知道 bean 的依赖关系,如何通过依赖注入来把它们装配到一起.

  4. Elasticsearch 对于大数据量(上亿量级)的聚合如何实现?

    Elasticsearch 提供的首个近似聚合是 cardinality 度量.它提供一个字段的基数, 即该字段的 distinct 或者 unique 值的数目.它是基于 HLL 算法的.HLL 会 ...

  5. spring aop 源码解读之我见

    spring aop 都是动态代理,分为jdk代理和cglib代理.默认的情况下,如果类有实现了接口,使用jdk代理.如果没有实现接口,则使用cglib代理.在下面的代码中,我会标明对应的这段代码. ...

  6. I2C总线完全版——I2C总线的结构、工作时序与模拟编程

    I2C总线的结构.工作时序与模拟编程 I2C总线的结构.工作时序与模拟编程I2C总线(Inter Integrated Circuit)是飞利浦公司于上个世纪80年代开发的一种"电路板级&q ...

  7. 7分钟理解JS的节流、防抖及使用场景

    前言 据说阿里有一道面试题就是谈谈函数节流和函数防抖.糟了,这可触碰到我的知识盲区了,好像听也没听过这2个东西,痛定思痛,赶紧学习学习.here we go! 概念和例子 函数防抖(debounce) ...

  8. java中请给出例子程序:找出n到m之间的质数。

    9.1 找出100到200之间的质数.  public class Test {     public static void main(String[] args){         for (in ...

  9. vue里面v-for显示红色波浪线

    vue里面使用v-for代码显示红色的波浪线,解决办法: before: <div v-for="tmsgs in msg.message"></div> ...

  10. 《头号玩家》AI电影调研报告(五)

    4.VR自由行走跑步机 电影中,它可以让玩家朝任意方向无限奔跑并保持在平台最中央,还可以模拟上台阶和走斜坡的情况.而下面这件VR跑步装备,可以让你在游戏世界穿行自如. 奥地利创意公司Cyberith公 ...