问题
刚预习了几天计网即将猝死复习狗也想来回答这个问题。
我们使用的是这本教材:
上课时内心是崩溃的,老师讲课的速度基本上是一节课一章(大概20~30页吧)emmmmm
萌新三连
上课完全跟不上老师的节奏啊喂
其实计算机网络通信里面有很多琐碎的知识,而弄懂其中的设计原理是一件非常有意思的事情
下面的是我对网络通信的一些理解,希望大家多批评指正
我们想象一下遇到下面这个问题:我现在想要用电脑给皮皮磊发送一些通知,我该怎么设计这个通信系统呢?
这不简单吗?直接我们两之间连一条线缆就行了了(暂且不考虑数据的表示)这样我只需要传输层就行了
问题升级:我现在要和皮皮磊1,皮皮磊2,皮皮磊3通信,我该怎么办能?我们将我和皮皮磊1~3进行编号0~3(MAC地址),然后用一个中心控制器件(交换机),来控制不同人之间的通信。这样就需要增加数据链路层
问题升级:现在我想给在外省的小帅发信息。如果我们还是用前面的方法进行编号,这个在较大的区域方位定位是比较困难的。而且小帅由于工作繁忙,经常需要到全国各地出来,这样就更难以定位了。有没有相对固定的的定址方式呢?在他家设置一个相对固定的逻辑地址(ip地址,因为ip属于通信运营商的资源,这个地址相对比较固定,可以较容易确定位置),这样他出差也可以用别人家的逻辑地址,逻辑地址相对变化较小。这样就需要物理层,数据链路层和网络层
问题升级:现在我的通信公司只是起步,没钱买好的缆线,传输信息的正确性不能保证,因此我要增加一种机制来确认我收到的是正确的信息。于是传输层就产生了。
问题升级:我的电脑不可能只运行发送消息的功能啊,我还要打osu!和打cf呢,我要在osu里和小鸟roll歌交流啊。怎么辨识不同程序的信息来源呢?给每个应用程序添加一个序号呗(端口号)。这样就能识别不同应用进程了。
通过上面的问题的不断的升级,我们逐渐的自底向上构建除了网络传输的五层模型。每一层都是那么独特而巧妙,不可或缺,亦不可增添冗余。
而计算机通信网络,就会在上面的问题过程中,不断的细化问题,并且不断的解决一个个通信的问题。
下面我们再来自顶向下的分析网络模型:
我们访问babydragon.top背后发生了什么?
我简单描述一下:
首先因为是url,我们必须通过dns服务器解析出目标的ip.
然后通过arp协议解析出ip连接的主机的MAC地址
然后将我们的请求统一编码成报文(传输层)传到网络层增加ip头部变成数据报,由于数据报可能很长,我们将其切割,变成分组。
然后将分组送往数据链路层,封装成帧,加上帧界定,送往物理层
物理层就负责传输就行了。
接收方的过程是反过来的就行了
生活中的很多的小例子:
比如我们打电话为什么是按分钟收费的呢(我记得07年以前上网也是按时计费的,但是原理应该不一样吧)?而手机是按照流量收费的呢?
电话每一次都会建立专用的链路,一旦建立连接,数据将按顺序进行接收。
而手机通信则不会占用一条专用的链路,不具有独占性
其实,网络通信的分析相当的有意思啊,这个过程中有很多的小细节,有时间再更吧~
本篇文章将以问答的形式展示
为什么TCP是三次握手而不是四次握手?
A: 如果是两次的话,若第二次服务器的确认信息没有送达客户端,那么服务器将会一直处于被占用的状态访问一次www.baidu.com需要经过哪些过程?
知乎优秀回答
一个电脑想要访问一个网站,却只有它的域名,那么先通过DNS服务器找到ip,然后通过ip找到MAC地址,然后进行TCP通信为什么传输层和数据链路层都有流量控制和差错控制,而不是在传输层设置一个控制就行了,数据链路层是冗余的?
我个人的理解。
数据链路层的检测发生在数据的交换的过程中,如果中间的路由器检测出来了错误(用校验和),那么直接给抛弃,不继续传递
而若数据链路层以上测数据发生了错误,那么这个数据包会一直传输到目的主机,然后目的主机才知道错了。
感觉数据链路层在中间的过程发生了错误的话,那么就抛弃了,效率更高。
而传输层到达目的主机才能检测到,这要效率比较低,但是为了网络的分层结构,逻辑任务的分离,这样做又是必要的!
前面的全错了!!!老师解释错了
实际上原来的通信线路用的是HDLC,比较的注重差错控制。
随着线路的稳定性的提高,使用了PPP协议,只是进行了差错的校验,而不需要确认的机制。
下面是我摘抄的一段话:
即使链路层能够实现无差错的传输,可能端到端的传输也会出现错误,这样得不偿失,还不如把数据链路层做得简单些,可靠的传输由上层的协议以来完成
- 计算机的网络历史
当时的以太网并没有现在的交换机设备,而是采用共享介质,简单来说就是用一根线把所有的网卡全都连起来(当然还需要共地来形成回路),这个结构类似于总线,谁都可以在上面传输信号,但是如果有两个人同时传输的话,两个信号就会混合起来,产生错误。