首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

网络工程师:详解电脑间通信

现在,我们已经解决了网络中的基本问题,接下来让我们讨论一下两台电脑究竟是怎样通信的。

假设PCA为用户电脑,PCB为提供web服务的服务器。PCA的IP地址为10.1.1.2,掩码255.255.255.0,网关10.1.1.1;PCB的IP地址为10.1.4.2,掩码255.255.255.0,网关10.1.4.1。我们来讨论PCA访问PCB的整个过程(各层协议的封装内容较多,我们只填写其中便于我们理解通信的主要内容。部分内容虽然很重要,但跟我们理解通信关系不大,就不在这里填写了,比如序号等)。

用户在PCA上打开浏览器,地址栏输入http://10.1.4.2:80,http的默认端口号为80,一般省略不写,只写http://10.1.4.2就可以。浏览器把此套接字信息向下传递给传输层TCP协议(http是基于TCP的)。

TCP收到应用层的信息后,填写TCP的“快递单”,源端口号随机选取动态端口号49152~65535中的一个,假设为56789,目的端口号为80,SYN=1,把自己设置为握手请求报文,再向下传递给网络层IP协议。

“快递小哥”IP收到后,填写“快递单”,源IP地址填写10.1.1.2,目的IP地址填写10.1.4.2,协议号填写6(表示这份快递是TCP的,UDP是17)。此时,IP协议发现源地址与目的地址不在同一个网段,因此需要查找电脑的ARP表中,有没有网关10.1.1.1的MAC地址,如果没有,则向网关发ARP Request报文请求网关的MAC地址,并写入ARP表中,再向下传递给链路层的以太网协议。

链路层以太网收到后,填写以太网封装,目的MAC地址填写网关的MAC地址MAC_R1,源MAC地址填写自己的MAC地址MAC_PCA,Type填写0x0800(0x表示后面的数字是十六进制,0800表示快递是IP给下来的)后,把这些信息用二进制通过线缆传给了R1。

R1收到后,发现目的MAC是自己的MAC地址,于是拆除以太网封装,并根据Type的内容0x0800把数据交给IP协议。

IP协议收到后,根据IP封装中的目的地址10.1.4.2查找路由表,发现下一跳地址是10.1.2.2,此地址与R1的E1/1接口相连,接口地址是10.1.2.1/24,于是把数据包送到接口E1/1,E1/1接口需要把此数据包送给对面的10.1.2.2,需要再次封装为以太网帧才可以传递过去,于是查看路由器上ARP表中有没有10.1.2.2对应的MAC地址,若没有,则从接口E1/1发送ARP Request请求10.1.2.2的MAC地址并写入ARP表中。把数据包封装为以太网帧,源MAC为MAC_R1,目的MAC为MAC_R2,Type还是0x0800,发送给了R2。

R2收到后把刚才R1做的事再做一遍,数据被发给了R3。

R3收到后,拆除以太网封装,根据IP封装中的目的地址10.1.4.2查找路由表,发现这个地址与本路由器地址为10.1.4.1/24的接口直连。把数据送到此接口后,查找路由器的ARP表中有没有10.1.4.2的MAC地址,若没有就从接口发ARP Request请求,然后封装成以太网帧发出去。

我们发现,路由器如果发现数据封装中的目的IP地址不是自己接口的,则会根据路由表送到出接口,然后再封装为以太网帧发出去,并不改变网络层之上的任何内容。也就是说,数据从源地址发送到目的地址期间,沿途所有路由器只会根据每条链路的不同,改变链路层封装,并不改变网络层之上的任何内容。

从数据转发的角度,路由器工作在链路层和网络层,并不关心网络层之上的东西,这也是为什么把路由器归为三层设备。同理,交换机只根据以太网链路层封装转发数据,不关心链路层之上的内容,所以交换机也归为二层设备。

最后,我们看看PCB收到后怎么处理。

PCB收到后,看到目的MAC为MAC_PCB,正是自己的,所以拆除以太网封装,并根据Type内容交给IP协议。网络层IP协议查看封装中的目的IP地址为10.1.4.2,还是自己的IP地址,于是拆除IP封装,根据协议号6,交给TCP协议。TCP协议查看封装中的目的端口号为80,查看应用层HTTP进程是否存在,若不存在,则报Port Unreachable(端口不可达)错误,否则本端以56789为目的端口号,80为源端口号,与对端进行三次握手建立TCP连接,连接建立成功后,把本机的Web主页内容层层封装后传给网关R3,之后过程与前述基本相同,最终到达PCA。

于是,PCA的浏览器呈现出了精彩的网页内容。

小Q:配置电脑的IP地址信息时,如果不配置网关会有什么结果?

欢迎大家留言讨论。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200416A05WY000?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券