1 7 8 9 10 11 上一个 下一个 229 回复 最新回复: Jan 8, 2018 5:50 PM hitjackma 转至原始发贴 RSS
  • 120. Re: 网络基本功系列:细说网络那些事儿(8月25日更新)
    stephen.feng

    哦,理解了,谢谢楼主解答!

    楼主从事的工作应该偏重底层吧,我这种程序员感觉你讲的知识很深入,但是又很容易理解。再次谢谢啦!

  • 121. Re: 网络基本功系列:细说网络那些事儿(8月25日更新)
    Zhang,Jiawen

    请问一下,这里的交换机port和我们平时写一个网络应用时要监听的port是否一样?

    交换机的端口是物理端口,网络监听的端口是逻辑端口,这种端口是用来区分网络服务用的通信协议端口,是不一样的概念。

    看一下百度百科:

    如果把IP地址比作一间房子 ,端口就是出入这间房子的门。

     

    在Internet上,各主机间通过TCP/IP协议发送和接收数据包,各个数据包根据其目的主机的ip地址来进行互联网络中的路由选择。可见,把数据包顺利的传送到目的主机是没有问题的。问题出在哪里呢?我们知道大多数操作系统都支持多程序(进程)同时运行,那么目的主机应该把接收到的数据包传送给众多同时运行的进程中的哪一个呢?显然这个问题有待解决,端口机制便由此被引入进来。


    本地操作系统会给那些有需求的进程分配协议端口(protocol port,即我们常说的端口),每个协议端口由一个正整数标识,如:80,139,445,等等。当目的主机接收到数据包后,将根据报文首部的目的端口号,把数据发送到相应端口,而与此端口相对应的那个进程将会领取数据并等待下一组数据的到来。

    我们平时使用一些软件如apache的80,就是这个用途吧?包括NAT需要用到的port也是一个概念?

    NAT技术我会专门写一节,欢迎继续观看~

  • 122. Re: 网络基本功系列:细说网络那些事儿(8月25日更新)
    Zhang,Jiawen

    楼主从事的工作应该偏重底层吧,我这种程序员感觉你讲的知识很深入,但是又很容易理解。再次谢谢啦!

    以前做的是比较底层的。这个系列其实还是偏重比较基础的概念~谢谢支持。

  • 123. Re: 网络基本功系列:细说网络那些事儿(8月25日更新)
    stephen.feng

    谢啦,学着学着脑袋迷糊了,看了一下确实不是指的同一个,PAT实现中提到也不是。继续看下去。。。

  • 124. Re: 网络基本功系列:细说网络那些事儿(12月17日更新)
    Zhang,Jiawen

    网络基本功(十八):细说tcpdump的妙用(下)

     

    转载请在文首保留原文出处:EMC中文支持论坛https://community.emc.com/go/chinese image001.gif

     

     

    更多信息

     

    (承接上文)

     

    过滤:

     

    要有效地使用tcpdump,掌握过滤器非常必要的。过滤允许用户指定想要抓取的数据流,从而用户可以专注于感兴趣的数据。此外,ethereal这样的工具使用tcpdump过滤语法来抓取数据流。

    如果用户很清楚对何种数据流不感兴趣,可以将这部分数据排除在外。如果用户不确定需要什么数据,可以将源数据收集到文件之后在读取时应用过滤器。实际应用中,需要经常在两种方式之间转换。

    简单的过滤器是加在命令行之后的关键字。但是,复杂的命令是由逻辑和关系运算符构成的。对于这样的情况,通常最好用-F选项将过滤器存储在文件中。例如,假设testfilter 是一个包含过滤主机205.153.63.30的文本文件,之后输入tcpdump –Ftestfilter等效于输入命令tcpdump host 205.153.63.30。通常,这一功能只在复杂过滤器时使用。但是,同一命令中命令行过滤器和文件过滤器不能混用。

     

    地址过滤:

     

    过滤器可以按照地址选择数据流。例如,考虑如下命令:

    bsd1# tcpdump host 205.153.63.30

    该命令抓取所有来自以及发往IP地址205.153.63.30的主机。主机可以通过名称或IP地址来选定。虽然指定的是IP地址,但抓取数据流并不限于IP数据流,实际上,过滤器也会抓到ARP数据流。限定仅抓取特定协议的数据流要求更复杂的过滤器。

     

    有若干种方式可以指定和限制地址,下例是通过机器的以太网地址来选择数据流:

    bsd1# tcpdump ether host 0:10:5a:e3:37:c

     

    数据流可进一步限制为单向,分别用srcdst指定数据流的来源或目的地。下例显示了发送到主机205.153.63.30 的数据流:

    bsd1# tcpdump dst 205.153.63.30

    注意到本例中host被省略了。在某些例子中省略是没问题的,但添加这些关键字通常更安全些。


    广播和多播数据相应可以使用broadcastmulticast。由于多播和广播数据流在链路层和网络层所指定的数据流是不同的,所以这两种过滤器各有两种形式。过滤器ether multicast抓取以太网多播地址的数据流,ip multicast抓取IP多播地址数据流。广播数据流也是类似的使用方法。注意多播过滤器也会抓到广播数据流。


    除了抓取特定主机以外,还可以抓取特定网络。例如,以下命令限制抓取来自或发往205.153.60.0的报文:

    bsd1# tcpdump net 205.153.60


    以下命令也可以做同样的事情:

    bsd1# tcpdump net 205.153.60.0 mask 255.255.255.0

    而以下命令由于最后的.0就无法正常工作:

    bsd1# tcpdump net 205.153.60.0

     

    协议及端口过滤:

     

    限制抓取指定协议如IPAppletalkTCP。还可以限制建立在这些协议之上的服务,如DNSRIP。这类抓取可以通过三种方式进行:使用tcpdump关键字,通过协议关键字proto,或通过服务使用port关键字。

     

    一些协议名能够被tcpdump识别到因此可通过关键字来指定。以下命令限制抓取IP数据流:

    bsd1# tcpdump ip

    当然,IP数据流包括TCP数据流,UDP数据流,等等。

     

    如果仅抓取TCP数据流,可以使用:

    bsd1# tcpdump tcp

    tcpdump可识别的关键字包括ip, igmp, tcp, udp, and icmp

     

    有很多传输层服务没有可以识别的关键字。在这种情况下,可以使用关键字protoip proto加上/etc/protocols能够找到的协议名或相应的协议编号。例如,以下两种方式都会查找OSPF报文:

    bsd1# tcpdump ip proto ospf

    bsd1# tcpdump ip proto 89

     

    内嵌的关键字可能会造成问题。下面的例子中,无法使用tcp关键字,或必须使用数字。例如,下面的例子是正常工作的:

    bsd#1 tcpdump ip proto 6

    另一方面,不能使用proto加上tcp:

    bsd#1 tcpdump ip proto tcp

    会产生问题。

     

    对于更高层级的建立于底层协议之上的服务,必须使用关键字port。以下两者会采集DNS数据流:

    bsd#1 tcpdump port domain

    bds#1 tcpdump port 53

     

    第一条命令中,关键字domain能够通过查找/etc/services来解析。在传输层协议有歧义的情况下,可以将端口限制为指定协议。考虑如下命令:

    bsd#1 tcpdump udp port domain

    这会抓取使用UDPDNS名查找但不包括使用TCPDNS zone传输数据。而之前的两条命令会同时抓取这两种数据。

     

    报文特征:

     

    过滤器也可以基于报文特征比如报文长度或特定字段的内容,过滤器必须包含关系运算符。要指定长度,使用关键字lessgreater。如下例所示:

    bsd1# tcpdump greater 200

    该命令收集长度大于200字节的报文。

     

    根据报文内容过滤更加复杂,因为用户必须理解报文头的结构。但是尽管如此,或者说正因如此,这一方式能够使用户最大限度的控制抓取的数据。

    一般使用语法 proto [ expr : size ]。字段proto指定要查看的报文头——ip则查看IP头,tcp则查看TCP头,以此类推。expr字段给出从报文头索引0开始的位移。即:报文头的第一个字节为0,第二字节为1,以此类推。size字段是可选的,指定需要使用的字节数,124

    bsd1# tcpdump "ip[9] = 6"

    查看第十字节的IP头,协议值为6。注意这里必须使用引号。撇号或引号都可以,但反引号将无法正常工作。


    bsd1# tcpdump tcp

    也是等效的,因为TCP协议编号为6


    这一方式常常作为掩码来选择特定比特位。值可以是十六进制。可通过语法&加上比特掩码来指定。下例提取从以太网头第一字节开始(即目的地址第一字节),提取低阶比特位,并确保该位不为0

    bsd1# tcpdump 'ether[0] & 1 != 0'

    该条件会选取广播和多播报文。

     

    以上两个例子都有更好的方法来匹配报文。作为一个更实际的例子,考虑以下命令:

    bsd1# tcpdump "tcp[13] & 0x03 != 0"

    该过滤器跳过TCP头的13个字节,提取flag字节。掩码0x03选择第一和第二比特位,即FINSYN位。如果其中一位不为0则报文被抓取。此命令会抓取TCP连接建立及关闭报文。

     

    不要将逻辑运算符与关系运算符混淆。比如想tcp src port > 23这样的表达式就无法正常工作。因为tcp src port表达式返回值为truefalse,而不是一个数值,所以无法与数值进行比较。如果需要查找端口号大于23的所有TCP数据流,必须从报文头提取端口字段,使用表达式“tcp[0:2] & 0xffff > 0x0017”。

     

     

     

     

     

     

     

     

  • 125. Re: 网络基本功系列:细说网络那些事儿(12月23日更新)
    NaNi_Z

    我觉得你在第八篇中关于TCP消息的序列号和确认号的描述有点模糊,不太好理解。看了些其他帖子,我觉的有这么一句描述的不错

    “(相对)序列号表示成功发送的字节数,(相对)确认号表示成功接收的字节数。SYN和FIN算一个字节。”

  • 126. Re: 网络基本功系列:细说网络那些事儿(12月23日更新)
    Zhang,Jiawen

    感谢补充说明!

     

    为了便于理解,我再用简单的语句表述一下:

     

    Seq:数据段的序号,当TCP收到乱序报文时,可供重新排序。

     

    Ack:接收方向发送方确认已接收到哪些字节。

     

    SYN:发起连接请求的标志位。

     

    FIN:请求终止连接的标志位。

  • 127. Re: 网络基本功系列:细说网络那些事儿(12月23日更新)
    Zhang,Jiawen

    下一节介绍NAT。如果有问题请留言,欢迎更多同学参与讨论!

  • 128. Re: 网络基本功系列:细说网络那些事儿(12月23日更新)
    Zhang,Jiawen

    网络基本功(十九):细说NAT原理与配置

     

    转载请在文首保留原文出处:EMC中文支持论坛https://community.emc.com/go/chinese image001.gif

     

     

    介绍

     

    NAT技术让少数公有IP地址被使用私有地址的大量主机所共享。这一机制允许远多于IP地址空间所支持的主机共享网络。同时,由于NAT屏蔽了内部网络,也为局域网内的机器提供了安全保障。


    NAT的基本实施过程包括使用一个预留给本地IP网络的私有地址成立组织的内部网络,同时分配给组织一个或多个公网IP地址,并在本地网络与公网之间安装一个或多个具有NAT功能的路由器。NAT路由器实现的功能包括将数据报中私网地址转换成公网地址,反向亦然。当有报文通过时,网络地址转换其不仅检查报文信息,还将报文头中的IP地址和端口信息进行修改,以使处于NAT之后的机器共享少数公网IP地址。


    更多信息

     

    何时使用NAT?

     

    因为NAT能够减少在网络环境中所需的公共IP地址需求,因此当两家公司重复内部地址合并时,这一技术是很有帮助的。当组织改变其Internet服务供应商(ISP),但网络管理员不想改变内部地址方案时,NAT也是一个很好用的工具。

    以下是应用NAT的场景:

    • 用户需要访问Internet但主机没有全球唯一的IP地址
    • 用户更改ISP需要对网络重新编号
    • 用户需要合并地址重复的内网

     

    通常NAT应用于边界路由器。例如,下图中NAT应用于企业连接到Internet的路由器上:

    image002.png

     

     

    NAT的优势与不足:

     

             

    优势

    不足

    节约合法注册地址

    转换导致交换路径延时

    解决地址重叠问题

    导致端到端IP地址无法追溯

    提高访问Internet灵活性

    某些应用程序无法使用

    网络变动无需地址重新编号

     

     

    网络地址转换类型:

     

    静态NAT:此类NAT在本地和全局地址之间做一到一的永久映射。须注意静态NAT要求用户对每一台主机都有一个真实的Internet IP地址。

    动态NAT:允许用户将一个未登记的IP地址映射到一个登记的IP地址池中的一个。采用动态分配的方法将外部合法地址映射到内部网络,无需像静态NAT那样,通过对路由器进行静态配置来将内部地址映射到外部地址,但是必须有足够的真正的IP地址来进行收发包。

    端口NATPAT):最为流行的NAT配置类型。通过多个源端口,将多个未登记的IP地址映射到一个合法IP地址(多到一)。使用PAT能够使上千个用户仅使用一个全局IP地址连接到Internet

     

    NAT术语:

     

    NAT术语还是比较直观的。NAT地址转换之后成为全局地址。通常是Internet上使用的公网地址。如果不访问Internet的话就不需要用到。

    本地地址:NAT地址转换之前用到的地址。内部本地地址实际上是尝试访问Internet的发送主机的私有地址。外部本地地址通常是连接到用户ISP的路由器接口,也是报文开始传输的公有地址。

     

    转换之后,内部本地地址之后被称为内部全局地址,而外部全局地址成为目标主机的地址。如下表所示:

             

    名称

    含义

    内部本地

    转换前的源主机内部地址

    外部本地

    Internet上识别到源主机的地址。通常是连接到ISP的路由器接口——真实的Internet地址。

    内部全局

    转换后连接到Internet的源主机地址。也是真实的Internet地址

    外部全局

    外部目标主机地址,同样是真实的Internet地址

    image003.png

     

    NAT实现细节:

     

    下图中,主机10.1.1.1将报文发送到有NAT功能的边界路由器。路由器将源IP地址识别为内部本地IP地址,在报文中转换源IP地址,并在NAT表中记录此次转换。

     

    配有新转换源地址的报文发送到外部接口。外部主机将报文发送给目的主机并且NAT路由器通过NAT表将内部全局IP地址转换回内部本地IP地址。

    image004.png

     

    PAT方式中,所有内部主机都转换为一个IP地址。如下图所示,除了内部本地IP地址和内部全局IP地址以外,还多了一个端口号。端口号帮助路由器识别哪一台主机应当收到返回数据。路由器使用来自各主机的源端口好来区别他们各自发出的数据。注意当报文离开路由器时有一个目标端口号80,而HTTP服务器将报文发回时目的端口号为1026。从而允许NAT转换路由器区别NAT表中的主机然后将目的IP地址转换回内部本地地址。

     

    本例中,端口号在传输层用户识别本地主机。如果必须要使用真实全局IP地址来识别源主机,那就只能通过静态NAT,并且会用光所有地址。PAT允许我们在传输层识别主机,从而理论上一个真实IP地址可被65000台主机共享。

    image005.png

     

    静态NAT配置:

     

    ip nat inside source static 10.1.1.1 170.46.2.2

    !

    interface Ethernet0

    ip address 10.1.1.10 255.255.255.0

    ip nat inside

    !

    interface Serial0

    ip address 170.46.2.1 255.255.255.0

    ip nat outside

    !

     

    在第一个路由器输出中, ip nat inside source 命令指定需要转换的IP地址。本例中,此命令配置了内部本地IP地址10.1.1.1到外部全局IP地址170.46.2.2的静态配置。

    在各接口下都有一条ip nat命令。ip nat inside命令将该接口识别为内部接口,ip nat outside命令将该接口识别为外部接口。回头看 ip nat inside source 命令,该命令将内部接口作为转换的源或起点。也可以这样使用:ip nat outside source。该选项表明指定的外部接口会成为转换的源或起点。

     

    动态NAT配置:

     

    动态NAT表示将一个地址池当作真实IP地址提供给内部一组用户。由于不使用端口号,对于同时尝试访问外部网络的用户必须提供真实的IP地址。

     

    以下是动态NAT配置的示例输出:

    ip nat pool todd 170.168.2.3 170.168.2.254

        netmask 255.255.255.0

    ip nat inside source list 1 pool todd

    !

    interface Ethernet0

    ip address 10.1.1.10 255.255.255.0

    ip nat inside

    !

    interface Serial0

    ip address 170.168.2.1 255.255.255.0

    ip nat outside

    !

    access-list 1 permit 10.1.1.0 0.0.0.255

    !

     

    ip nat inside source list 1 pool todd 命令告知路由器将匹配access-list 1IP地址转换到名为toddIP NAT池中的一个地址。这里ACL并不是出于安全因素通过允许或拒绝数据来过滤报文。本例中,它是用来选择或指定我们感兴趣的数据流。当数据流与接入列表相匹配,就被拉入NAT进程转换。

     

    命令 ip nat pool todd 170.168.2.3 192.168.2.254 netmask 255.255.255.0用来创建地址池,之后被分配给请求全局地址的主机。做Cisco NAT故障排查时,一定要检查池中确保有足够地址提供转换给内部主机。最后,确保池名匹配,注意区分大小写。

     

    端口NAT配置:

     

    以下是端口NAT配置的示例输出:

    ip nat pool globalnet 170.168.2.1 170.168.2.1 netmask 255.255.255.0

    ip nat inside source list 1 pool globalnet overload

    !

    interface Ethernet0/0

    ip address 10.1.1.10 255.255.255.0

    ip nat inside

    !

    interface Serial0/0

    ip address 170.168.2.1 255.255.255.0

    ip nat outside

    !

    access-list 1 permit 10.1.1.0 0.0.0.255

    端口NAT与动态NAT配置的不同之处在于:

    地址池变为只有一个IP地址

    ip nat inside source命令最后加入overload关键字。

     

    本例中一个关键元素是使用了池中的一个IP地址作为外部接口IP地址。如果有其他可用地址如170.168.2.2可作为额外地址,这样做在内部大量用户同时为活跃状态,需要不止一个重载IP地址时很有帮助。

     

    参考

     

    CCENT

     

     

     

     

     

                 

  • 129. Re: 网络基本功系列:细说网络那些事儿(9月15日更新)
    JaSonS_toy

    感谢楼主分享,看完这一章,有几个问题想问一下

     

    1)子网IP向公网发出的数据包是否还需要NAT转换?

    2)ABC类的私有地址的划分方式和这种子网划分方式区别在哪?分别是针对哪些情况设定的?为什么要分这两种方式?

    3)子网IP会占用IP资源吗?

     

    谢谢了哈

  • 130. Re: 网络基本功系列:细说网络那些事儿(12月29日更新)
    luodichen

    写得好赞!

    希望再详细写一写ARP协议的细节、ARP协议是怎样在链路层与网络层之间起桥梁作用的,因为我发现很多人不理解二层与三层之间的分工和协作呢。

  • 131. Re: 网络基本功系列:细说网络那些事儿(12月29日更新)
    Zhang,Jiawen

    1)子网IP向公网发出的数据包是否还需要NAT转换?

    子网如果采用的是公有IP地址,就无需NAT转换,只有在私有地址时才需要NAT。

    2)ABC类的私有地址的划分方式和这种子网划分方式区别在哪?分别是针对哪些情况设定的?为什么要分这两种方式?

    私有地址划分是因为IPv4地址机制导致IP地址不够用了,所以NAT的目的是为了节省IP地址资源。划分子网是为了将网络细化,避免浪费。可参考这个系列的第七节:IP地址与子网

    3)子网IP会占用IP资源吗?

    子网IP会占用IP资源,每一个公有IP地址都是唯一的。

  • 132. Re: 网络基本功系列:细说网络那些事儿(12月29日更新)
    Zhang,Jiawen

    谢谢。我考虑一下哦~

  • 133. Re: 网络基本功系列:细说网络那些事儿(12月29日更新)
    JaSonS_toy

    既然子网IP会占用IP资源,那么为什么划分子网可以避免浪费,我总是觉得这个划分的子网有点别扭,能不能说的详细点,谢谢

  • 134. Re: 网络基本功系列:细说网络那些事儿(12月29日更新)
    Zhang,Jiawen

    比如B类网络可支持65534台主机,那么这些主机都处于一个广播域,而一个广播域如果有这么多结点会造成网络拥塞,所以会有些地址分配不出去,这样就造成IP地址位的浪费。把它划分成更细的子网,依靠掩码来实现,通过路由器对不同子网进行分界,这样可以充分利用主机地址里的每一个bit位。