我们电脑上的数据,是如何“走”到远端的另一台电脑的呢?这是个最基础的问题,可能很多人回答不上来,尽管我们每天都在使用网络。这里我们以一个最简单的“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数据包通过以太网网络传输标准手册
实验 网络数据包的监听与分析 一 实验目的 1.掌握使用Wireshark软件监听和捕获网络数据包。 2.掌握通过实际观察网络数据进行分析而了解网络协议运行情况。 二 实验要求 1.设备要求:计算机若干台(装有Windows 2000...
探索数据包的传输过程,以直白的语言讲述数据包传输的整个过程,一本书完整的讲述了整个网络通信原理,强烈推荐给想学习网络通信、数据包传输原理的开发者们
当网络发生异常时,对网络上传输的数据进行监视和分析,是网管人员解决网络故障的一种常用方法。 本文介绍应用层HTTP数据包的截获与还原技术的实现,并简要介绍其中所涉及的数据包截获、数据包分析、应用数据重组以及...
IP数据包的传输全过程动画详解 网络勇士 Featuring: 主要演员: TCP Packet、ICMP Ping Packet、UDP Packet、The Router、Ping of Death、The Router Switch、Supported by a cast of millions.
是网络课的最后大作业,花了一个月时间,对数据包的分析跨越了链路层,网络层,传输层,应用层五个层次。显示数据包的各级头部字段值,并显示其数据内容。所以,本软件可以用作网络监控软件了。基于VC6开发,MFC界面...
简单网络数据包分析程序,对网络传输数据进行分析处理
Linux网络防火墙Netfilter的数据包传输过滤原理.pdf
网络游戏-在物理介质上直接传输IP数据包的网络.zip
对于大型城域网络,宽带城域网络可采用最先进的IP光纤传输技术,这种技术是IP数据包直接在光纤上传输,从而大大提高在以IP应用为主的网络传输的效率和性能。IP光纤传输技术可以无缝地和高速传输技术,如DWDM紧密结合...
(2)在现有保证可靠性的机制上,针对无线传感器网络中的Convergecast结构,提出一种高能效、低延迟的可靠数据传输机制;并对其性能进行分析; (3)随机生成一无线传感器网络拓扑结构,通过实验和理论分析该策略的...
网络数据包截取工具,可监听网络上传输的数据报文,对网络开发有帮助
燕大计算机网络课程的三级项目,使用了TCP通信的那个。然后就是直接下载就能用,这个成绩还不错,下载就能用。TCP传输,
对数据包进行解析,是基于数据包分析的工具要解决的核心问题,构造数据包的协议有很多种,要根据构造数据包的协议对该包进行处理,要正确理解在网络中传输的单元,进而才能很好地控制网络单元的传输,实现数据包的分析。...
对数据包进行解析,是基于数据包分析的工具要解决的核心问题,构造数据包的协议有很多种,要根据构造数据包的协议对该包进行处理,要正确理解在网络中传输的单元,进而才能很好地控制网络单元的传输,实现数据包的分析。...
公用数据网上的IP数据报传输标准 (RFC877——A Standard for the Transmission of IP Datagrams Over Public Data Networks) 此RFC规定了CSNET(VAN网关)和其他组织...需求高峰时期的虚电路管理算法在[1]中给出。
仅供参考:当主机跨越网络向其他设备传输数据时,就要进行数据封装,就是在OSI模型的每一层加上协议信息。每一层只与接受设备上相应的对等层进行通信。物理层:比特流;链路层:数据帧;网络层:数据包(IP报头+数据...
对数据包进行解析,是基于数据包分析的工具要解决的核心问题,构造数据包的协议有很多种,要根据构造数据包的协议对该包进行处理,要正确理解在网络中传输的单元,进而才能很好地控制网络单元的传输,实现数据包的分析。...