计算机网络(五)深入理解计算机网络各层


网上有很多HTTP协议的讲解,我想从我个人的角度去理解HTTP协议。

1 物理层

在这里插入图片描述
假设直连的两个设备,仅仅两个,如何通信?很简单,拿一根电线,不断开、关、开、关发脉冲,对方就能接收到。这是非常理想的情况,在实际的场景中要考虑使用数字信号传输还是模拟信号传输、路线复用、频率对齐、效率等问题,有时候还可以不使用电线,比如光纤、电磁波传输等等。总而言之,物理层解决最原始的信号如何传输的问题,可以点对点的将信号传输到某个地方,如果全世界只有两台电脑,直接使用物理层传输0/1信号即可,没有必要定义再上面一层的协议了。
问题:如果有三台电脑怎么办?

2 数据链路层

如果有三台电脑,可以每个电脑提供两个网线接口,两两互联,岂不美哉,但是问题又来了,如果有四个呢?不可能一直添加插孔吧。所有数据链路层的抽象就是解决这个问题的。
在这里插入图片描述
搞一个交换机在中间,大家把自己的网线都插在交换机上,数据都发给交换机,交换机再转发数据到需要发到电脑上,这就产生了一个问题,交换机怎么知道谁是谁,需要使用一个地址来标识每一个设备吧,于是在每一个网卡出产(电脑的数据交换实际上是网卡的交换,网卡把数据存到内存给电脑使用)的时候就设置了标识符,MAC地址(Media Access Control Address),linux下使用ifconfig可以查看本机网卡的MAC地址。另外,还需要定义在数据链路层传输的数据格式吧,不可能一直让某两个机器一直传输吧,剩下的机器就等着吗?所以在这里就奠定了计算机网络传输不可靠的问题,采用数据帧的方式传输数据。
在这里插入图片描述
让一帧一帧的数据咋交换机里面传输,所以交换机需要维护一个表:

目的地址物理端口号
54:ee:45:a8:30:e8端口1
54:ee:75:af:30:e8端口2
54:dd:75:a8:30:e8端口3
…………

物理端口号是指这个MAC地址的电脑插在交换机的哪个端口上。

问题:要是有几千台电脑怎么办?

3 网络层

要是有几千台,可以设计几千个物理端口的交换机。哈哈,肯定不可能,一个直观的想法是,电脑插交换机连接,交换机与交换机直接连接。
在这里插入图片描述

这样的确解决了物理连接问题,怎么传输呢?比如数据从A到D,E怎么知道D在哪里呢?在解决这个问题之前,先介绍一下IP地址,为什么要引入IP地址,其实MAC地址已经足够解决网络设备的标识问题了。IP地址主要是用来做子网划分,MAC地址中纯粹就是一个唯一标识,不含有任何地理位置信息,所以引入了IP地址用来做子网划分,就能较好的组织数据包的向上转发,比如上海某小区用户的数据包要发送到北京某小区,肯定不会一点点从相邻的路由器慢慢传,这太慢了,而是以树状结构,逐渐往上面速度带宽更高的传输。这里面路由器需要维护两张表,MAC地址和IP地址的对应表,使用ARP协议获取:

IP地址MAC地址
111.251.58.5554:ee:45:a8:30:e8
…………

还有需要有一张路由表:

目的IP地址下一跳的IP地址
111.251.58.5554:ee:45:a8:30:e8
…………

有了这个,就可以解决从A到D的传输了,A首先将数据包发送到直连的路由器E,E首先查路由表,发现目的IP是D,所以下一跳应该给路由器F,但是下一跳是IP地址,需要查地址表,把目的数据帧的MAC地址修改为F的MAC地址,进行转发到F,F拿到IP数据包之后,一查目的地址是D,下一跳就是直连的D,然后根据地址表,把目的MAC地址修改为D的MAC地址,把数据包传过去。
问题:如果实现进程通信?

4 传输层

IP层解决了一个非常重要的传输问题,现在你手上的网卡可以把一条数据随意发到世界上任何一个网卡上面了。还有一个可靠传输的问题,可以使用TCP进行传输,核心在于超时重发,序号确认机制。我更多在意在乎的是进程通信,IP地址标识了计算机,数据可以发到计算机上,更确切的说是在网卡上,网卡把获得是数据通过DMA(Direct Memory Access)直接内存技术,把数据写入到内存中,只要数据到了内存中,对于程序员的我们来说,就好办了,直接叫操作系统内核把这个数据拿过来即可,但是又有一个问题了,OS中这么多进程,OS怎么知道这个数据是给哪个进程的呢?看来还得加标识符,于是端口的概念就被引入了,端口可以实现两个离得老远的进程进行通信,也就是常说的Socket。【IP地址+端口号】的方式就标识了一个网络进程。

5 应用层

有了可靠的传输和进程点对点通信,就可以开始开发具体的网络传输应用了。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值