TCP/IP四层模型和OSI七层模型对应表。我们把OSI七层网络模型和LinuxTCP/IP四层概网络
本文作者:sivenzhang,腾讯 IEG 测试开发工程师 1. 前言 本文主要对 Linux 系统内核协议栈中网络层接收,发送以及转发数据包的流程进行简要介绍,同时对 Netfilter 数据包过滤框架的基本原理以及使用方式进行简单阐述。 内容如有理解错误而导致说明错误的地方,还请指正。如存在引用而没有添加说明的,也请及时告知,非常感谢! 2. 基础网络知识 2.1 网络分层模型 OSI 模型中将网络划分为七层,但在目前实际广泛使用的 TCP/IP 协议框架体系内,我们一般将网络划分为五层,从
1. LVS 简介 ---- 1. LVS 是什么? LVS 的英文全称是 Linux Virtual Server,即 Linux 虚拟服务器。它是我们国家的章文嵩博士的一个开源项目。在 linux 内核 2.6 中,它已经成为内核的一部分,在此之前的内核版本则需要重新编译内核。 2. LVS 能干什么? LVS 主要用于多服务器的负载均衡。它工作在网络 4 层,可以实现高性能,高可用的服务器集群技术。 它廉价,可把许多低性能的服务器组合在一起形成一个超级服务器。 它易用,配置非常简单,且有多种负载均衡的
为了使得多种设备能通过网络相互通信,和为了解决各种不同设备在网络互联中的兼容性问题,国际标标准化组织制定了开放式系统互联通信参考模型(open System Interconnection Reference Model),也就是 OSI 网络模型,该模型主要有 7 层,分别是应用层、表示层、会话层、传输层、网络层、数据链路层以及物理层。
当时有些地方写的比较笼统,然后我「把 Linux 接收+发送网络包的流程」这部分内容完善了下,现在重新分享给大家。
Docker的技术依赖于Linux内核的虚拟化技术的发展,Docker使用到的网络技术有Network Namespace、Veth设备对、Iptables/Netfilter、网桥、路由等。接下来,我将以Docker容器网络实现的基础技术来分别阐述,在到真正的容器篇章节之前,能形成一个稳固的基础知识网。
在上一篇文章中我们概括了k8s集群网络大致包含哪些方面,包括服务在网络中的负载均衡方式(iptable和ipvs),以及underlay和overlay的组网。在这里我们介绍宿主内的容器网络,当然我们还是以docker环境为例,介绍docker宿主环境中的容器网络。
在 Linux 系统下,丢包是一个较为常见的问题。由于丢包导致的网络问题可能会给用户带来不好的体验,因此解决 Linux 网络丢包问题是必不可少的。本文将介绍如何在 Linux 系统下进行网络丢包排查。
抽象网络设备的原理及使用 网络虚拟化是 Cloud 中的一个重要部分。作为基础知识,本文详细讲述 Linux 抽象出来的各种网络设备的原理、用法、数据流向。您通过此文,能够知道如何使用 Linux 的基础网络设备进行配置以达到特定的目的,分析出 Linux 可能的网络故障原因。 Linux 抽象网络设备简介 和磁盘设备类似,Linux 用户想要使用网络功能,不能通过直接操作硬件完成,而需要直接或间接的操作一个 Linux 为我们抽象出来的设备,既通用的 Linux 网络设备来完成。一个常见的情况是,系统里装
今天一个老外在邮件列表上问了一个问题,就是ip addr add和ifconfig的区别,我给他进行了解答,可能因为英语不好吧,解答的很简单,因此我还是要在这里详细说明一下。其实它们之间没有什么区别,只 是表述方式不同罢了。如果你非常理解网络协议的原理以及网络的分层架构那么我想你就不会有这个问题,实际上,每一个网卡设备都有一个mac地址,但是却可 以有多个网络层地址,比如IP地址,然而这个事实无法很好地像用户提供操作接口,所以就引出了ip别名(IP aliases)和辅助ip(secondary IP addresses)的概念。其实很容易理解这个事实,按照分层的思想,下层总是为上层服务,也就是为上层提供舞台,上层利用下层的服务,而不必让下层知 道自己的情况,如果一个拥有合理mac地址的网卡没有配置网络层地址(比如IP地址)这件事合理的话,那么为这个设备配置多个IP地址也是合理的,正好像 一个ip可以对应多个应用层端口一样,也就是说,下层对上层总是一对多的关系,在分层架构中这种关系是合理的。下面我们就看一下linux的网卡的ip地 址结构。刚才说了在linux中,一个网卡可以有多个IP,那么这多个ip有什么关系呢?其实这些ip组成了一个吊链结构,所谓吊链结构就是一些节点链接 成一条链,然后每个节点带有自己的一条链,如下图所示:
在前面的几篇文章里我们介绍了基于flannel的underlay网络和overlay网络,包括host-gw模式的underlay网络,基于vxlan的overlay网络,基于udp的overlay网络。这里我们做一下回顾总结和对比,相关文章可以参考如下:
VXLAN是为了在现有的三层网络之上,覆盖一层虚拟的由内核VXLAN模块负责维护的二层网络,使得连接在VXLAN之上的主机可以像在一个局域网里那样实现自由通信。
A namespace wraps a global system resource in an abstraction that makes it appear to the processes within the namespace that they have their own isolated instance of the global resource. Changes to the global resource are visible to other processes that are members of the namespace, but are invisible to other processes. One use of namespaces is to implement containers. (摘录自Linux man page中对namespace的介绍)
信息是如何通过网络传输被另一个程序接收到的?我们讨论的虚拟化网络是狭义的,它指容器间网络。
Linux内核对网络驱动程序使用统一的接口,并且对于网络设备采用面向对象的思想设计。
容器是一种新的虚拟化技术,每一个容器都是一个逻辑上独立的网络环境。Linux 上提供了软件虚拟出来的二层交换机 Bridge 可以解决同一个宿主机上多个容器之间互连的问题,但这是不够的。二层交换无法解决容器和宿主机外部网络的互通。
LVS是一个开源的软件,可以实现LINUX平台下的简单负载均衡。LVS是Linux Virtual Server的缩写,意思是Linux虚拟服务器。
Redhat、CentOS、Fedora、SuSE、Debian、Ubuntu、FreeBSD等。
通过之前的文章,我们知道 tun 是一个网络层的设备,也被叫做点对点设备,之所以叫这个名字,是因为 tun 常常被用来做隧道通信(tunnel)。
今天我们接着上节课介绍的 Linux 网络知识,继续来学习它们在虚拟化网络方面的应用,从而为后续学习容器编排系统、理解各个容器是如何通过虚拟化网络来协同工作打好基础。
这些实验有助于让学生们深入了解TCP协议的运作方式,并通过实践加深对网络传输控制的理解。他们将有机会通过实验验证理论概念,观察TCP协议在不同情境下的行为,从而更好地掌握网络协议的本质和运作机制。
我们前面已经了解到为什么网络需要分层,每一层都有自己的职责。在发送数据包的过程中,这些层扮演着不同的角色。它们的主要任务是将数据包进行层层封装后发送,并在接收端逐层解封装。
我们一些常见的网络应用基本上都是基于 TCP 和 UDP 的,这两个协议又会使用网络层的 IP 协议。但是我们完全可以绕过传输层的 TCP 和 UDP,直接使用 IP,比如
在计算机网络中,TUN与TAP是操作系统内核中的虚拟网络设备。不同于普通靠硬件网路板卡实现的设备,这些虚拟的网络设备全部用软件实现,并向运行于操作系统上的软件提供与硬件的网络设备完全相同的功能。
①、网络是openstack最重要的资源之一,没有网络,虚拟机将被隔离。Openstack的网络服务最主要的功能就是为虚拟机实例提供网络连接,最初由nova的一个单独模块nova-compute实现,但是nova-compute支持的网络服务有限,无法适应大规模、高密度和多项目的云计算,现已被专门的网络服务项目Neutron所取代。
在上一篇文章里我们介绍了k8s集群中flannel vxlan overlay网络的创建,这在里我们基于上一篇文章中的例子,来介绍在flannel vxlan overlay网络中pod到pod的通讯。
本节所涉及的概念有文件储结构(包括索引节点和目录项)、虚拟文件系统VFS、Linux I/O分类和磁盘的性能指标。涉及到的命令有stat、 df、iostat、 cat /proc/slabinfo、slabtop、pidstat和iotop。
OSI: open system interconnection 开放式系统互联参考模型
Kubernetes中解决网络跨主机通信的一个经典插件就是Flannel。Flannel实质上只是一个框架,真正为我们提供网络功能的是后端的Flannel实现,目前Flannel后端实现的方式有三种:
在上一篇文章里我们介绍了k8s集群中flannel udp overlay网络的创建,这在里我们基于上一篇文章中的例子,来介绍在flannel udp overlay网络中pod到pod的通讯。
Kubernetes网络模型设计的一个基础原则是:每个Pod都拥有一个独立的IP地址,并假定所有Pod都在一个可以直接连通的、扁平的网络空间中。所以不管它们是否运行在同一个Node(宿主机)中,都要求它们可以直接通过对方的IP进行访问。设计这个原则的原因是,用户不需要额外考虑如何建立Pod之间的连接,也不需要考虑如何将容器端口映射到主机端口等问题。
高可用集群通常为两台服务器,一台工作,另外一台作为冗余,当提供服务的机器宕机,冗余将接替继续提供服务。集群的特点:高性能(Performance)、价格有效(Cost-effectiveness)、可伸缩性(Scalability)、高可用性(Availability)、透明性(Traansparency)、可管理性(Manageability)、可编程性(Programmability)
Linux服务器默认网卡配置文件在/etc/sysconfig/network-scripts/下,命名的名称一般为:ifcfg-eth0 ifcfg-eth1 ,eth0表示第一块网卡,eth1表示第二块网卡,依次类推。一般DELL R720标配有4块千兆网卡。
云计算三大组成部分:计算、存储和网络。VXLAN属于云计算虚拟化网络的非常重要的一部分,现在大多数云计算虚拟化网络都是基于此协议实现数据中心互联和虚拟机迁移 ,在数量级很大的虚拟机上完成这些工作是一个非常大的挑战。主要面临以下挑战:
1. HTTP重定向 当用户发来请求的时候,Web服务器通过修改HTTP响应头中的Location标记来返回一个新的url,然后浏览器再继续请求这个新url,实际上就是页面重定向。通过重定向,来达到“负载均衡”的目标 这个方式非常容易实现,并且可以自定义各种策略,但是,它在大规模访问量下,性能不佳,而且,给用户的体验也不好,实际请求发生重定向,增加了网络延时 所以此方式了解即可,实际应用较少 2. 反向代理负载均衡 反向代理服务的核心工作主要是转发HTTP请求,扮演了浏览器端和后台Web服务器中
所以,对 server 端,通过增加内存、修改最大文件描述符个数等参数,单机最大并发 TCP 连接数超过 10 万, 甚至上百万是没问题的。
(1)LVS 是Linux Virtual Server的简称,也就是 Linux 虚拟服务器, 是一个由章文嵩博士发起的自由软件项目,它的官方站点是www.linuxvirtualserver.org。现在LVS已经是 Linux标准内核的一部分,在Linux2.4内核以前,使用LVS时必须要重新编译内核以支持LVS功能模块,但是从Linux2.4内核以后,已经完全内置了LVS的各个功能模块,无需给内核打任何补丁,可以直接使用LVS提供的各种功能。
计算机网络是指将分散的计算机设备通过通信线路连接起来,形成一个统一的网络。为了使得各个计算机之间能够相互通信,需要遵循一定的协议和规范。OSI参考模型和TCP/IP参考模型是计算机网络中常用的两种层次结构模型。其中,TCP/IP参考模型被广泛应用于实际的网络实现中。
前言 网络虚拟化相对计算、存储虚拟化来说是比较抽象的,以我们在学校书本上学的那点网络知识来理解网络虚拟化可能是不够的。 在我们的印象中,网络就是由各种网络设备(如交换机、路由器)相连组成的一个网状结构,世界上的任何两个人都可以通过网络建立起连接。 带着这样一种思路去理解网络虚拟化可能会感觉云里雾里——这样一个庞大的网络如何实现虚拟化? 其实,网络虚拟化更多关注的是数据中心网络、主机网络这样比较「细粒度」的网络,所谓细粒度,是相对来说的,是深入到某一台物理主机之上的网络结构来谈的。 如果把传统的网络看作「宏观
当前大多数的互联网系统都使用了服务器集群技术,集群即将相同服务部署在多台服务器上构成一个集群整体对外提供服务,这些集群可以是Web应用服务器集群,也可以是数据库服务器集群,还可以是分布式缓存服务器集群等等。
通过第一章容器网络基础的学习,我们已经实现了单机容器间的互通、容器访问外部网络及容器对外提供服务。 在实际的应用场景中,为了保证业务的高可用性,我们的容器多是跨宿主机部署的,并且部署在不同宿主机上的容器会进行大量的网络通信。那么,怎么实现容器的跨宿主机通信呢?
说到docker,大家都懂。但是LXC可能就比较陌生。Docker的起源于LXC。LXC的英文全称是Linux Container,相比较其他虚拟机而言,是一种轻量级虚拟化技术,它介于Chroot(linux的一个改变根目录挂载点的机制)和完整开发的虚拟机之间。LXC不使用单独的内核资源,但是可以创建一个类似的Linux操作系统环境。
在OSI 模型定义中,数据链路层/物理层和传输层/网络层执行的任务非常相似:它们都提供了数据传输的手段,即沿某条路径将数据从源点发往目的地的方法,不同之处在于,数据链路层/物理层提供跨物理路径的通信服务,而传输曾/网络层则是提供由一连串的数据链路组成的逻辑路径或虚拟路径的通信服务。
在云计算时代,虚拟机和容器已经成为标配。它们背后的网络管理都离不开一样东西,就是虚拟网络设备,或者叫虚拟网卡,tap/tun 就是在云计算时代非常重要的虚拟网络网卡。
IP层叫分片,TCP/UDP层叫分段。网卡能做的事(TCP/UDP组包校验和分段,IP添加包头校验与分片)尽量往网卡做,网卡不能做的也尽量迟后分片(发送)或提前合并片(接收)来减少在网络栈中传输和处理的包数目,从而减少数据传输和上下文切换所需要的CPU计算时间。
为啥要替代?因为大多 linux 发行版已经不默认安装 ifconfig/netstat了,反而预装了 iproute2 套件。
最近使用tcpdump的时候突然想到这个问题。因为我之前只存在一些一知半解的认识:比如直接镜像了网卡的包、在数据包进入内核前就获取了。但这些认识真的正确么?针对这个问题,我进行了一番学习探究。
ip命令用来显示或操纵Linux主机的路由、网络设备、策略路由和隧道,是Linux下较新的功能强大的网络配置工具。
通过前面的文章我们已经了解了「数据包从HTTP层->TCP层->IP层->网卡->互联网->目的地服务器」这中间涉及的知识。
领取专属 10元无门槛券
手把手带您无忧上云