网络是怎样连接的


网络是怎样连接的

互联网其实是一个非常复杂的玩意儿。我们每天都在上网,网络正常的时候大家都觉得“上网嘛,不就这么简单”。可是一旦出了问题,上不去了,你就会发现要想把问题找出来并解决真不是一件容易的事情。

从在浏览器中输入网址,到屏幕上显示出网页的内容,在这个只有几秒钟的过程中,很多硬件和软件都在各自的岗位上相互配合完成了一系列的工作。

如果只是讲解TCP/IP、以太网这些单独技术,读者就无法理解网络这个系统的全貌了。如果无法理解网络的全貌,也就无法理解每一种网络技术背后的本质意义;而如果无法理解其本质意义,就只能停留在死记硬背的程度,无法做到实际应用。为了避免这一点,即便一本书的篇幅只能介绍有限的一些场景,但依然可以涵盖网络系统的全貌。


一、浏览器生成消息—探索浏览器的内部

1、生成HTTP请求消息

用户在浏览器中输入网址(URL),浏览器的工作会从对用户输入的网址进行解析。然后浏览器会根据网址的含义来生成HTTP请求消息,浏览器通过请求消息将用户需要哪些数据告知服务器,发送请求后会收到响应。

2、向DNS服务器查询Web服务器的IP地址

请求消息生成之后,浏览器会委托操作系统向Web服务器发送请求,但浏览器必须告诉操作系统接收方的IP地址才行,因此浏览器必须先查出Web服务器的IP地址。网址中只有Web服务器的域名,因此浏览器需要向DNS服务器查询域名对应的IP地址。

3、全世界DNS服务器的大接力

这是我们的路程进入到哦DNS服务器帮助浏览器查询IP地址这一环节了。全世界有上万台DNS服务器,它们相互接力才能完成IP地址的查询。

4、委托协议栈发送消息

查询到IP地址之后,浏览器就可以将消息委托给操作系统发送给Web服务器了。“委托给操作系统”这句话看似简单,但关于委托给操作系统,其实有非常详细的规则,必须要遵守这些规则才能完成操作。理解了向操作系统进行委托时的规则,我们就能明白做出某个委托时操作系统会给我们怎样的反馈,这可以说是相当于具体地理解了网络的潜在能力。


二、用电信号传输TCP/IP数据—探索协议栈和网卡

1、创建套接字

从应用程序收到委托后,协议栈通过TCP协议收发数据的操作可分为4个阶段,首先是创建套接字。浏览器、邮件等一般应用程序收发数据时用TCP;DNS查询等收发较短的控制数据时用UDP。套接字的实体就是通信控制信息,协议栈是根据套接字中记录的控制信息来工作的。创建套接字时,首先分配一个套接字所需的内存空间,然后向其中写入初始状态。

2、连接服务器

接下来是客户端套接字向服务器套接字进行连接的阶段。通信操作中使用的控制信息分为两类:头部中记录的信息、套接字(协议栈中的内存空间)中记录的信息。连接操作的第一步就是TCP模块处创建表示连接控制信息的头部。通过TCP头部中的发送方和接收方端口号可以找到要连接的套接字。

3、收发数据

两端的套接字完成连接之后,就进入了收发消息的阶段了。在这个阶段,协议栈会将从应用程序收到的数据切成小块并发送给服务器,考虑到通信过程中可能会出错导致网络包丢失,协议栈还需要确认切分出的每个包是否已经送达服务器,对于没有送达的包要重新发送一次。

4、从服务器断开并删除套接字

收发消息的操作全部结束后,接下来要断开服务器的连接并删除套接字。断开操作的本质是当消息收发完成后客户端和服务器相互进行确认的过程。

5、IP与以太网的包收发操作

在介绍TCP协议收发消息的操作之后,我们再来看看实际的网络包是如何进行收发的。协议栈会与网卡进行配合,将数据切分成小块并封装成网络包,再将网络包转换成电信号或者光信号发出去。

6、UDP协议的收发操作

TCP协议有很多方便的功能,比如网络包出错丢失时可以重发,因此很多应用程序都是使用TCP协议来收发数据的,但这些方便的功能也有帮倒忙的时候,在这种情况下我们还有另外一种叫UDP的协议。不需要重发的数据使用UDP发送更高效。


三、从网线到网络设备--探索集线器、交换机和路由器

1、信号在网线和集线器中传输

信号从计算机流出之后,会在网线中经过集线器等设备前进。每个包都是独立传输的,防止网线中的信号衰减很重要,“双绞”是为了抑制噪声,集线器将信号发往所有线路。

2、交换机的包转发功能

交换机并不只是简单地让信号流过,而是先接收信号并将其还原为数字信息,然后再重新转换成信号发送出去的过程。交换机根据地质表进行转发,全双工模式可以同时进行发送和接收,自动协商:确定最优的传输速率,交换机可同时执行多个转发操作。

3、路由器的包转发功能

路由器和交换机一样也是负责对包进行转发的,但他们的工作方式有一些差异。交换机是基于以太网规格工作的设备,而路由器是基于IP工作的。路由器的各个端口都具有MAC地址和IP地址,路由器根据“IP地址”判断转发目标,路由器会忽略主机号,只匹配网络号。路由表的子网掩码列只表示在匹配网络包目标地址时需要对边的比特数量。路由器的端口都具有MAC地址,只接收与自身地址匹配的包,遇到不匹配的包则直接丢掉。通过路由器转发的网络包,其接收方MAC地址为路由器端口的MAC地址。

