zoukankan      html  css  js  c++  java
  • 《TCP/IP详解卷1》学习小结(二)Internet Protocol

    一.  总述

            IP(internet protocol)是TCP/IP协议簇的基础,在链接层中封装的IP datagram是网络间数据传输的一个基本单元,包括传输层的TCP,UDP等协议都是基于IP协议的。IP协议有个特点:IP协议是无连接的。我们知道,TCP是面向连接的,是可靠的传输协议;而UDP是无连接的,相应的也就不可靠,无法保证数据确实传输到了目的地。TCP面向连接,需要经过3次握手才能建立起可靠的数据传输的全双工的通道,这就导致了需要保存连接的状态等信息,增加实现的复杂程度。UDP无连接,自然也就更容易实现,维护起来也就更简单些。在现在的应用中,UDP与TCP都应用地很广泛,所以IP协议并不需要面向连接,因为需要可靠性的TCP自身去实现可靠性就行了。

            IP协议还有一个特点:IP datagram是独立的。这也是因为IP协议的无连接性。所以,IP datagram的传输顺序也不会确定。

            关于IP header的内容在此省略,读者可以很容易就从网上找到相关资料。我一直觉得这些比较死的东西不是重点。

    二.  IP 路由选路

            1.提到路由选路,就不得不提到路由表。每个路由表都包含以下内容:

            (1)网络ID。路由器的作用是连接不同的网络,进程有pid,线程有thread id,自然,网络也有网络ID。其实我们每天都在与网络ID打交道,比如B类IP地址的从左边开始的第3位到第16位都是网络ID(IP地址由网络ID与主机ID构成)。从原始的网络ID,到划分子网而产生的主机ID的数量会非常大,如果在路由表中保存主机ID,那么势必会导致路由表变得非常大,而这显然不是我们愿意看到的。而在路由表中只保存网络ID,通过路由器或网关来选路(选择把IP datagram发送到当前路由器所储存的某个网络ID),就可以在实现相同功能的同时大大缩小路由表的大小。

            (2)next hop.  当IP datagram的目的地址不在当前路由的网络ID中时,路由器就将IP datagram转发由next hop指示的下一个路由器。

            了解了路由表的内容,就很容易理解路由选路的过程了。当路由器接收到一个IP datagram,先判断这个datagram的目的地址是否在当前路由器所存储的网络ID中,如果在,就直接将datagram发送过去;如果不在,这时路由器就需要将datagram转发到next hop所指示的下一个路由器,然后再进行相同的操作,直到该datagram到达目的地或者被舍弃。(IP header中有个字段是TTL,规定了一个IP datagram的生命周期。每当datagram经过一个路由器时,TTL的值就减去1,直TTL==0时,就将其舍弃)。

            2.还有一个比较重要的概念:网关。这个概念是我一直比较模糊的。网关被称作IP路由器,网关的IP地址是具有路由功能的设备的IP地址。路由器就是一种具有路由功能的设备,所以简单的说,路由器的IP地址就是网关。

    三.  子网划分

            A类地址有7位网络号,24位主机号。对应A类地址,每个网络号有个主机。除去无效的全0bits主机号与全1bits主机号。

            B类地址有14位网络号,16位主机。对应B类地址,每个网络号有个主机。除去无效的全0bits主机号与全1bits主机号。

            一个A类地址,就可以有个主机,但是一般情况下一个局域网内不可能有如此多的主机,所以为了避免浪费IP地址,就应该给这些主机分类,即划分子网。这就好比进行知识管理的时候用标签或者类别给知识分类,有着便于管理等优点。但要注意,进行子网划分并不会增大总的IP地址的数量,仅仅是分类而已,这也类似于进行知识管理后知识的总量不会增加。

           下面用一个例子来说明子网划分的具体方法。

            一个B类地址:130.160.xxx.xxx(B类地址的范围是:128.0.0.0到191.255.255.255)。除了网络号后,后面的16bits是主机号;子网划分的基本目标是减少每个网络的主机数量,所以就把主机号分一部分成为子网号(可以把子网号也想像成为网络号的一部分,因为在功能上子网号与网络号是相同的)。这里我把主机号中的8位划分为子网号。那么,每个网络ID就会有个子网,每个子网,也会有个主机。这就达到了子网划分的目的了。

            还有一个概念,子网掩码:在进行子网划分后,将主机号置为0bit,将其他位置为1bit,那么上面那个例子的子网掩码就是:255.255.255.0。通过子网掩码,可以很轻易就看出每个子网的主机的数量。

    四.  Loopback Address

            这本是个很简单的point,但我有时就是对一些看似简单的概念不理解,而有时又通过某一个point就把之前很久都没有理解的概念给弄懂了,就好像捅破了一层窗户纸。这是不是“灵感”?嘿嘿。

            之前我一直没有理解这个回路地址是什么意思,通过本章的一个习题,我终于明白了。回路地址被置为127.0.0.1,localhost.比如本机的标号是A,对于A来说,127.0.0.1是localhost,本机A访问127.0.0.1就形成了一个回路。而机器B访问127.0.0.1是无法访问到A的。

    参考资料:《TCP/IP详解卷1:协议》第一版 英文版

    如果你觉得我的文章对你有帮助,请推荐一下,非常感谢!

            

  • 相关阅读:
    Django(app的概念、ORM介绍及编码错误问题)
    Django(完整的登录示例、render字符串替换和redirect跳转)
    Construct Binary Tree from Preorder and Inorder Traversal
    Single Number II
    Single Number
    Binary Tree Level Order Traversal II
    Binary Tree Level Order Traversal
    Binary Tree Zigzag Level Order Traversal
    Recover Binary Search Tree
    Add Binary
  • 原文地址:https://www.cnblogs.com/NeilHappy/p/2864999.html
Copyright © 2011-2022 走看看