zoukankan      html  css  js  c++  java
  • TCP/IP协议族体系结构:死也不能忘记的四个层

    1、死也不能忘记的四个层


    ①数据链路层
    实现了网卡接口的网络驱动程序,以处理数据在物理媒介(比如以太网、令牌环等)上的传输。主要的协议ARP和RARP
    经过数据链路层封装的数据成为帧,有以太网帧、令牌环帧,其中,以太网帧的格式:

    MTU最大传输单元,即帧最多能携带多少上层协议数据(比如IP数据报),正因为如此,过长的IP数据报可能需要分片传输。
    说明:以太网帧的MTU=1500,可以通过ifconfig、netstat查看,因此它携带的IP数据报的数据部分最多是1480个字节(IP数据报头部占20个字节)
    ②网络层
    主要的协议是IP和ICMP
    功能:
    路由选择:通信的两台主机不是直接相连的,而是经过多个中间节点(路由器)连接,网络层的任务就是选择这些中间节点,已确定两台主机之间的通信
    IP协议是根据数据包的目的IP地址来决定如何投递它。如果数据包不能直接发送给目标主机,那么IP协议将会为数据包选择合适的下一跳路由器,并将数据包交付给该路由器来转发。多次重复该过程,直到数据包到达目的主机,或者由于发送失败数据包而被丢弃。可以发现,网络层的IP协议使用逐跳的方式确定通信路径。
    ICMP协议(因特网控制报文协议)主要用于检测网络连接,分为两种类型:差错报文、查询报文。详细介绍看图示:

    ③传输层
    主要协议:TCP、UDP、SCTP
    功能:为两台主机上的应用程序提供端到端(end-to-end)的通信。与网络层的IP协议使用逐跳的通信方式缺人通信路径不同,传输层只关心src和dst,并不关心数据包的中转过程。

    ④应用层
    在用户空间实现,主要协议:telnet、OSPF、DNS、ping程序等

    2、TCP/IP工作原理以及流程
    ①封装
    Q1:上层协议是如何使用下层协议提供的服务的呢?—封装
    A1:应用程序的数据在发送到物理网络上之前,将沿着协议栈从上向下一次传递,每层协议都将在上层数据的基础上加上自己的头部信息。
    TCP–>TCP报文段、UDP–>UDP数据报、IP–>IP数据包、数据链路层–>帧(以太网帧、令牌环帧)
    说明:TCP、UDP对数据的封装类似,不同的是,UDP无需为数据保存副本,因为UDP是不可靠的服务,当UDP数据报被成功发送之后,UDP缓冲区中的该数据报就被丢弃了(如果应用程序检测到该数据报未能被接收方正确接收,并打算重发该数据包,则应用程序需要从用户空间将该数据拷贝到UDP内核发送缓冲区中)。


    ②分用
    Q2:当帧在物理网络上传输到目的主机时,将会沿着协议自底向上依次传递,具体执行过程?—分用
    A2:各层协议将依次处理帧中本层负责的头部数据,以获取所需要的信息,并最终将处理后的帧交给目标应用程序。

    (从下到上)以太网帧的分用过程,图示:

    可以看到:
    1. IP、ARP、RARP协议都使用帧传输数据,所以帧的头部中以太网帧的类型来区分它们。IP、ARP、RARP对应的类型分别是:0x800、0x806、0x835。
    2. ICMP协议、TCP协议、UDP协议都是用IP协议,所以IP数据报的头部采用16位的协议字段来区分它们
    3. TCP、UDP则通过16位的端口号字段区分上层应用程序

    ③对等层通信
    在两个端系统的同一层上,双方都有对应的一个或多个协议进行通信

    https://blog.csdn.net/weixin_36750623/article/details/83956487

  • 相关阅读:
    Irrlicht引擎I 配置
    lua学习笔记
    C语言 可变参数
    lua5.2版本在VS2010下的环境搭建
    确实太悠闲了
    【python游戏编程之旅】第四篇---pygame中加载位图与常用的数学函数。
    【LINUX/UNIX网络编程】之简单多线程服务器(多人群聊系统)
    【python游戏编程之旅】第三篇---pygame事件与设备轮询
    【python游戏编程之旅】第二篇--pygame中的IO、数据
    【python游戏编程之旅】第一篇---初识pygame
  • 原文地址:https://www.cnblogs.com/wangenxian/p/10929411.html
Copyright © 2011-2022 走看看