4、路由器的附加功能

位于互联网接入端的路由器通常还会提供一些附加功能,例如将私有地址转换为公有地址的转换功能,以及阻止危险网络包的包过滤功能等。


通过接入网进入互联网内部——探索接入网与网络运营商

1、ADSL接入网的结构和工作方式

家庭和公司的内网是通过公司的接入网连接到网络服务商。互联网内部有上万台路由器,他们通过接收方IP地址判断转发目标,并将包转发出去。通过多台路由器转发之后,网络包就可以到达目的地了。一般家用的接入网方式包括:ADSL、FTTH、CATV、电话线、ISDN等,公司还可能使用专线。以ADSL作为线路案例:互联网接入路由器会在网络包前面加上MAC头部、PPPoE头部、PPP头部共三种头部,然后发送给ADSL Model ,ADSL Model将包拆分成信元,并转化为电信号发送给分离器。

2、光纤接入网(FTTH)

与ADSL技术的利用率不相上下的光纤技术,它是由一种双层结构纤维状透明机构(玻璃或塑料)材质构成的,通过在里面的纤芯中传到光信号来传输数字信息。ADSL信号是由多频段的信号组成的,比较复杂,但光信号非常简单,亮表示1,暗表示0。FTTH一般使用单模光纤,因此只有特定角度光信号才能反射并前进。然后,多路光纤收发器将光信号转换为电信号,BAS端口接收之后,将包转发到互联网内部。

3、接入网中使用的是PPP和隧道

接入网需要通过用户名和密码验证密码用户的身份,然后用网络运营商向用户分配共有地址。此外,从接入网到网络运营商传输网络包时还使用了隧道技术。

4、网络运营商内部

接入网后面连接着网络运营商的网络,运营商网络也是以路由器为核心组成的,这一点家庭和公司一样,包转发的工作原理也没有区别。不过网络运营商也使用了不同与家庭、公司的技术,如运营商之间可以自动交换路由信息和更新路由表。

5、跨越运营商的网络包

互联网是由多个运营商网络相互连接形成的巨大网络。而多个运营商相互连接的部分可以说就是互联网的核心。


服务器端的局域网中有什么玄机

1、WEB服务器的部署地点

客户端一般放置在家庭、公司网络上,但服务器的部署不仅限于家庭和公司中,也可在数据中心。

2、防火墙的结构和原理

主流的包过滤方式防火墙,除了一般的设置外,可通过端口号限定应用程序,通过控制位判断连接方向,设置内网的公开区域规则,外网访问内网规则等

3、通过将请求平均分配给多台服务器来平衡负载

随着访问量的增加,Web服务器的能力会不够用,对于访问量的很大型网站来说,必须要考虑到这一点,使用负载均衡器来分配访问。

4、利用缓存服务器来分担负载

另一种减轻Web服务器负担的一种方法是将访问过的数据保存在缓存服务器中,当再次访问时可直接使用缓存的数据。

5、内容分发服务

内容分发服务是从缓存服务器发展而来的,它在互联网中的部署很多缓存服务器,并将用户的访问引导到最近的缓存服务器上。


请求到达Web服务器,响应返回浏览器

——短短几秒的“漫长旅程”迎来终点

1、服务器概览

服务器的职责是响应客户端的请求,但仅从如何响应请求这一点是无法看清服务器的全貌的,服务器需要同时和多个客户端通信,每次请求都会启动一个新的应用程序,实现一对一服务。

2、服务器的接收操作

网卡的MAC模块将网络包从信号还原为数字信号,校验FCS并存入缓存区。网卡驱动会根据MAC头部判断协议类型,并将包交给相应的协议栈。协议栈的IP模块会检查IP头部,(1)判断是否是自己发的;(2)判断网络包会否经过分片;(3)将包转交给TCP模块或UDP模块。如果收到的是发起连接的包,则TCP模块会(1)确认TCP头部的控制位SYN;(2)检查接收方端口号;(3)为相应的等待连接套接字复制一个新的副本;(4)记录发送方IP地址和端口号等信息。收到数据包时,TCP模块会(1)根据收到的包的发送方IP地址、发送方端口号、接收方IP地址、接收方端口号找到相对应的套接字;(2)将数据库快拼接起来并保存在接收缓存中;(3)向客户端返回ACK。

3、Web服务器程序解释请求消息并作出响应

将请求的URI转换为实际的文件名,运行CGI程序,Web服务端的访问控制,最后返回响应。

4、浏览器接收响应消息并显示内容

Web服务器返回的响应消息会通过互联网到达客户端计算机的浏览器。接下来浏览器会将消息的内容显示在屏幕上。当客户端计算机显示出网页的内容时,访问Web服务器的操作就全部完成了。


总结:尽管思路很简单,但实际编写这些应用程序并不容易,需要事无巨细的设计好所有的功能,还要编写大量的代码才能完成。网络看似简单,实则很复杂,具体的规则需要有心人深究,大概全貌也就是如此,遇到问题可优先以上思路检查,一般会解决80%的问题。