zoukankan      html  css  js  c++  java
  • 应用层协议与传输层、网络层、数据链路层在编码上的区别

    一、TCP/IP协议各层作用

    协议层 关键元素 作用
    数据链路层 MAC地址 依靠MAC地址,构建同子网主机到主机的数据包传输链路
    网络层 IP地址 依靠IP地址,构建源子网到目标子网的数据包传输链路
    传输层 端口 依靠端口,构建源进程到目标进程的传输链路
    应用层 应用自定义规则 依靠客户端与服务端共同定义的规则完成客户端与服务端的交互

    二、应用层协议与传输层、网络层、数据链路层在编码上的区别

    2.1 问题描述

    有很多大谈四层模型、五层模型、七层模型文章书藉,但一般都很少会谈及应用层协议与传输层、网络层、数据链路层在编码上的区别的问题。

    但就个人而言长时间有着以下疑惑:

    从“看”的角度----传输层、网络层、数据链路层的内容是一堆不容易看懂的十六进制数;而应用层是一些可读的字符串

    从“写”的角度----在手动构造MAC头/IP头/TCP头时,一个IP、一个端口要进行半天的转换和拼接;而应用层都是string+=xxxx就完事了

    文章书藉都没说到应用层协议与传输层、网络层、数据链路层有什么区别,但为什么在以上“看”和“写”两个角度上给人迵然不同的感觉?

    2.2 原因说明

    简单而言造成这个问题的原因是:传输层/网络层/数据链路层的内容多用二进制代号或者数值类型,而应用层使用的是ASCII码。

    2.3 举例说明

    下面以一个ip地址--192.168.220.128--在网络层和应用层的各自的表示方法进行说明

    协议层 192.168.220.128写法 说明
    网络层 c0 a8 dc 80 c0是192的十六进制表示方式,a8是168的十六进制表示方式,依此类推
    应用层 3139322e3136382e3232302e3132380d0a 31是1的ascii码,39是9的ascii码,依此类推

    2.4 原因探究

    传输层/网络层/数据链路层的内容多用二进制代号或者数值类型不直接用ASCII的原因,应该一是互联网初期网络资源宝贵需要尽量节约,二是一般程序员并不需要手动编写这三层协议头。

    应用层不用二进制代号或者数值类型而要用ASCII的原因,主要是因为应用层是广大程序员要涉及的层次如果二进制代号或者数值类型而不用ASCII,基本没法进行。

    2.5 克服恐惧

    无论是应用层还是传输层、网络层、数据链路层,可以认为其内容都会被组到同一个数组中,一同以二进制的方式发送出去,并没有什么分界线。

    MAC头:

    IP头:

    TCP头:

    HTTP头:

  • 相关阅读:
    pip不是内部或外部命令也不是可运行的程序或批处理文件的问题
    动态规划 leetcode 343,279,91 & 639. Decode Ways,62,63,198
    动态规划 70.climbing Stairs ,120,64
    (双指针+链表) leetcode 19. Remove Nth Node from End of List,61. Rotate List,143. Reorder List,234. Palindrome Linked List
    建立链表的虚拟头结点 203 Remove Linked List Element,82,147,148,237
    链表 206 Reverse Linked List, 92,86, 328, 2, 445
    (数组,哈希表) 219.Contains Duplicate(2),217 Contain Duplicate, 220(3)
    重装系统
    java常用IO
    端口
  • 原文地址:https://www.cnblogs.com/lsdb/p/8671306.html
Copyright © 2011-2022 走看看