`
蒙面考拉
  • 浏览: 160162 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

数据包是如何在网络中传输的 [转]

阅读更多

    我们电脑上的数据,是如何“走”到远端的另一台电脑的呢?这是个最基础的问题,可能很多人回答不上来,尽管我们每天都在使用网络。这里我们以一个最简单的“ping”命令,来解释一个数据包“旅程”。

    假设:我的电脑A,向远在外地的朋友电脑B传输数据,最简单的就是“ping”一下,看看这个家伙的那一端网络通不通。A与B之间只有一台路由器。(路由器可能放在学校,社区或者电信机房,无所谓,基本原理是一样的)

具体过程如下------
    1.“ping”命令所产生的数据包,我们归类为ICMP协议。说白了就是向目的地发送一个数据包,然后等待回应,如果回应正常则目的地的网络就是通的。当我们输入了“ping”命令之后,我们的机器(电脑A)就生成了一个包含ICMP协议域的数据包,姑且称之为“小德”吧~~~~

    2.“小德”已经将ICMP协议打包到数据段里了,可是还不能发送,因为一个数据要想向外面传送,还得经过“有关部门”的批准------IP协议。IP要将你的“写信人地址”和“收信人地址”写到数据段上面,即:将数据的源IP地址和目的IP地址分别打包在“小德”的头部和尾部,这样一来,大家才知道你的数据是要送到哪里。

    3.准备工作还没有完。接下来还有部门要审核------ARP。ARP属于数据链路层协议,主要负责把IP地址对应到硬件地址。直接说吧,都怪交换机太“傻”,不能根据IP地址直接找到相应的计算机,只能根据硬件地址来找。于是,交换机就经常保留一张IP地址与硬件地址的对应表以便其查找目的地。而ARP就是用来生成这张表的。比如:当“小德”被送到ARP手里之后,ARP就要在表里面查找,看看“小德”的IP地址与交换机的哪个端口对应,然后转发过去。如果没找到,则发一个广播给所有其他的交换机端口,问这是谁的IP地址,如果有人回答,就转发给它。

    4.经过一番折腾,“小德”终于要走出这个倒霉的局域网了。可在此之前,它们还没忘给“小德”屁股后面盖个“戳”,说是什么CRC校验值,怕“小德”在旅行途中缺胳膊少腿,还得麻烦它们重新发送。。。。。我靠~~~~注:很多人弄不清FCS和CRC。所谓的CRC是一种校验方法,用来确保数据在传输过程中不会丢包,损坏等等,FCS是数据包(准确的说是frame)里的一个区域,用来存放CRC的计算结果的。到了目的地之后,目的计算机要检查FCS里的CRC值,如果与原来的相同,则说明数据在途中没有损坏。

    5.在走出去之前,那些家伙最后折磨了一次“小德”------把小德身上众多的0和1,弄成了什么“高电压”“低电压”,在双绞线上传送了出去。晕~~出趟门就这么麻烦吗?

    6.坐着双绞线旅游,爽!可当看到很多人坐着同轴电缆,还有坐光纤的时候,小德又感觉不是那么爽了。就在这时,来到了旅途的中转站------路由器。这地方可是高级场所,人家直接查看IP地址!剩下的一概不管,交给下面的人去做。够牛吧?路由器的内部也有一张表,叫做路由表,里面标识着哪一个网络的IP对应着路由器的哪一个端口。这个表也不是天生就有的,而是靠路由器之间互相“学习”之后生成的,当然也可以由管理员手工设定。这个“学习”的过程是依靠路由协议来完成的,比如RIP,EIGRP,OSPF等等。

    7.当路由器查看了“小德”的IP地址以后,根据路由表知道了小德要去的网络,接着就把小德转到了相应的端口了。至此,路由器的主要工作完成,下面又是打包,封装成frame,转换成电压信号等一系列“折腾”的活,就由数据链路层和物理层的模块去干吧。

    8.小德从路由器的出口出来,便来到了目的地----电脑B----所属的网络的默认网关。默认网关可以是路由器的一个端口,也可以是局域网里的各种服务器。不管怎样,下面的过程还是一样的:到交换机里的ARP表查询“小德”的IP地址,看看属于哪个局域网段或端口,然后就转发到B了。

    9.进了B的网卡之后,还要层层“剥皮”,基本上和从A出来的程序是一样的------电脑B先校验一下CRC值,看看数据是否完整;然后检查一下frame的封装,看到是IP协议之后,就把“小德”交给IP“部门”了;IP协议一看目的地址,正确,再看看应用协议,是ICMP。于是知道了该怎么做了------产生一个回应数据包,(可以命名为“回应小德”),并准备以同样的顺序向远端的A发送。。至于刚刚收到的那个数据包就丢弃了。

    10.“回应小德”这个数据包又开始了上述同样的循环,只不过这次发送者是B而接收者是A了。

    以上是一个最简单的路由过程,任何复杂的网络都是在次基础之上实现的。

 

网络数据包大小       

    用UDP协议发送时,用sendto函数最大能发送数据的长度为:65535-20-8=65507字节,其中20字节为IP包头长度,8字节为UDP包头长度。用sendto函数发送数据时,如果指的的数据长度大于该值,则函数会返回错误。

    用TCP协议发送时,由于TCP是数据流协议,因此不存在包大小的限制(暂不考虑缓冲区的大小),这是指在用send函数时,数据长度参数不受限制。而实际上,所指定的这段数据并不一定会一次性发送出去,如果这段数据比较长,可能会被分段发送,如果比较短,可能会等待和下一次数据一起发送。我在测试的时候,发现长度一般会被切成16384(16K)或49152(48K),不知道这两个值有什么意义。

分享到:
评论

相关推荐

    IP 数据包通过以太网网络传输标准

    【IP 数据包通过以太网网络传输标准】指的是在以太网环境中,如何按照标准封装和传输IP数据包的方法。这个标准是针对10MB/S带宽、使用48位地址的以太网设计的,同时也适用于3MB/S、8位地址的以太网,但具体细节在另...

    数据包从以太网卡到传输层的整个过程的概述

    整个数据包从以太网卡到传输层的传递过程涉及了硬件驱动、硬件抽象层、网络层和传输层等多个层次。每个层次都有其特定的功能和职责,共同协作以确保数据包能够准确无误地从源端传送到目的端。通过了解这一过程,我们...

    探索数据包的传输过程

    这个过程体现了数据包通过网络层和数据链路层的紧密合作,以及MAC地址和IP地址共同作用下的网络传输机制。理解这些机制对于开发者、网络工程师和想要深入了解计算机网络的任何人都是非常重要的。随着网络技术的不断...

    IP数据包通过以太网网络传输标准手册

    《IP数据包通过以太网网络传输标准手册》是一份深度探讨互联网协议(IP)数据包如何在以太网环境中高效、可靠传输的权威指南。这份手册基于RFC894文档,该文档是互联网工程任务组(IETF)制定的一份重要规范,详细...

    网络数据传输动画效果

    在本案例中,我们关注的文件“网络传输数据.swf”很可能是一个Flash动画,用于演示这一过程。 首先,我们来深入了解一下网络数据传输的基本概念。网络数据传输是指在互联网上两个或多个设备之间通过网络协议进行...

    数据包获取,网络工具

    数据包获取和网络工具在IT领域中扮演着重要的角色,特别是在网络分析、故障排查和安全监控等方面。数据包是网络通信的基本单位,包含了传输层、网络层、数据链路层等不同层次的信息,如源IP地址、目的IP地址、端口号...

    此工具可帮助您捕捉网络数据包分析,是一款不错的网络管理工具。

    此工具可帮助您捕捉网络数据包分析,是一款不错的网络管理工具。

    捕获网络数据包并分析数据包

    数据包捕获工具能够记录网络上的通信信息,帮助我们理解数据在网络中的传输过程,发现潜在的问题。以下是对这个主题的详细阐述: 一、数据包捕获原理 数据包捕获基于网络监听技术,它允许设备监视所有通过网络接口...

    linux网络数据包处理流程

    在Linux网络子系统中,数据包处理流程还涉及到MTU(最大传输单元)的检查。如果数据包的大小超过了MTU,数据包会被分片,然后发送。这一处理过程包括了ip_fragment和ip_finish_output2()等函数的调用。 最终,...

    网络游戏-在物理介质上直接传输IP数据包的网络.zip

    标题中的“网络游戏-在物理介质上直接传输IP数据包的网络”揭示了我们要探讨的核心话题:网络游戏中的IP数据包传输技术。在这个主题下,我们将深入理解网络基础、IP数据包的结构、物理介质的作用以及如何在这些介质...

    IP数据包的传输全过程动画 翻译文件

    本文基于一部关于IP数据包传输全过程的动画翻译文件,深入解析了IP数据包在网络中的传输机制。该动画通过一系列生动的情景再现,展现了不同类型的网络数据包(如TCP、ICMP、UDP等)以及路由器等网络设备如何协同工作...

    网络游戏-在数据网络中将数据包从第一交换单元传输到第二交换单元的方法与装置.zip

    这个单元负责将数据包封装成适合网络传输的格式,并将其发送到网络中。第二交换单元则是在数据包传输路径上的一个或多个中间节点,它们根据数据包的目标地址决定其下一步的传输方向。 在网络游戏场景中,数据包的...

    java操作网络数据包 论文

    由于网络传输的特性,一个大的HTTP请求或响应可能会被分割成多个TCP数据段,重组过程是必要的,以便正确解读应用层数据。 数据包解码则是将原始的十六进制数据转换为可读的ASCII文本或二进制格式,便于理解HTTP消息...

    IP数据包分析(网络课程设计)

    在“IP数据包分析(网络课程设计)”这个主题中,我们将深入探讨计算机网络的核心概念,特别是关于IP数据包的解析和分析。IP数据包是互联网协议(Internet Protocol)在网络层传输信息的基本单元,它是互联网通信的...

    网络数据包嗅探专家 V4.53

    《网络数据包嗅探专家 V4.53》是一款专为网络分析和故障排查设计的专业工具,它在IT行业中扮演着重要角色。该软件的主要功能是捕获、解析和记录网络上的数据包,帮助用户深入了解网络流量,检测潜在的安全问题,优化...

    c#网络数据包监控软件

    在"sniff.exe"这个例子中,它被要求以管理员权限运行,这是因为数据包捕获可能涉及到底层网络设备的访问,这通常需要较高的系统权限。在Windows系统上,只有管理员才能直接访问网络接口,读取原始数据包。因此,执行...

    电信设备-减少在数据包中作为有用数据传输的通信数据的方法.zip

    标题中的“电信设备-减少在数据包中作为有用数据传输的通信数据的方法”涉及的是通信技术中的数据压缩和效率优化。这一主题的核心是探讨如何在有限的带宽资源下,提高数据传输的效率,减少不必要的通信开销。下面将...

    java抓取数据包及网络基础

    Java抓取数据包和网络基础是IT领域中的一个重要分支,主要涉及如何利用Java语言来捕获网络通信中的数据包,并理解网络通信的基本原理。在这个主题中,我们可以学习到以下关键知识点: 1. **网络基础**:首先,我们...

    计算机网络数据包抓取和分析

    在OSI七层模型或TCP/IP四层模型中,数据包会经历物理层、数据链路层(包括Mac层)、网络层(IP层)、传输层以及应用层等多个层次。WinPcap主要在数据链路层和网络层发挥作用,能够捕获到通过网络接口卡(NIC)的...

Global site tag (gtag.js) - Google Analytics