首页系统综合问题一文了解 Gateway 知识点

一文了解 Gateway 知识点

时间2023-04-24 15:58:23发布分享专员分类系统综合问题浏览128

今天小编给各位分享gateway的知识,文中也会对其通过一文了解 Gateway 知识点和gateway电脑等多篇文章进行知识讲解,如果文章内容对您有帮助,别忘了关注本站,现在进入正文!

内容导航:

  • 一文了解 Gateway 知识点
  • gateway电脑
  • 双网卡,静态路由设置失败。如何解决?
  • 计算机网络知识点
  • 一、一文了解 Gateway 知识点

    1.什么是网关

    API 网关是一个搭建在客户端和微服务之间的服务,我们可以在 API 网关中处理一些非业务功能的逻辑,例如权限验证、监控、缓存、请求路由等。

    网关的核心作用就是路由转发 API 网关就像整个微服务系统的门面一样,是系统对外的唯一入口。有了它,客户端会先将请求发送到 API 网关,然后由 API 网关根据请求的标识信息将请求转发到微服务实例。如下图:

    2. 为什么要网关

    在微服务架构中,一个系统往往由多个微服务组成,而这些服务可能部署在不同机房、不同地区、不同域名下。这种情况下,客户端(例如浏览器、手机、软件工具等)想要直接请求这些服务,就需要知道它们具体的地址信息,例如 IP 地址、端口号等。这种客户端直接请求服务的方式存在以下问题:

    ●当服务数量众多时,客户端需要维护大量的服务地址,这对于客户端来说,是非常繁琐复杂的。

    ●在某些场景下可能会存在跨域请求的问题。

    ●身份认证的难度大,每个微服务需要独立认证。

    我们可以通过 API 网关来解决这些问题

    3. 网关的优点

    对于服务数量众多、复杂度较高、规模比较大的系统来说,使用 API 网关具有以下好处:

    客户端通过 API 网关与微服务交互时,客户端只需要知道 API 网关地址即可,而不需要维护大量的服务地址,简化了客户端的开发。客户端直接与 API 网关通信,能够减少客户端与各个服务的交互次数。客户端与后端的服务耦合度降低。节省流量,提高性能,提升用户体验。API 网关还提供了安全、流控、过滤、缓存、计费以及监控等 API 管理功能。4. 网关的种类

    1Spring Cloud Gateway

    2Spring Cloud Netflix Zuul

    3Kong

    4Nginx+Lua

    5Traefik

    5. Spring Cloud Gateway5.1 什么是Spring Cloud Gateway

    Spring Cloud Gateway 是 Spring Cloud 团队基于 Spring 5.0、Spring Boot 2.0 和 Project Reactor 等技术开发的高性能 API 网关组件。Spring Cloud Gateway 旨在提供一种简单而有效的途径来发送 API,并为它们提供横切关注点,例如:安全性,监控/指标和弹性。

    Spring Cloud Gateway 是基于 WebFlux响应式编程框架实现的,而 WebFlux 框架底层则使用了高性能的 Reactor 模式通信框架 Netty。

    5.2 Spring Cloud Gateway的核心概念

    核心概念

    描述

    Route(路由)

    网关最基本的模块。它由一个 ID、一个目标 URI、一组断言(Predicate)和一组过滤器(Filter)组成。

    Predicate(断言)

    路由转发的判断条件,我们可以通过 Predicate 对 HTTP 请求进行匹配,例如请求方式、请求路径、请求头、参数等,如果请求与断言匹配成功,则将请求转发到相应的服务。

    Filter(过滤器)

    过滤器,我们可以使用它对请求进行拦截和修改,还可以使用它对上文的响应进行再处理。

    注意:其中 Route 和 Predicate 必须同时声明。

    5.3 Spring Cloud Gateway的特征基于 Spring Framework 5、Project Reactor 和 Spring Boot 2.0 构建。能够在任意请求属性上匹配路由。predicates(断言) 和 filters(过滤器)是特定于路由的。集成了 Hystrix 熔断器。集成了 Spring Cloud DiscoveryClient(服务发现客户端)。易于编写断言和过滤器。能够限制请求频率。能够重写请求路径。5.4 Spring Cloud Gateway工作流程客户端将请求发送到 Spring Cloud Gateway 上。Spring Cloud Gateway 通过 Gateway Handler Mapping 找到与请求相匹配的路由,将其发送给 Gateway Web Handler。Gateway Web Handler 通过指定的过滤器链(Filter Chain),将请求转发到实际的服务节点中,执行业务逻辑返回响应结果。过滤器之间用虚线分开是因为过滤器可能会在转发请求之前(pre)或之后(post)执行业务逻辑。过滤器(Filter)可以在请求被转发到服务端前,对请求进行拦截和修改,例如参数校验、权限校验、流量监控、日志输出以及协议转换等。过滤器可以在响应返回客户端之前,对响应进行拦截和再处理,例如修改响应内容或响应头、日志输出、流量监控等。响应原路返回给客户端。

    总而言之,客户端发送到 Spring Cloud Gateway 的请求需要通过一定的匹配条件,才能定位到真正的服务节点。在将请求转发到服务进行处理的过程前后(pre 和 post),我们还可以对请求和响应进行一些精细化控制。Predicate 就是路由的匹配条件,而 Filter 就是对请求和响应进行精细化控制的工具。有了这两个元素,再加上目标 URI,就可以实现一个具体的路由了。

    6. Predicate 断言

    Spring Cloud Gateway 通过 Predicate 断言来实现 Route 路由的匹配规则。简单点说,Predicate 是路由转发的判断条件,请求只有满足了 Predicate 的条件,才会被转发到指定的服务上进行处理。使用 Predicate 断言需要注意以下 3 点:

    Route 路由与 Predicate 断言的对应关系为“一对多”,一个路由可以包含多个不同断言。一个请求想要转发到指定的路由上,就必须同时匹配路由上的所有断言。当一个请求同时满足多个路由的断言条件时,请求只会被首个成功匹配的路由转发。

    常见的 Predicate 断言如下表:

    断言

    示例

    说明

    Path

    - Path=/dept/list/**

    当请求路径与 /dept/list/** 匹配时,该请求才能被转发到 http://localhost:8001 上。

    Before

    - Before=2021-10-20T11:47:34.255+08:00[Asia/Shanghai]

    在 2021 年 10 月 20 日 11 时 47 分 34.255 秒之前的请求,才会被转发到 http://localhost:8001 上。

    After

    - After=2021-10-20T11:47:34.255+08:00[Asia/Shanghai]

    在 2021 年 10 月 20 日 11 时 47 分 34.255 秒之后的请求,才会被转发到 http://localhost:8001 上。

    Between

    - Between=2021-10-20T15:18:33.226+08:00[Asia/Shanghai],2021-10-20T15:23:33.226+08:00[Asia/Shanghai]

    在 2021 年 10 月 20 日 15 时 18 分 33.226 秒 到 2021 年 10 月 20 日 15 时 23 分 33.226 秒之间的请求,才会被转发到 http://localhost:8001 服务器上。

    Cookie

    - Cookie=name,c.biancheng.net

    携带 Cookie 且 Cookie 的内容为 name=c.biancheng.net 的请求,才会被转发到 http://localhost:8001 上。

    Header

    - Header=X-Request-Id,\d+

    请求头上携带属性 X-Request-Id 且属性值为整数的请求,才会被转发到 http://localhost:8001 上。

    Method

    - Method=GET

    只有 GET 请求才会被转发到 http://localhost:8001 上。

    7. 动态路由实现简单的路由服务器

    引入依赖

    <!--特别注意:在 gateway 网关服务中不能引入 spring-boot-starter-web 的依赖,否则会报错--><!-- Spring cloud gateway 网关依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency>

    编写配置文件

    server:port: 9527spring:application:  name: gatewaycloud:  gateway: #网关路由配置    routes:      #将service5提供的服务隐藏起来,不暴露给客户端,只给客户端暴露API网关的地址9527      - id: service5_routh   #路由id,没有固定规则,但唯一,建议与服务名对应        uri: lb://service5   #动态路由匹配后提供服务的路由地址:lb://${服务名}        predicates:          #以下是断言条件,必选全部符合条件          - Path=/api/v1/service5/**               #断言,路径匹配 注意:Path 中 P 为大写eureka:instance:  instance-id: spring-cloud-gateway  prefer-ip-address: true  lease-expiration-duration-in-seconds: 15 #服务过期时间,如果超过这个时间没有检测到心跳,就将这个实例剔除  lease-renewal-interval-in-seconds: 5 #client发送心跳给server端的频率client:  registry-fetch-interval-seconds: 5  service-url:    defaultZone: http://eureka1001.com:1001/eureka/,http://eureka2001.com:2001/eureka/

    默认情况下,Spring Cloud Gateway 会根据服务注册中心(例如 Eureka Server)中维护的服务列表,以服务名(spring.application.name)作为路径创建动态路由进行转发,从而实现动态路由功能。

    我们可以在配置文件中,将 Route 的 uri 地址修改为以下形式:lb://service-name 以上配置说明如下:

    lb(loadBalance):uri 的协议,表示开启 Spring Cloud Gateway 的负载均衡功能。service-name:服务名,Spring Cloud Gateway 会根据它获取到具体的微服务地址

    启动类添加注解

    @SpringBootApplication@EnableEurekaClientpublic class GatewayApplication {public static void main(String[] args) {SpringApplication.run(GatewayApplication.class, args);}}
    8. Filter 过滤器

    通常情况下,出于安全方面的考虑,服务端提供的服务往往都会有一定的校验逻辑,例如用户登录状态校验、签名校验等。在微服务架构中,系统由多个微服务组成,所有这些服务都需要这些校验逻辑,此时我们就可以将这些校验逻辑写到 Spring Cloud Gateway 的 Filter 过滤器中。

    Filter 的分类

    Spring Cloud Gateway 提供了以下两种类型的过滤器,可以对请求和响应进行精细化控制。

    过滤器类型

    说明

    Pre 类型

    这种过滤器在请求被转发到微服务之前可以对请求进行拦截和修改,例如参数校验、权限校验、流量监控、日志输出以及协议转换等操作。

    Post 类型

    这种过滤器在微服务对请求做出响应后可以对响应进行拦截和再处理,例如修改响应内容或响应头、日志输出、流量监控等。

    按照作用范围划分,Spring Cloud gateway 的 Filter 可以分为 2 类:

    ●GatewayFilter:应用在单个路由或者一组路由上的过滤器。

    ●GlobalFilter:应用在所有的路由上的过滤器。

    GatewayFilter 网关过滤器

    GatewayFilter 是 Spring Cloud Gateway 网关中提供的一种应用在单个或一组路由上的过滤器。它可以对单个路由或者一组路由上传入的请求和传出响应进行拦截,并实现一些与业务无关的功能,比如登陆状态校验、签名校验、权限校验、日志输出、流量监控等。

    GatewayFilter 在配置文件(例如 application.yml)中的写法与 Predicate 类似,格式如下:

    spring:cloud:  gateway:    routes:      - id: xxxx        uri: xxxx        predicates:          - Path=xxxx        filters:          - AddRequestParameter=X-Request-Id,1024 #过滤器工厂会在匹配的请求头加上一对请求头,名称为 X-Request-Id 值为 1024          - PrefixPath=/dept #在请求路径前面加上 /dept          ……

    Spring Cloud Gateway 内置了多达 31 种 GatewayFilter,下表中列举了几种常用的网关过滤器及其使用示例。

    路由过滤器

    描述

    参数

    使用示例

    AddRequestHeader

    拦截传入的请求,并在请求上添加一个指定的请求头参数。

    name:需要添加的请求头参数的 key;value:需要添加的请求头参数的 value。

    - AddRequestHeader=my-request-header,1024

    AddRequestParameter

    拦截传入的请求,并在请求上添加一个指定的请求参数。

    name:需要添加的请求参数的 key;value:需要添加的请求参数的 value。

    - AddRequestParameter=my-request-param,c.biancheng.net

    AddResponseHeader

    拦截响应,并在响应上添加一个指定的响应头参数。

    name:需要添加的响应头的 key;value:需要添加的响应头的 value。

    - AddResponseHeader=my-response-header,c.biancheng.net

    PrefixPath

    拦截传入的请求,并在请求路径增加一个指定的前缀。

    prefix:需要增加的路径前缀。

    - PrefixPath=/consumer

    PreserveHostHeader

    转发请求时,保持客户端的 Host 信息不变,然后将它传递到提供具体服务的微服务中。

    - PreserveHostHeader

    RemoveRequestHeader

    移除请求头中指定的参数。

    name:需要移除的请求头的 key。

    - RemoveRequestHeader=my-request-header

    RemoveResponseHeader

    移除响应头中指定的参数。

    name:需要移除的响应头。

    - RemoveResponseHeader=my-response-header

    RemoveRequestParameter

    移除指定的请求参数。

    name:需要移除的请求参数。

    - RemoveRequestParameter=my-request-param

    RequestSize

    配置请求体的大小,当请求体过大时,将会返回 413 Payload Too Large。

    maxSize:请求体的大小。

    - name: RequestSize args: maxSize: 5000000

    GlobalFilter 全局过滤器

    GlobalFilter 是一种作用于所有的路由上的全局过滤器,通过它,我们可以实现一些统一化的业务功能,例如权限认证、IP 访问限制等。当某个请求被路由匹配时,那么所有的 GlobalFilter 会和该路由自身配置的 GatewayFilter 组合成一个过滤器链。Spring Cloud Gateway 为我们提供了多种默认的 GlobalFilter,例如与转发、路由、负载均衡等相关的全局过滤器。但在实际的项目开发中,通常我们都会自定义一些自己的 GlobalFilter 全局过滤器以满足我们自身的业务需求,而很少直接使用 Spring Cloud Config 提供这些默认的 GlobalFilter。

    关于默认的全局过滤器的详细内容,请参考 Spring Cloud 官网

    https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#global-filters

    9. 全局过滤器的各种姿势9.1 白名单路由、获取请求URL参数
    @Componentpublic class GlobalFilter1 implements GlobalFilter, Ordered {  @Override  public int getOrder() {      return Integer.MIN_VALUE;  }  @Override  public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {      System.out.println("通过参数过滤器");      //1.对于特定路由的放行逻辑      URI uri = exchange.getRequest().getURI();      if ("/api/v1/service8".equals(uri.getPath())) {          return chain.filter(exchange);      }      //2.获取URL参数      MultiValueMap<String, String> queryParams = exchange.getRequest().getQueryParams();      //3.其他路由进行权限校验      if (null == queryParams.get("p1")) {          exchange.getResponse().setStatusCode(HttpStatus.BAD_REQUEST);          return exchange.getResponse().writeWith(Flux.just(exchange.getResponse().bufferFactory()                  .wrap("请填写请求参数p1".getBytes())));      } else {          return chain.filter(exchange);      }  }}

    PS:

    getOrder方法可以用于指定当前filter在执行链路的顺序,整个链路按照Order由小到大的顺序执行对于白名单链路放行,整个filter链路都要编写放行逻辑9.2 获取请求体参数
    @Componentpublic class GatewayFilter2 implements GatewayFilter, Ordered {  @Override  public int getOrder() {      return Integer.MIN_VALUE + 1;  }  @Override  public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {      System.out.println("通过特定过滤器2");      //1.获取POST请求体参数      Mono<Void> postBody = DataBufferUtils.join(exchange.getRequest().getBody()).flatMap(dataBuffer -> {          //2.获取请求体参数          byte[] bytes = new byte[dataBuffer.readableByteCount()];          dataBuffer.read(bytes);          String bodyString = new String(bytes, StandardCharsets.UTF_8);          //TODO 3.在这里可以对请求体参数为所欲为了          System.out.println("bodyString:" + bodyString);          //4.释放内存          DataBufferUtils.release(dataBuffer);          //5.以下操作为了将请求体再次封装写回到request里          exchange.getAttributes().put("POST_BODY", bodyString);          Flux<DataBuffer> cachedFlux = Flux.defer(() -> {              DataBuffer buffer = exchange.getResponse().bufferFactory().wrap(bytes);              return Mono.just(buffer);          });          //6.将请求体再次封装写回到request里,传到下一级,否则,由于请求体已被消费,后续的服务将取不到值          ServerHttpRequest mutatedRequest = new ServerHttpRequestDecorator(exchange.getRequest()) {              @Override              public Flux<DataBuffer> getBody() {                  return cachedFlux;              }          };          //7.封装request,传给下一级          return chain.filter(exchange.mutate().request(mutatedRequest).build());      });      //8.返回      return postBody;  }}
    9.3 为某个路由或某一组路由定制专属过滤器
    @Configurationpublic class GatewayConfig {  @Bean  public RouteLocator appRouteLocator(RouteLocatorBuilder builder) {      return builder.routes().route(r -> r.path("/api/v1/service5/**")              .filters(f -> f.filter(new GatewayFilter2()))              .uri("lb://service5")              .id("service5_routh"))              .build();  }}
    9.4 处理请求响应
    @Componentpublic class AfterGlobalFilter implements GlobalFilter, Ordered {  @Override  public int getOrder() {      return NettyWriteResponseFilter.WRITE_RESPONSE_FILTER_ORDER;  }  @Override  public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {      //1.获取字节工厂      DataBufferFactory bufferFactory = exchange.getResponse().bufferFactory();      //3.获取响应体      final ServerHttpResponseDecorator serverHttpResponseDecorator = new ServerHttpResponseDecorator(exchange.getResponse()) {          @Override          public Mono<Void> writeWith(Publisher<? extends DataBuffer> body) {              if (body instanceof Flux) {                  //4.返回响应                  Flux<? extends DataBuffer> fluxBody = (Flux<? extends DataBuffer>) body;                  return super.writeWith(fluxBody.map(dataBuffer -> {                      //5.读取字节                      byte[] content = new byte[dataBuffer.readableByteCount()];                      dataBuffer.read(content);                      //6.释放掉内存                      DataBufferUtils.release(dataBuffer);                      //7.这段代码我们可以自由发挥                      String responseStr = new String(content, StandardCharsets.UTF_8);                      super.setStatusCode(HttpStatus.valueOf(Integer.parseInt(responseStr)));                      //8.返回                      return bufferFactory.wrap(content);                  }));              }              return super.writeWith(body);          }      };      //2.返回      System.out.println("通过响应过滤器");      return chain.filter(exchange.mutate().response(serverHttpResponseDecorator).build());  }}
    source: /u27809381/ca4o9w/ggap14

    一、gateway电脑

    gateway是美国第四大个人电脑厂商,今年8月份被台湾的宏碁电脑收购了,使宏碁超越联想成为全球第三大电脑厂商。gateway这个配置在陕西卖4500还是有可能的,送2000多块钱的东西就不可能了,肯定是一堆垃圾软件,没有多少有实用价值的,它标称500元的软件可能对你一文不值!

    二、双网卡,静态路由设置失败。如何解决?

    设置前需要先删除原来的路由。
    下面一文供你参考:
    双网卡下添加静态路由
    系统平台:WIN8.1
    情况描述:电脑上安装了2个网卡,一个连接外网(自动分配IP,路由地址为192.168.0.1),
    一个连接单位内网(网卡静态IP为10.37.130.130,网关10.37.130.129,子网掩码255.255.255.252,内网网段10.37.0.0)
    任务目标:按需访问内外网
    操作方法:用管理员权限打开CMD,
    1、删除默认路由:输入 route delete 0.0.0.0 ( 0.0.0.0是指所有地址)
    2、添加静态路由
    2-1,添加内网静态路由:route add 10.37.0.0 mask 255.255.0.0 10.37.132.129 -p
    注:它表示访问10.37.0.0网段的所有数据都要经过网关10.37.132.129,-p表示Persistent(持久有效的意思,重启后依然生效)
    2-2,添加外网静态路由:route add 0.0.0.0 mask 0.0.0.0 192.168.0.1 -p
    注:它表示访问0.0.0.0网址和0.0.0.0网段,即任意网址任意网段,访问经过外网网关192.168.0.1。
    3、设置完成后,输入route print 看一下路由表是否添加成功,再ping内外网的网址测试下是否有效。
    经验教训:
    我试验过好几次都失败,能上外网但上不了内网。检查后发现在2-1步骤中把目标地址的子网掩码范围设置的太小,我设置成了255.255.255.0,忽视了内网中可能存在其他地址设置。如果想范围更大一些的话,还可以把子网掩码改成255.0.0.0,目标地址改成10.0.0.0
    ——————————————————————————————————————————
    知识点:
    ROUTE路由命令简单解说
    ROUTE命令格式如下:
    ROUTE [-f] [-p] [command [destination] [MASK netmask] [gateway] [METRIC metric] [IF interface]
    其中 –f 参数用于清除路由表,-p参数用于永久保留某条路由(即在系统重启时不会丢失路由)。
    Command主要有PRINT(打印)、ADD(添加)、DELETE(删除)、CHANGE(修改)共4个命令。
    Destination代表所要达到的目标IP地址。
    MASK是子网掩码的关键字。Netmask代表具体的子网掩码,如果不加说明,默认是255.255.255.255(单机IP地址),因此键入掩码时候要特别小心,要确认添加的是某个IP地址还是IP网段。如果代表全部出口子网掩码可用0.0.0.0。
    Gateway代表出口网关。
    其他interface和metric分别代表特殊路由的接口数目和到达目标地址的代价,一般可不予理会。

    三、计算机网络知识点

    一、计算机网络概述

    1.1 计算机网络的分类

    按照网络的作用范围:广域网(WAN)、城域网(MAN)、局域网(LAN);

    按照网络使用者:公用网络、专用网络。

    1.2 计算机网络的层次结构

    TCP/IP四层模型与OSI体系结构对比:

    1.3 层次结构设计的基本原则

    各层之间是相互独立的;

    每一层需要有足够的灵活性;

    各层之间完全解耦。

    1.4 计算机网络的性能指标

    速率:bps=bit/s 时延:发送时延、传播时延、排队时延、处理时延 往返时间RTT:数据报文在端到端通信中的来回一次的时间。

    二、物理层

    物理层的作用:连接不同的物理设备,传输比特流。该层为上层协议提供了一个传输数据的可靠的物理媒体。简单的说,物理层确保原始的数据可在各种物理媒体上传输。

    物理层设备:

    中继器【Repeater,也叫放大器】:同一局域网的再生信号;两端口的网段必须同一协议;5-4-3规程:10BASE-5以太网中,最多串联4个中继器,5段中只能有3个连接主机;

    集线器:同一局域网的再生、放大信号(多端口的中继器);半双工,不能隔离冲突域也不能隔离广播域。

    信道的基本概念:信道是往一个方向传输信息的媒体,一条通信电路包含一个发送信道和一个接受信道。

    单工通信信道:只能一个方向通信,没有反方向反馈的信道;

    半双工通信信道:双方都可以发送和接受信息,但不能同时发送也不能同时接收;

    全双工通信信道:双方都可以同时发送和接收。

    三、数据链路层

    3.1 数据链路层概述

    数据链路层在物理层提供的服务的基础上向网络层提供服务,其最基本的服务是将源自网络层来的数据可靠地传输到相邻节点的目标机网络层。数据链路层在不可靠的物理介质上提供可靠的传输。

    该层的作用包括: 物理地址寻址、数据的成帧、流量控制、数据的检错、重发 等。

    有关数据链路层的重要知识点:

    数据链路层为网络层提供可靠的数据传输;

    基本数据单位为帧;

    主要的协议:以太网协议;

    两个重要设备名称:网桥和交换机。

    封装成帧:“帧”是 数据链路层 数据的基本单位:

    透明传输:“透明”是指即使控制字符在帧数据中,但是要当做不存在去处理。即在控制字符前加上转义字符ESC。

    3.2 数据链路层的差错监测

    差错检测:奇偶校验码、循环冗余校验码CRC

    奇偶校验码–局限性:当出错两位时,检测不到错误。

    循环冗余检验码:根据传输或保存的数据而产生固定位数校验码。

    3.3 最大传输单元MTU

    最大传输单元MTU(Maximum Transmission Unit),数据链路层的数据帧不是无限大的,数据帧长度受MTU限制.

    路径MTU:由链路中MTU的最小值决定。

    3.4 以太网协议详解

    MAC地址:每一个设备都拥有唯一的MAC地址,共48位,使用十六进制表示。

    以太网协议:是一种使用广泛的局域网技术,是一种应用于数据链路层的协议,使用以太网可以完成相邻设备的数据帧传输:

    局域网分类:

    Ethernet以太网IEEE802.3:

    以太网第一个广泛部署的高速局域网

    以太网数据速率快

    以太网硬件价格便宜,网络造价成本低

    以太网帧结构:

    类型:标识上层协议(2字节)

    目的地址和源地址:MAC地址(每个6字节)

    数据:封装的上层协议的分组(46~1500字节)

    CRC:循环冗余码(4字节)

    以太网最短帧:以太网帧最短64字节;以太网帧除了数据部分18字节;数据最短46字节;

    MAC地址(物理地址、局域网地址)

    MAC地址长度为6字节,48位;

    MAC地址具有唯一性,每个网络适配器对应一个MAC地址;

    通常采用十六进制表示法,每个字节表示一个十六进制数,用 - 或 : 连接起来;

    MAC广播地址:FF-FF-FF-FF-FF-FF。

    四、网络层

    网络层的目的是实现两个端系统之间的数据透明传送,具体功能包括寻址和路由选择、连接的建立、保持和终止等。数据交换技术是报文交换(基本上被分组所替代):采用储存转发方式,数据交换单位是报文。

    网络层中涉及众多的协议,其中包括最重要的协议,也是TCP/IP的核心协议——IP协议。IP协议非常简单,仅仅提供不可靠、无连接的传送服务。IP协议的主要功能有:无连接数据报传输、数据报路由选择和差错控制。

    与IP协议配套使用实现其功能的还有地址解析协议ARP、逆地址解析协议RARP、因特网报文协议ICMP、因特网组管理协议IGMP。具体的协议我们会在接下来的部分进行总结,有关网络层的重点为:

    1、网络层负责对子网间的数据包进行路由选择。此外,网络层还可以实现拥塞控制、网际互连等功能;

    2、基本数据单位为IP数据报;

    3、包含的主要协议:

    IP协议(Internet Protocol,因特网互联协议);

    ICMP协议(Internet Control Message Protocol,因特网控制报文协议);

    ARP协议(Address Resolution Protocol,地址解析协议);

    RARP协议(Reverse Address Resolution Protocol,逆地址解析协议)。

    4、重要的设备:路由器。

    路由器相关协议

    4.1 IP协议详解

    IP网际协议是 Internet 网络层最核心的协议。虚拟互联网络的产生:实际的计算机网络错综复杂;物理设备通过使用IP协议,屏蔽了物理网络之间的差异;当网络中主机使用IP协议连接时,无需关注网络细节,于是形成了虚拟网络。

    IP协议使得复杂的实际网络变为一个虚拟互联的网络;并且解决了在虚拟网络中数据报传输路径的问题。

    其中,版本指IP协议的版本,占4位,如IPv4和IPv6;首部位长度表示IP首部长度,占4位,最大数值位15;总长度表示IP数据报总长度,占16位,最大数值位65535;TTL表示IP数据报文在网络中的寿命,占8位;协议表明IP数据所携带的具体数据是什么协议的,如TCP、UDP。

    4.2 IP协议的转发流程

    4.3 IP地址的子网划分

    A类(8网络号+24主机号)、B类(16网络号+16主机号)、C类(24网络号+8主机号)可以用于标识网络中的主机或路由器,D类地址作为组广播地址,E类是地址保留。

    4.4 网络地址转换NAT技术

    用于多个主机通过一个公有IP访问访问互联网的私有网络中,减缓了IP地址的消耗,但是增加了网络通信的复杂度。

    NAT 工作原理:

    从内网出去的IP数据报,将其IP地址替换为NAT服务器拥有的合法的公共IP地址,并将替换关系记录到NAT转换表中;

    从公共互联网返回的IP数据报,依据其目的的IP地址检索NAT转换表,并利用检索到的内部私有IP地址替换目的IP地址,然后将IP数据报转发到内部网络。

    4.5 ARP协议与RARP协议

    地址解析协议 ARP(Address Resolution Protocol):为网卡(网络适配器)的IP地址到对应的硬件地址提供动态映射。可以把网络层32位地址转化为数据链路层MAC48位地址。

    ARP 是即插即用的,一个ARP表是自动建立的,不需要系统管理员来配置。

    RARP(Reverse Address Resolution Protocol)协议指逆地址解析协议,可以把数据链路层MAC48位地址转化为网络层32位地址。

    4.6 ICMP协议详解

    网际控制报文协议(Internet Control Message Protocol),可以报告错误信息或者异常情况,ICMP报文封装在IP数据报当中。

    ICMP协议的应用:

    Ping应用:网络故障的排查;

    Traceroute应用:可以探测IP数据报在网络中走过的路径。

    4.7网络层的路由概述

    关于路由算法的要求:正确的完整的、在计算上应该尽可能是简单的、可以适应网络中的变化、稳定的公平的。

    自治系统AS: 指处于一个管理机构下的网络设备群,AS内部网络自治管理,对外提供一个或多个出入口,其中自治系统内部的路由协议为内部网关协议,如RIP、OSPF等;自治系统外部的路由协议为外部网关协议,如BGP。

    静态路由: 人工配置,难度和复杂度高;

    动态路由:

    链路状态路由选择算法LS:向所有隔壁路由发送信息收敛快;全局式路由选择算法,每个路由器计算路由时,需构建整个网络拓扑图;利用Dijkstra算法求源端到目的端网络的最短路径;Dijkstra(迪杰斯特拉)算法

    距离-向量路由选择算法DV:向所有隔壁路由发送信息收敛慢、会存在回路;基础是Bellman-Ford方程(简称B-F方程);

    4.8 内部网关路由协议之RIP协议

    路由信息协议 RIP(Routing Information Protocol)【应用层】,基于距离-向量的路由选择算法,较小的AS(自治系统),适合小型网络;RIP报文,封装进UDP数据报。

    RIP协议特性:

    RIP在度量路径时采用的是跳数(每个路由器维护自身到其他每个路由器的距离记录);

    RIP的费用定义在源路由器和目的子网之间;

    RIP被限制的网络直径不超过15跳;

    和隔壁交换所有的信息,30主动一次(广播)。

    4.9 内部网关路由协议之OSPF协议

    开放最短路径优先协议 OSPF(Open Shortest Path First)【网络层】,基于链路状态的路由选择算法(即Dijkstra算法),较大规模的AS ,适合大型网络,直接封装在IP数据报传输。

    OSPF协议优点:

    安全;

    支持多条相同费用路径;

    支持区别化费用度量;

    支持单播路由和多播路由;

    分层路由。

    RIP与OSPF的对比(路由算法决定其性质):

    4.10外部网关路由协议之BGP协议

    BGP(Border Gateway Protocol)边际网关协议【应用层】:是运行在AS之间的一种协议,寻找一条好路由:首次交换全部信息,以后只交换变化的部分,BGP封装进TCP报文段.

    五、传输层

    第一个端到端,即主机到主机的层次。传输层负责将上层数据分段并提供端到端的、可靠的或不可靠的传输。此外,传输层还要处理端到端的差错控制和流量控制问题。

    传输层的任务是根据通信子网的特性,最佳的利用网络资源,为两个端系统的会话层之间,提供建立、维护和取消传输连接的功能,负责端到端的可靠数据传输。在这一层,信息传送的协议数据单元称为段或报文。

    网络层只是根据网络地址将源结点发出的数据包传送到目的结点,而传输层则负责将数据可靠地传送到相应的端口。

    有关网络层的重点:

    传输层负责将上层数据分段并提供端到端的、可靠的或不可靠的传输以及端到端的差错控制和流量控制问题;

    包含的主要协议:TCP协议(Transmission Control Protocol,传输控制协议)、UDP协议(User Datagram Protocol,用户数据报协议);

    重要设备:网关。

    5.1 UDP协议详解

    UDP(User Datagram Protocol: 用户数据报协议),是一个非常简单的协议。

    UDP协议的特点:

    UDP是无连接协议;

    UDP不能保证可靠的交付数据;

    UDP是面向报文传输的;

    UDP没有拥塞控制;

    UDP首部开销很小。

    UDP数据报结构:

    首部:8B,四字段/2B【源端口 | 目的端口 | UDP长度 | 校验和】 数据字段:应用数据

    5.2 TCP协议详解

    TCP(Transmission Control Protocol: 传输控制协议),是计算机网络中非常复杂的一个协议。

    TCP协议的功能:

    对应用层报文进行分段和重组;

    面向应用层实现复用与分解;

    实现端到端的流量控制;

    拥塞控制;

    传输层寻址;

    对收到的报文进行差错检测(首部和数据部分都检错);

    实现进程间的端到端可靠数据传输控制。

    TCP协议的特点:

    TCP是面向连接的协议;

    TCP是面向字节流的协议;

    TCP的一个连接有两端,即点对点通信;

    TCP提供可靠的传输服务;

    TCP协议提供全双工通信(每条TCP连接只能一对一);

    5.2.1 TCP报文段结构:

    最大报文段长度:报文段中封装的应用层数据的最大长度。

    TCP首部:

    序号字段:TCP的序号是对每个应用层数据的每个字节进行编号

    确认序号字段:期望从对方接收数据的字节序号,即该序号对应的字节尚未收到。用ack_seq标识;

    TCP段的首部长度最短是20B ,最长为60字节。但是长度必须为4B的整数倍

    TCP标记的作用:

    5.3 可靠传输的基本原理

    基本原理:

    不可靠传输信道在数据传输中可能发生的情况:比特差错、乱序、重传、丢失

    基于不可靠信道实现可靠数据传输采取的措施:

    差错检测:利用编码实现数据包传输过程中的比特差错检测 确认:接收方向发送方反馈接收状态 重传:发送方重新发送接收方没有正确接收的数据 序号:确保数据按序提交 计时器:解决数据丢失问题;

    停止等待协议:是最简单的可靠传输协议,但是该协议对信道的利用率不高。

    连续ARQ(Automatic Repeat reQuest:自动重传请求)协议:滑动窗口+累计确认,大幅提高了信道的利用率。

    5.3.1TCP协议的可靠传输

    基于连续ARQ协议,在某些情况下,重传的效率并不高,会重复传输部分已经成功接收的字节。

    5.3.2 TCP协议的流量控制

    流量控制:让发送方发送速率不要太快,TCP协议使用滑动窗口实现流量控制。

    5.4 TCP协议的拥塞控制

    拥塞控制与流量控制的区别:流量控制考虑点对点的通信量的控制,而拥塞控制考虑整个网络,是全局性的考虑。拥塞控制的方法:慢启动算法+拥塞避免算法。

    慢开始和拥塞避免:

    【慢开始】拥塞窗口从1指数增长;

    到达阈值时进入【拥塞避免】,变成+1增长;

    【超时】,阈值变为当前cwnd的一半(不能DNS服务—>便于记忆的域名

    域名由点、字母和数字组成,分为顶级域(com,cn,net,gov,org)、二级域(baidu,taobao,qq,alibaba)、三级域(

    6.2 DHCP协议详解

    DHCP(Dynamic Configuration Protocol:动态主机设置协议):是一个局域网协议,是应用UDP协议的应用层协议。作用:为临时接入局域网的用户自动分配IP地址。

    6.3 HTTP协议详解

    文件传输协议(FTP):控制连接(端口21):传输控制信息(连接、传输请求),以7位ASCII码的格式。整个会话期间一直打开。

    HTTP(HyperText Transfer Protocol:超文本传输协议)【TCP,端口80】:是可靠的数据传输协议,浏览器向服务器发收报文前,先建立TCP连接,HTTP使用TCP连接方式(HTTP自身无连接)。

    HTTP请求报文方式:

    GET:请求指定的页面信息,并返回实体主体;

    POST:向指定资源提交数据进行处理请求;

    DELETE:请求服务器删除指定的页面;

    HEAD:请求读取URL标识的信息的首部,只返回报文头;

    OPETION:请求一些选项的信息;

    PUT:在指明的URL下存储一个文档。

    6.3.1 HTTP工作的结构

    6.3.2 HTTPS协议详解

    HTTPS(Secure)是安全的HTTP协议,端口号443。基于HTTP协议,通过SSL或TLS提供加密处理数据、验证对方身份以及数据完整性保护

    原文地址:

    关于gateway的问题,通过《双网卡,静态路由设置失败。如何解决?》、《计算机网络知识点》等文章的解答希望已经帮助到您了!如您想了解更多关于gateway的相关信息,请到本站进行查找!

    爱资源吧版权声明:以上文中内容来自网络,如有侵权请联系删除,谢谢。

    gateway
    windows下服务器环境的搭建! 双WiFi技术降临PC,老机型也将有望从中获益