囫囵吞枣之:网络是怎样连接的

目前只粗浅看了前三章,抽出一些容易混淆的概念点,做了些整理。后面的章节还没看,以后有需要再补充。

  • URL与HTTP协议并没有直接关联。URL只是针对浏览器(应用层)的概念,可以视作是浏览器的输入参数。浏览器接收输入后,需要解析成符合相应协议(如:HTTP)的内容再进行请求。

  • HTTP的请求消息就包含两部分内容:“对什么”和“做什么”。其中,表述“对什么”的部分就叫做URI,虽然它往往是URL的一部分,但概念上并无直接关联。而表述“做什么”的部分就是HTTP的“方法”。

  • 浏览器会根据一定的场景和上下文来决定发送请求的“方法”。比如在地址栏里输入URL,浏览器就会自动使用GET方法,而如果是表单,则默认是POST,当然也可以通过表单属性来指定方法。

  • 对于每一次URL请求,浏览器通常是分成两个动作来进行的,第一个动作是DNS解析,从DNS服务拿回目的地的IP地址,第二个动作才是通过IP地址来访问目标服务器。如果我们自己写网路应用,也需要手动处理IP地址的解析,但好在Socket库提供查询IP地址的功能。

  • 通常,访问DNS服务器不能再通过域名来进行,所以通常在系统内会默认配置好DNS服务器的IP地址,也可能由DHCP服务器分配(具体可参考DHCP协议),这些都称为Local DNS服务器。此外,用户还可以手动配置一些公共DNS服务器,比如Google DNS、阿里DNS、腾讯DNS,等。

  • 传统域名解析还有一些无法克服的问题,因此HTTPDNS应运而生,具体可以参考这里

  • 有关协议栈(Socket)层的传输过程,原文说得很详细,可以直接参考原文第二章内容。

  • TCP链接的三次握手与四次握手: 三次握手发生在连接建立阶段,过程如下: 客户端:“你好,你能听到吗?” 服务端:“我能听到,你能听到我吗?” (ACK与SYN合并发送) 客户端:“我也能听到” …… 接下来双方就可以愉快地通话了。(可以自行脑补为什么建立连接不是二次或四次握手)

    四次握手发生在连接断开阶段,过程如下: 客户端:“我的话都说完了,你还有什么要说的?” 服务端:“好的。我把我的话说完……” …… 服务端此时可以继续发送数据,客户端会接收 服务端:“我的话也说完了。” 客户端:“再见” (服务端此时就不用再回应‘再见’了) 于是双方就挂断连接。 参考

  • 集线器是一逻辑功能最为单一的网络设备,它只负责“广播”其所接收到的信号,因此通过集线器连接的所有终端都会受到信号,但是只有符合目标MAC地址的设备会接受数据,其他的终端则选择丢弃。

  • 交换机的逻辑比集线器复杂一些,它内部维护一个MAC地址表,记录了每个端口(交换机的物理端口)上对应了哪个MAC地址的设备,并且会根据数据包内接收方的MAC地址,将数据转发给对应端口上的设备。

  • 路由器的逻辑则比交换机更复杂,它内部维护路由表,根据目标IP地址和子网掩码决定将数据发送到目标子网(或下一跳路由器)。有关这个过程可以参考这里