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

    懂了,谢谢,楼主真的很厉害

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

    网络爱好者们元旦快乐。

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

    关于TCP滑动窗口,我想问一下,如果服务端返回给客户端的确认信息丢失,即客户端无法收到之前发送的数据的确认信息,是否会超时重传?然而此时,服务端可能已经将该部分数据传给应用程序并清空缓存了,那么,这部分数据服务端怎么处理呢?如果不再次给客户端发送确认信息的话,客户端的窗口将不会再向右滑动,即会永久阻塞。谢楼主分享精华文章。

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

    你好,新年好。

    如果服务端返回给客户端的确认信息丢失,即客户端无法收到之前发送的数据的确认信息,是否会超时重传?

    客户端发出报文之后没有收到服务器端的确认,为了防止由于网络延迟会等待一段时间,这段时间过去之后仍然没有收到确认就会重传,从发出原始报文到重传报文的这一段时间称为RTO。

    然而此时,服务端可能已经将该部分数据传给应用程序并清空缓存了,那么,这部分数据服务端怎么处理呢?如果不再次给客户端发送确认信息的话,客户端的窗口将不会再向右滑动,即会永久阻塞。

    服务器端会再次发送确认信息。这里涉及到关于客户端如何判断此ACK究竟是原始发送报文的ACK,还是重传报文的ACK的问题:确认报文可以使用RTT时间戳选项,确认报文回送发送报文段的时间戳,标明是对哪个报文段的确认。

     

    就算服务器没有再次发送确认信息,也不会永久阻塞。因为tcp连接双方还会继续发送keep alive探测报文,服务器发送探测报文的时候ack号就已经包含了服务器接收到的最后一个报文。

     

    我想你要问的是不是一种TCP死锁的情况?比如收方缓冲区满,发出一个0通告窗口,发送方将发送窗口调整为0,之后,收方从缓冲区拿走数据,发送非0通告窗口,但这一消息丢失了,发方和收方都等待对方操作,因而造成死锁。解决这一现象的方法是使用坚持定时器(persistence timer)。接到0通告窗口后,发方启动坚持定时器,当时间到,发方发送探测报文,收到探测报文的响应包含了通告窗口的通告值。如值不为0,则发方调整窗口大小继续发送,如为0,则重新设定坚持计时器继续上述过程。

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

    谢谢楼主耐心解答。

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

    不客气,有问题欢迎继续讨论。

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

    网络基本功(二十):细说ICMPARP

     

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

     

    介绍

     

    ICMP是网络控制消息协议,主要用于传递查询报文与差错报文。ARP是地址解析协议,它的作用是在以太网环境下,通过3层的IP地址来找寻2层的MAC地址,得到一张ARP缓存表。转发数据的时候根据ARP缓存表来进行传输。


    更多信息

     

    IMCP:

     

    Internet操作是由路由器严密监控的。当路由器端处理报文时如有意外发生,事件通过ICMP报告给发送端。ICMP也用来测试InternetICMP信息封装在IP报文中,最重要的一部分如下表所列:

    image002.png

     

    DESTINATION UNREACHABLE消息用于当路由器无法找到目标地址或当设置了DF位的报文无法递送,因为路径上存在“小报文”网络。

     

    TIME EXCEEDED消息是由于报文TTLTime to live)计数器到达0时。该事件是报文在回环,或计数器值设置过低的迹象。对于这一错误信息的聪明的应用是traceroute工具,traceroute发现从主机到目的IP地址路径上的路由器。它向目的地发送IP包,第一次的时候,将TTL设置为1,引发第一个路由器的Time Exceeded错误。这样,第一个路由器回复ICMP包,从而让出发主机知道途径的第一个路由器的信息。随后TTL被设置为234...,直到到达目的主机。这样,沿途的每个路由器都会向出发主机发送ICMP包来汇报错误。tracerouteICMP包的信息打印在屏幕上,就是接力路径的信息了。这并不是TIME EXCEEDED信息的本意,但却是非常有用的故障排查工具。

     

    PARAMETER PROBLEM信息表示报文头字段发现了非法值。这一问题表明发送主机的IP软件或可能是途经的路由器发生了bug

     

    SOURCE QUENCH信息以前用来节制发送太多报文的主机。当主机接收到该信息,它预计将放缓发送报文。现在很少使用,因为当拥塞发生时,这类报文会起到火上浇油的作用,而且也不清楚如何做出回应。Internet中的拥塞控制现在大部分在传输层完成,使用报文丢失作为拥塞信号。

     

    REDIRECT信息用于路由器发现报文被错误路由的时候。路由器用该信息告知发送主机更新合适的路径。

     

    主机发送ECHOECHO REPLY信息以查看目前的目的地址是否可到达或是否alive。接收到ECHO信息之后,目的地址预计会发回一条ECHO REPLY信息。这些信息用在ping工具中来查看主机是否up以及是否挂在网上。

     

    TIMESTAMP REQUESTTIME REPLY信息是类似的,除了信息的到达时间以及回复的离开时间是记录在回复中的。这一工具可用于衡量网络性能。

     

    ROUTER ADVERTISEMENTROUTER SOLICITATION信息用于主机发现附近的路由器。主机需要从至少一个路由器学习IP地址来发送报文。

     

    ARP:

     

    尽管Internet上的每台设备都有一个或多个IP地址,仅用这些地址仍然不能发送报文。数据链路层网卡如以太网卡不理解Internet地址。对于以太网,每一个以太网卡都有一个48bit的以太网地址。网卡基于这48bit以太网地址收发帧,网卡与32bit IP地址没有关系。

    从而产生一个问题:IP地址是如何映射到数据链路层地址,如以太网地址的呢?解释这一问题,让我们以下图为例:一个小型校园安装了两个/24网络。其中一个(CS)是交换以太网,位于Computer Science部门。网络地址为192.32.65.0/24。另一个局域网(EE)也是一个交换以太网,位于Electrical Engineering部门网络地址为192.32.63.0/24。这两个局域网通过IP路由器互连。以太网上的各台设备以及路由器各接口都有唯一的以太网地址,标签从E1E6,以及CSEE网络上唯一的IP地址。

    image003.jpg

    我们首先看一下host 1的用户如何向CS上的host 2用户发送报文。首先假设发送方知道目标接收方的名字,如xx.cs.uni.edu。第一步是查找host 2IP地址。这一查找是通过DNS来完成的,DNS之后返回host 2IP地址(192.32.65.5)。

     

    host 1的上层软件将目标地址192.32.65.5植入报文中并交给IP软件发送。IP软件查看该地址发现目标地址在CS网络上(即本地网络)。但是,还需要查找目的以太网地址来发送帧。一种解决方式是通过系统配置文件来将IP地址映射到以太网地址。当然这种方式是可能的,但对于有上千台设备的大型企业来说要保证这些文件都是更新状态是一项耗时的工作。

     

    比较好的方式是host 1发送一个广播报文到以太网询问谁有IP地址192.32.65.5。广播报文到达每一个CS网上的设备,各台设备检查自己的IP地址。只有host 2会回复自己的以太网地址E2。通过这种方式host 1学习到IP地址192.32.65.5的以太网地址E2。这种提问和回复的协议就称为ARP(Address Resolution Protocol)。使用ARP的一个优势是它的简单性。系统管理员无需指定各台设备的IP地址以及子网掩码,ARP自动完成剩下的工作。

     

    此时,host 1上面的IP软件构造以太网地址E2的报文,将IP报文(目的地址192.32.65.5)放在载荷部分。host 2的以太网卡检测到该帧,识别目标地址是自己,把它捞出来,产生一个中断。以太网驱动从载荷中将IP报文提取出来并传递给IP软件,软件查看到此报文地址正确并予以处理。

     

    提高ARP效率有很多种优化方法。运行ARP的设备将其结果放入缓存之中,以备短期内需要再次连接同一台设备。下一次可在设备的缓存中找到映射结果,就无需第二次广播。很多情况下,host 2需要发送一个回复,迫使它运行ARP来确定发送方的以太网地址。在host 1ARP报文中包含IPEthernet映射可避免这一ARP广播。当ARP广播到达host 2,连接对(192.32.65.7, E1)进入host 2ARP缓存。实际上,以太网上的所有设备都可以将这一映射放入自己的ARP缓存中。

     

    为了让映射能够更改,例如,当配置一台主机使用心得IP地址(但保留旧的以太网地址),几秒钟过后ARP缓存中的表项会过期。为了保持缓存信息更新并且优化性能,比较好的方法是每一台设备在配置时都广播它的映射信息。广播通常以ARP查找自己的IP地址的方式来完成。应当不会收到响应,但该广播的副作用是使每一台设备的ARP缓存都得到更新。这称为免费ARPgratuitous ARP)。如果收到回复(不期望地),则两台设备指定了同一IP地址。网络管理员需解决这一问题才能使两台设备共同使用网络。

     

    再看上图,假设host 1想要向网络EE上的host 4(192.32.63.8)发送报文。host 1会发现目标IP地址不在CS网络上,它会将所有这类远端网络数据流发送给路由器,也称为默认网关(default gateway)。习惯上,默认网关是网络上的最低地址(198.31.65.1)。要发送帧给路由器,host 1还是必须知道路由器接口在CS网络上的以太网地址。路由器通过发送198.31.65.1ARP广播来学习到E3地址,然后发送帧。路由器在Internet路径上将报文从一个路由器发送到下一个使用相同的查找机制。

     

    路由器的以太网卡收到此帧后将报文发给IP软件。从网络掩码中得知该报文应当发送到EE。如果路由器不知道host 4的以太网地址,就会再次使用ARP。上图列出了在CSEE子网上观察到的帧中出现的源和目的以太网及IP地址。发现到各子网中以太网地址改变而IP地址保持不变(因为IP地址指明跨越所有互连子网的终点)。

     

    host 1发送报文到host 4,而host 1不知道host 4位于不同网络也是可能的。解决方法是让CS子网上的路由器回复查找host 4ARP并将自己的以太网地址E3作为回复内容。由于host 4无法看到ARP请求(路由器不会转发以太网广播)所以无法直接回复。路由器之后会接收发往192.32.63.8的帧并转发到EE子网。这一方式称为代理ARPproxy ARP)。用在一台主机想要出现在一个子网上但实际上位于另一子网的特定情形。

     

     

     

     

     

    参考

     

    Computer Networks

     

     

     

     

                 

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

    写的非常棒,对底层的东西理解非常透彻,感谢。

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

    谢谢。欢迎常来讨论。

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

    网络基本功(二十一):细说HTTP(上)

     

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

     

     

    介绍

     

    HTTP是一个由请求与响应组成的客户端与服务端交互协议。浏览器发送一个HTTP请求到指定的URL地址,持有此URL地址的WEB服务器将返回一个HTTP请求。请求的类型有GET, POST, HEAD, PUT, DELETE, OPTIONSTRACE等。


    更多信息

     

    HTTP操作模式与客户端/服务器通信:

     

    HTTP只关心一个功能:从web服务器到web客户端的超文本文件以及其他文件的传输。从通信的角度来看,客户端主要负责发送请求给服务器,服务器对请求作出响应。相比FTPSMTP这样需要多个通信步骤和命令/响应序列的应用层协议,HTTP更像BOOTPARP

     

    基本的HTTP客户端/服务器通信:

     

    最简单的HTTP操作包括一个使用web浏览器的HTTP客户端,和一个HTTP服务器,通常称为web服务器。在TCP连接创建之后,以下两步通信过程如下:

    客户端请求HTTP客户端根据HTTP协议标准发送HTTP请求信息,该信息指定客户端想要获取的资源或包括准备提供给服务器的信息。

    服务器响应:服务器读取并解释该请求。对请求作出相应行为并创建HTTP响应信息,发回给客户端。响应信息包括该请求是否成功,也包括客户端请求的资源内容。

     

    HTTP消息格式:

     

    使用HTTP的设备通信都是通过HTTP消息来完成,其中只有两种类型:请求和响应。客户端通常发送请求和接收响应,服务器接收请求和发送响应。信息使用的是文本的形式。

    常规HTTP消息格式如下所示:

    <起始行>

    <首部字段>

    <空白行>

    [<主体>]

    [<尾部>]

     

    起始行包含消息的类型。请求消息中,这一行以方式的形式表明消息为请求类型,并制定一个URI(Uniform Resource Identifier)指明请求的对象资源。响应通过起始行来表明请求响应的状态信息。

    首部字段HTTP定义了多种类型的首部字段。通过功能分组,除了主机头以外,几乎所有首部字段都是可选的。格式如下:<header-name>:<header-value>

    主体也是可选的,包含客户端和服务器通信所需的一系列信息,如响应的详细错误消息。更加常见的是承载文件或其他资源,HTTP标准中称为实体。由于大多数客户端请求服务器发送文件或其他资源,实体在响应信息中最为常见。

    尾部,HTTP/1.1默认使用永久链接,消息在服务器与客户端之间以流的形式传输,需要标记消息的结束点和开始点。

     

    HTTP请求消息:

     

    客户端通过打开一个TCP连接发起与服务器的HTTP会话,之后发送HTTP请求信息

    image002.jpg

     

    起始行

    主要有三个用途:

    ·         表明客户端想要进行的命令或行为

    ·         指定行为想要获取的资源

    ·         告知服务器客户端使用的HTTP版本

    起始行的语法为:<METHOD><request-uri><HTTP-VERSION>

     

    Method

    method就是客户端想要服务器做什么,三种比较常用:GETHEADPOST

             

    GET

    从服务器向客户端发送发送命名资源

    PUT

    将来自客户端的数据存储到一个命名的服务器资源中去

    DELETE

    从服务器中删除命名资源

    POST

    将客户端数据发送到一个服务器网关应用程序

    HEAD

    仅发送命名资源响应中的HTTP首部

     

    Request URI

    Request URI是请求所申请资源的URI。目前URI通常值符合Web URL语法的HTTP URL。有趣的是,HTTP起始行所使用的URL形式通常与HTML文件或用户输入的不同。这是因为一个完整URL中的部分信息是用来控制HTTP本身的。这是用户和HTTP客户端通信所需,而不包括在客户端对服务器的请求中。在请求中指定资源的标准方式是在起始行中加入路径和文件名(以及可选的查询信息),同时在主机头字段指定主机。

     

    例如:假设用户输入URLhttp://www.myfavoritewebsite.com:8080/chatware/chatroom.php,我们不需要发送http:到服务器。客户端将余下的信息拆分成URI /chatware/chatroom.php主机行会包括www.myfavoritewebsite.com:8080。因此,请求的开始内容如下:

    GET /chatware/chatroom.php HTTP/1.1

    Host: www.myfavoritewebsite.com:8080

    这一准则的例外是当请求对象是代理服务器时。这时请求就要使用完整URL的形式,以使代理可以作为初始客户端来处理该请求。请求如下所示:

    GET http://www.myfavoritewebsite.com:8080/chatware/chatroom.php HTTP/1.1


    请求首部

    在请求首部,提供给服务器关于请求的详细信息。所有请求首部都使用相同的结构,但按照以下功能分类:

    普通报头普通报头通常指消息本身,通常用于控制其处理过程或提供给接收方额外信息。这类报头不限于请求或响应信息,所以两者都可能出现。同样,也与所承载的实体没有特别关系。

    请求报头 这类报头告知服务器关于客户端请求的更多信息,给予客户端更多关于请求处理的控制。例如,一些请求报头用于指定条件请求,只有在特定条件时才执行。其他告诉服务器响应信息中客户端能够徐立的格式或编码。如:

    Accept 告诉服务器端,接受哪些类型的信息。

    Accept-Encoding 可接受的内容编码。

    Accept-Lanague 指定一种自然语言。

    Connection 表示是否需要持久连接。如果Servlet看到这里的值为“Keep-Alive”,或者看到请求使用的是HTTP 1.1HTTP 1.1默认进行持久连接),它就可以利用持久连接的优点,当页面包含多个元素时显著地减少下载所需要的时间。

    Cookie 最重要的请求头信息之一, 每次请求时都会携带上Cookie以方便服务器端识别是否是同一个客户端。

    Host  host请求报头域主要用于指定被请求资源的Internet主机和端口号,它通常从HTTP URL中提取出来。

    User-Agent用户代理,一般情况是浏览器。我们上网登陆论坛的时候,往往会看到一些欢迎信息,其中列出了客户端操作系统的名称和版本,所使用的浏览器的名称和版本,实际上,服务器应用程序就是从User-Agent这个请求报头域中获取到这些信息。User-Agent请求报头域允许客户端将它的操作系统、浏览器和其它属性告诉服务器。

     

     

    参考

     

    TCP/IP Guide

     

     

     

     

                 

  • 146. Re: 网络基本功系列:细说网络那些事儿(1月14日更新)
    coshim

    写的不错呀,应该重点说说Fiber network吧,毕竟现在的san网络都是跟fc有关的,比如vplex每个director都是8fc out and 8 fc in。 虽然有ethernet port,但是性能并不理想。

     

    在二层上面fc和ethernet的mac还是有很大区别的。

     

    期待之后的fc部分。

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

    谢谢。

    之前写过一点FC的文章:

    Fibre Channel光纤通道基础(一)到(三)

    以后如果想到合适的内容再补充~

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

    谢谢您的教程,太棒了。不过我想问一下,自己学习没法搞到那么多的网络设备,有没有什么软件可以模拟教程中的网络环境啊?

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

    公司有淘汰下来的老硬件最好。模拟器的话,路由器可以用Dynamips,基本上很完善了。交换机硬件比较特殊,没有特别好的模拟器,可以看看国外的GNS3项目,只是为了学习的话,功能应该够。