zoukankan      html  css  js  c++  java
  • TCP/IP协议第一、二层

    toc

    总览

    OSI(Open System Interconnect)开放式系统互联网的7层分层与各层作用如下

    OIS七层模型与TCP五层模型对比


    IP提供不可靠服务,无连接协议,它只是尽可能快的将数据包从源节点送到目标节点,并不提供可能性保证
    IP是网络层的主要协议,ICMP协议使IP的附属协议
    TCP与UDP都使用IP协议,但是TCP是可靠的,UDP是不可靠的
    从下到上,链路层到传输层一般由内核协议栈中处理,再往上由应用程序处理
    分层的目的使得每层只需关注当前层的东西,不需要关注其他层的细节

    封包过程(封装)


    用户数据经过每一层之后,相应层都会为其增加一个首部

    拆包过程(分用)


    当主机收到一个以太网帧后,会逐层去除各协议层加上的首部,每层协议栈都需要对首部进行检查以确定接收到数据的上层协议

    链路层

    以太网与802.3帧格式

    DatalinkHeader

    DatalinkHeader为14 bytes,分别是6字节目的MAC地址、6字节源MAC地址、2字节数据包类型

    MAC全称是媒体访问控制(Medium Access Control)

    MAC地址是一个网卡的物理地址,使用十六进制表示,且占6个字节
    MAC地址全球唯一
    MAC的通信范围仅局限于同一子网内

    类型

    链路首部的2字节类型部分说明了IP数据报的包类型

    0x0800
    IP数据报
    0x0806
    ARP应答/请求
    0x8035
    RARP应答/请求
    0x8863/0x8864
    PPOE发现阶段与会话阶段

    MTU(Maximum Transmission Unit,最大传输单元)

    以太网与802.3都对MTU有最大和最小的限制

    • 以太网范围46~1500字节
    • 802.3范围38~1492字节
    • 不足46会有填充,即是PAD

    MTU是IP数据报部分加上层协议加数据正文的长度

    CRC

    最后一部分4字节的CRC(冗余循环检测)值是FCS(frame check sequence)

    环回接口


    当发现目标地址是广播或多播地址时,如果必要,数据会被复制一份给环回驱动程序,然后再送到以太网上,因为广播和多播包含主机本身
    数据发给环回接口是会经过协议栈的,但仅仅只到网络层(IP层),不会经过网卡,可用于检测协议栈是否正常

    ARP

    ARP协议全称为地址解析协议(Address Resolution Protocol),负责将IP地址解析成对应的MAC地址
    当目标地址和源地址在同一网段时,ARP请求会被广播到该网段的所有主机,目标主机接收到请求后会以单播形式应答,目标MAC也就找到了,为了避免每次都ARP请求,目标主机的IP地址、MAC地址会存入本地ARP缓存,并保留一段时间。下次请求则直接查询ARP缓存,没有再进行ARP请求

    相关知识

    二层设备之交换机

    工作在链路层的交换机(Switch)与工作在物理层Hub集线器不同,Hub只会无脑转发它收到的所有消息,而交换机在首次广播通信成功后会记住目的MAC地址和自身端口的对应关系,也就是一张称为转发表的MAC表,以后对同一目标的通讯中不会再广播了

    网络环路问题

    当两个交换机直接互联时,可能会出现环路问题,并且导致广播风暴,此时需要通过生成树(STP Spanning Tree Protocol)算法来解决,STP协议工作时1看节点优先级2看距离

    虚拟隔离

    也就是VLAN,也叫虚拟局域网,可以解决广播问题和安全问题,避免被抓包,虚拟隔离通过在二层协议头上加TAG来实现,内有一个VLAN ID,交换机只会转发拥有相同VLAN ID的数据。

    TCP/IP全部协议如下





    原创不易,转载请注明出处,谢谢
  • 相关阅读:
    上下文有关文法
    sqlserver cte 速度慢
    hibernate tools eclipse 安装
    sts java nullpointer exception
    Oracle RAC集群体系结构
    bean scope scoped-proxy
    hibernate persist不能插入到表中
    system.out 汉字乱码
    NoSQL数据库(转)
    在PowerShell中获取本地的RAM信息(容量)
  • 原文地址:https://www.cnblogs.com/Keeping-Fit/p/13994459.html
Copyright © 2011-2022 走看看