赞
踩
计算机网络网络中传输的网络包具体是什么样子的?又是如何通过一台终端传输到另一个终端?
其实网络包本质就是连续有顺序的0和1的一连串数字,一个终端通过互联网把这一连串有顺序的数字传输到另一个终端接收,这就是网络包传输。
计算机只能识别二进制的数据,数据也是用二进制的方式存储在计算机中。要想实现多台计算机之间的通信,就要依赖一定的通信协议,把二进制的0和1按通讯协议的格式来构成有顺序的0、1串来传输
注:单纯的0和1并没有意义,必须是有顺序的
包是由头部和数据两部分构成的。头部包含目的地址等控制信息,大家可以把它理解为快递包裹的面单,头部后面就是委托方要发送给对方的数据,也就是相当于快递包裹里的货物。
那么具体的包结构是怎么样的呢?还记得TCP/IP协议的分层吗
TCP/IP分为应用层、传输层、网络层、网络接口层,
数据在每层封装处理完后会委托给下一层处理
应用层把要发送的数据委托给下一层通过TCP或者UDP协议去发送,那么在传输层包就会原来的数据外面再加上一个TCP头部或UDP头部,完成后TCP模块再委托给下一层的IP模块去处理,IP模块会在上一层的包外面再加一层IP头部和MAC头部
其他定义
MTU:一个网络包的最大长度,以太网中已办为1500个字节,MTU是包含了TP头部、TCP头部、数据块的总长度
MSS:除去IP头部、TCP头部后网络报所能容纳的最大长度,叫作MSS,即MTU减去头部后的长度就是MSS的长度
注
1.MTU:Maximum Transmission Unit,最大传输单元
2. 在使用 PPPoE 的 ADSL 等网络中,需要额外增加一些头部数据,因此MTU 会小于 1500 字节。
3. MSS:Maximum Segment Size,最大分段大小。 TCP 和 IP 的头部加起来一般是 40 字节,因此 MTU 减去这个长度就是 MSS。例如,在以太网中,MTU 为 1500,因此 MSS 就 是 1460。TCP/IP 可以使用一些可选参数(protocol option),如加密等,这时头部的长度会增加,那么 MSS 就会随
着头部长度增加而相应缩短。
如果应用层每次传一点数据,就发送一个网络包出去,很频繁的话就发送大量的小包,可能造成网络阻塞。所以当从应用程序收到的数据长度超过或者接近 MSS 时再发送出去,就可以避免发送大量小包的问题了。
另一个判断要素是时间。当应用程序发送数据的频率不高的时候,如果每次都等到长度接近 MSS 时再发送,可能会因为等待时间太长而造成发送延迟,这种情况下,即便缓冲区中的数据长度没有达到 MSS,也应该果断发送出去。为此,协议栈的内部有一个计时器,当经过一定时间之后,
就会把网络包发送出去 。
判断要素就是这两个,但它们其实是互相矛盾的。如果长度优先,那么网络的效率会提高,但可能会因为等待填满缓冲区而产生延迟;相反地,如果时间优先,那么延迟时间会变少,但又会降低网络的效率。因此,在进行发送操作时需要综合考虑这两个要素以达到平衡。不过,TCP 协议规格中并没有告诉我们怎样才能平衡,因此实际如何判断是由协议栈的开发者来决定的,也正是由于这个原因,不同种类和版本的操作系统在相关操作上也就存在差异。
发送方的网络设备会负责创建包,创建包的过程就是生成含有正确控制信息的头部,然后再附加上要发送的数据。接下来,包会被发往最近的路由器。当到达最近的路由器后,路由器会根据头部中的信息判断接下来应该发往哪里,发往下一个路由器。接下来,包在向目的地移动的过程中,又会到达下一个路由器,然后又会按照同样的方式被发往下一个路由器。就这样,经过多个路由器的接力之后,包最终就会到达接收方的网络设备。当然,发送方向接收方发送一个包,接收方可能也会向发送方返回一个包,此时的发送方到了接下来的某个时刻就会变成接收方。
发送方的包首先通过计算机网卡,网卡会把包由0、1的数字信号转换为特定电压和电流的电信号,(可能到达光猫,光猫调制器再把电信号转为为光信号通过光纤传输),把包发送给当前网络的路由网关,根据包的MAC地址会找到当前网络的网关,经过交换器传输到网关路由,路由网关接收把把电信号接收后转换为数字信号,在网关路由再根据包的目地的IP地址,找到转发给下一个可达的路由器,把包的MAC头部去掉,换成下一个路由器的MAC头部,重新把数据信号转成电信号发出去,电信号沿着网线传输到下一个路由器
在互联网中以此类推,直到找到另一台计算机所在局域网的路由器,这个路由器里面有一个路由表,里面有缓存了这个局域网的IP地址和MAC地址的对应关系表,如果路由表有,则把包的MAC头部替换为目标IP的MAC头部再发送出去,如果没有,则通过ARP协议向整个局域网发送广播问这个IP是谁的,这个局域网中有计算机对应这个IP地址,那么它会回应这个IP地址是我的,我的MAC地址是xxx,路由表就会缓存这条记录。
最后这个包就到达了另一个计算机的网卡,网卡把电信号转成数字信号接收,校验IP头部是否正确,正确后去掉IP头部发送给TCP模块,TCP模块校验接收后再去掉TCP头部把数据块发送给应用程序
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。