数据在网络中的传输
Posted 走过_冬天
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据在网络中的传输相关的知识,希望对你有一定的参考价值。
最近面试被问到了一些<<计算机网络>>方面的问题,由于之前的工作中很少涉及到,7、8年了前学的了,都基本还给老师了,回答得不太满意。所以这几天又从头学习了一遍<<计算机网络>>,看的是人民邮电出版社出的<<图解TCP/IP>>。看完之后还要查很多资料,我并不推荐这本书,感觉是本入门书,很多细节没有讲清楚,就像今天遇到的这个问题,很多都一笔带过,讲得很淺。而网上的文章很多就抄的教科书,情况都特别理想,一个ARP过去就有回应了,真的是这样吗?要没回应怎么玩,是不是很尴尬?没回应就自个查资料!哈哈~~。这篇文章就简单聊聊那些不那么理想的情况。就当作复习,内容仅供参考。
首先,一个最基本的问题,两台计算机是怎么进行通信的。
假设现在A主机中的向B主机的发一条消息,“今晚约吗”。
首先,A主机需要开机入网,A主机会问路由器“我该设置什么IP地址和子网掩码,默认网关地址是多少”,路由器上的DHCP服务器收到后就分配一个IP地址给主机(DHCP服务分为两个阶段,有的书分为4个阶段,怎么分都不重要,后面会单独讲)。于是打开应用程序,编辑消息,点击发送。
应用层:当点击"发送"的时候,A主机的应用程序就会把发送给谁,端口号,消息内容等等封装成数据包,交给表示层。除此以外,还要知道接收方的IP地址是多少,这里要进行DNS域名解析。(比方说发邮件到目的邮箱,邮件要通过服务器中转,域名解析就是服务器的IP地址。为什么要中转?因为你发送的时候B主机可能是关机的状态,那么B主机自然是没有IP地址的,那服务器就要先保留A发送的邮件,等B主机连接上服务器了,服务器再把邮件发给B主机。)
表示层:表示层收到应用层数据,一看,你这编码格式B主机不一定有啊,万一没有,B就算收到了数据显示出来可能是一堆乱码,于是表示层把数据把数据转换成通用格式,这样B收到后就能准确的知道A发的消息是什么。如果当心别人窃取了消息,还可以对数据进行加密,B收到后再解密。
会话层:接下来数据就来到了会话层,会话层主要是管理何时建立连接,传送顺序,何时关闭连接。比方说登录FTP服务器要进行身份验证,QQ上传送文件,要先建立一个会话,会话结束后关闭会话。
传输层:数据来到传输层,由于是端到端的传输,传输层采用TCP协议,进行三次握手建立连接,准备发送数据,在传输前应用层还要考虑几个问题,
问题1:我应该发送多大的数据包,因为数据经过的网络有的数据链路可承载的最大传输单元(MTU)都不尽相同,我如果不按最小的单元封包发送,数据在传输的过程中可能要先分片再重组。所以我得知道MTU大小。
问题2:如果每次都发送一帧,然后等待接收回复确认帧,如果这个确认帧在网络中丢失了或者由于网络拥堵一直没传过来,我又要重发数据,这样一来一往的传送效率就低了,那怎样提高发送效率呢。那我就一次多发几条。发送窗口控制。
问题3:我一次多发几条数据接收端能不能接收得过来,如果接收不过来,我后面又要重发数据,那就白折腾了,所以我得知道接收端的实际接收能力。流量控制
问题4:网络是一个共享环境,如果一开始就发送一个较大的包到网络,可能网络 会出现拥堵,为了防止这个问题的出现,所以要还进行拥塞控制。
问题5:发送的数据是否到达,如果没有接收端返回的确认收到的消息,过多久进行重发数据,重发控制。
传输层为了保证通信质量可靠性要作很多控制,以上的这些问题都是实际网络通信探索中遇到的,后续会一个一个问题单独介绍是怎么解决的。
网络层:网络层的作用就将数据从发送端发送到接收端,使用IP协议。那数据怎么走,先发送给谁,要进行路径的选择。此外还要知道下一段主机/路由器的MAC地址,在实际传输的时候,数据可能不是直接从源主机发送到目标主机,数据会经过交换机,路由器等等,是一段一段传输。具体是怎么一段一段传输,然后怎么得到目标IP地址对应的MAC地址的,我后面再细讲数据在网络中怎么传送的。
数据链路层:数据从上层传到了链路层,首先封装MAC地址。数据链路层只负责一个网络分段内的数据传送。
物理层:终于可以发送数据了,发一个前导码,例如101010,同步一下,然后把0、1转换为高低电压和脉冲光传输给物理的传输介质(就是光纤和双绞线)。
假设现在B主机收到了数据,接收方是自下层到上层逐层解包。
物理层收到数据,数据链路层先校验,检查数据在传输过程中有没有损坏,如果有损坏则丢弃,如果没有损坏,则匹配MAC地址,发现是发我的数据包,那就收下了,上交给IP层,IP层解析出来目标IP地址和本机IP地址相同,再上交给传输层,传输层会返回确认帧,再解析出端口号,上交给端口号对应的应用程序,我不知道这里会话层都干了什么,数据到在表示层进行数据编码转换或者解密等等。最终显示消息。接收肯定不会那么简单,肯定还有I/O中断等处理,接收时7层模型每一层都做了什么,相关资料极少,有了解的朋友欢迎在下方指导。
数据在网络中怎么传送的?
前面我们通过DNS域名解析已经知道了目标IP地址,目标IP地址不一定就是B主机的IP地址,原因我已经说过了,教科书讲的都特别理想。
1、 因此首先主机先从会本机的ARP缓存表中查找对应的MAC地址记录。
2、 如果找不到,主机A根据目标IP地址判断目标主机是不是在本网络。
3、 如果不在本网,那说明要数据通过网关发出去。然后主机从本机的ARP缓存表中查找网关对应的MAC地址记录
4、 如果没有找到就发送ARP广播请求网关MAC地址。
5、 回应后,更新本机ARP缓存表,增加记录[目标主机IP,网关MAC地址]。
6、 下次如果要发送数据给目标主机,直接封装网关的MAC地址。
7、 网关收到数据增加记录[A主机,MAC地址]。查自己的ARP缓存表有没有目标IP对应的MAC地址。
8、 如果找到了直接封装对应的MAC地址发送出去,如果没有找到目标主机的MAC,网关根据目标IP地址找路由表,确定下一跳的IP地址。
9、 网关根据下一跳的IP地址,查找网关的ARP缓存表,如果没找到,继续查找下一跳IP地址对应的MAC地址。记录[下一跳的IP地址, 下一跳的MAC地址]
10、 下一跳收到数据增加记录[网关,MAC地址]。重复7~10数据就这样一段一段的在网络上传递,边查询边更新,直到数据查到目标IP的MAC地址。最终把数据发送给目标主机。
DHCP工作原理:
DHCP主要是实现自动设置IP地址,统一管理IP地址分配。
第一阶段:
1、 DHCP客户端广播发现包,发现DHCP服务器,请求IP地址租约。
2、 DHCP服务器收到后预分配一个IP地址,然后发一个ICMP回送请求到网络,确认没有返回应答。再通知客户端可以使用的网络设置。
第二阶段:
3、 DHCP客户端收到DHCP服务器发来的IP地址,广播发送ARP请求包,确认没有返回应答。再给广播DHCP请求包,要求设置2中通知的设置。
4、 DHCP服务器同意3中的设置。
因为网络上可能存在多个DHCP服务器时,一个DHCP服务器不能查出已被其它服务器租出去的IP地址,而且DHCP不能发现网络上非DHCP客户机已经在使用的IP地址。DHCP的确认之所以分两个阶段是为了保证即使在DHCP服务器上重复设置也能正常工作。
ICMP协议:
ICMP主要负责与IP相关的设置,IP包被废弃的原因,网络通信等提供这类功能的协议,像平时经常使用的ping命令,traceroute命令都是利用了ICMP的回送应答消息。
DNS
因为IP地址不好记,所以会给主机取一个方便记忆的标识名,于是就有管理主机名与IP地址的对应表,DNS就提供了一个自动检索某主机名的IP地址的系统。叫域名解析,域名是分层的,如果mail.163和mail.qq就是在mail层下的两个不同的域名。DNS就是互联网中的分布式数据库。
ARP的工作机制:
ARP主要是通过IP地址查找对应的MAC地址信息。例如A主机想询问B主机的MAC地址。首先可以通过DNS找到B的IP地址。
1、 首先查找本机的ARP缓存表中有没有记录,
2、 如果本机上没有找到记录,就广播发送一个ARP请求包,这个请求包将会被同一链路上的其它主机收到。
3、 只有目标IP的主机收到消息后,目标主机才会通过单播的形响应请求主机,如同一链路上没有目标主机就收不到任何响应。
ARP能穿过两层交换机,但不能穿过路由器。对于两层交换机在收到ARP请求后,首先会增加记录[请求主机IP地址,请求主机的MAC地址],接着找到本机的ARP缓存表中是否有目标IP的MAC地址,如果有则从对应的端口发送出去,如果没有,则从默认端口广播ARP请求。
路径MUT发现工作原理:
由于每种数据链路的可承载的最大传输单元可能不同,在传输的过程中IP报文可能要先分片再在目标主机进行数据重组,这样会降低网络传送效率,因此,并不希望路由器做IP数据包的分片处理。所以产生了“路径MUT发现”(Path MTU Discovery)。
1、 发送时IP首部的分片标志位设置为不分片,路由器收到包后会丢弃。
2、 路由器会ICMP通知下一次MTU的大小。
3、 主机收到后,如果是UDP传输,那么后面发送包都会小于等于MTU大小,对于TCP传输,会在发送端传输层就进行分片重发处理。
4、 对于UDP传输,分片到达目标主机后,要重组再传给UDP,但对于TCP传输不需要重组,原样发给TCP层。
窗口控制:
TCP以段为单位发送数据,每发一个段都会进行确认应答。如果这样发一个段就等待回复再发下一段数据,效率太低了,为了提高效率,发送端在发送一个段后可以不必要等待确认应答,继续发送。窗口大小就是指无需等待确认应答而可以发送的最大值。如果收到了前面的确认帧那么窗口就向前滑动一段。否则等待确认应答。
流量控制:
考虑到接收端的接收能力,控制发送的数据量,就是流量控制,具体操作是,接收端主机向发送端主机通知自己可以接收数据的大小,然后发送端调整窗口大小。
拥塞控制:
防止网络拥塞,控制窗口大小。
重发控制:
三层交换机与路由器的区别:
三层交换机和路由器都可以进行路由转发功能,三层交换机的更偏重数据转发功能,路由器偏重不同网络的互联,路由功能更全。
网关与路由器的区别:
网关是个概念,能进行协议转换,能让不同的网络进行通信。可以是路由器,也可能用三层交换机做网关。而路由器是指一个具体设备。
以上是关于数据在网络中的传输的主要内容,如果未能解决你的问题,请参考以下文章