zoukankan      html  css  js  c++  java
  • TCP/IP 协议大致的概念

    最近在看《图解HTTP》和《HTTP权威指南》,对TCP/IP大致过了一下。

      TCP/IP 不仅仅是TCP 和 IP 

      TCP/IP 是协议族,与之相对的事IEEE等标准组织设定的OSI七层。这里面涉及到的协议有:

      • TCP   传输控制协议                     传输层。
      • IP     网际协议                           网络层。
      • ARP    地址解析协议                        数据链路层协议。
      • UDP    用户数据报协议                  传输层。
      • ICMP   Internet控制报文协议          网络层。
      • DNS    域名系统                      为ip绑定逻辑名称。
      • HTTP   超文本传输协议                 应用层。

    作为一名java web工程师,可以说90%涉及的工作是HTTP协议,如果做IM或者云存储可能会涉及到TCP+UDP。所以,HTTP和TCP,是基本功。

         为什么要分层,要能理解,每一层的意义所在 

      作为分隔两地的计算机系统上不同应用程序,他们之间如果需要通信,首先要知道对方是谁。

    • 传输层是怎么区分不同对象的,ip:端口
      • 然后我要传输数据,数据按照什么方式打包送过去呢?
        • 报文 Message,报文是什么,是用户自定义长度(相对于底层协议来说)的二进制数据。然后在Message前加上传输层报文。
    • 传输层的数据到网络层,然后网络层是怎么区分不同对象的,ip
      • 然后我要传输数据,数据按照什么方式打包送过去呢?
        • 报文  Package,是我网络层无差别地对你传输层大数据报进行切割的小单位。然后在package前加上网络层报文。
    • 网络层到数据链路层,怎么办,这个时候,已经没有ip了,有的是什么,mac,真实物理世界的身份证。
      • 然后我要传输数据,数据按照什么方式打包送过去呢?
        • 分组 frame, 进一步进行切割的单位。然后在frame前加上链路层报文。

     可以看到,这三层的行为模式很相近。那为什么要分为三层。

    因为,数据传输要解决的问题太多了。通过对问题进行归类,不同层次来专门解决不同问题。有点工业2.0,福特生产线的味道。

    传输层,要解决的事,两个应用程序间传输数据。其实问题很抽象,因为层次高。所以,只设定两个应用程序的地址(ip+端口)就好了。

    网络层,要解决在跨越多个网络,长距离的情况下,我怎么找到另外一个主机,其实核心就是路由寻址。

    然后,就进入了“最后半公里”,将ip转换为mac,在链路层传输分组。

    分层,也是大型软件设计的工程学思想。 

           还有,每到下面一层时,一般都会进行数据切片分割?   

      

      因为需要复用。复用的场景是不同的。比如在数据链路层,有很多编码方式,还有什么频分复用、码分复用、时分复用等等,通过不同的编码方式来进行复用。

      在网络层也是,通过分片,我可以走多个通路。并行的思想。

      在传输层,有一个概念叫带宽,就算我能一下把所有数据给你送过去,你机器的内存难道不会撑爆吗。

                 

  • 相关阅读:
    二叉排序树的建立与遍历 Anti
    SDUT ACM 2144 最小生成树,克鲁斯卡尔模板 Anti
    用STL优先队列对字符串排序 Anti
    HDU 1176 免费馅饼 水dp Anti
    SDUT ACM 2408 Pick apples 贪心+完全背包 Anti
    筛选法找素数模板 Anti
    JS获取事件的目标
    Javascript中的Prototype和Constructor
    有关于ValueOf( )和toString( )
    JavaScript Animate
  • 原文地址:https://www.cnblogs.com/haore147/p/5510462.html
Copyright © 2011-2022 走看看