网络数据包传输过程总结

谈谈网络传输过程 DNS解析:浏览器需要知道百度服务器的IP地址才能发送请求,因此它会向本地DNS缓存、路由器的DNS缓存或ISP的DNS服务器查询“www.baidu.com”的IP地址。如果这些地方没有,请求会逐级向上直至根DNS服务器,最终获得百度服务器的IP地址。解释1:HTTP请求数据包HTTP(Hypertext Transfer Protocol)是应用层协议,用于从Web服务器传输超文本信息到本地浏览器的传输协议。一个典型的HTTP请求数据包包括以下部分:起始行(Request Line) 阅读详情

一、数据包是如何在网络中传输的

我们电脑上的数据,是如何“走”到远端的另一台电脑的呢?这是个最基础的问题,可能很多人回答不上来,尽管我们每天都在使用网络。这里我们以一个最简单的“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数据报需从主机A上传送到主机B上,主机A首先查找路由表;
if(目的主机是与自己在同一个网段内)
{
    主机A查询自己的ARP表;
    if(有该目的IP地址对应的MAC地址的记录)
    {
将该MAC地址作为目的MAC地址,封装数据帧,传送给主机B;
    }
    else
    {
          发送一个ARP请求广播给网段内的所有主机,来查询该目的IP地址的MAC地址;
收到ARP请求报文的各个主机如果发现该IP地址是自己的IP地址,则返回一个ARP应答报文告诉主机A自己的MAC地址;
如果发现不是自己的IP地址,则丢弃该报文。
主机A收到这个应答报文后,就按照返回的MAC地址,将IP数据包封装成帧,然后发送到主机B上;
(补充:一般为了减少网络中的报文量,通信双方会维护一个各自的ARP表,把一次通信中获得IP MAC地址对保存在缓冲的ARP表中,但是ARP表有一个老化机制,删除一段时间内不用的IP MAC地址对。)
    }
}
else if(发现了能与目的网络号相匹配的表目)
{
则把报文发给改表目指定的下一站的路由器或直接连接的网络接口;
报文发送到下一站时,数据帧的目的MAC地址是下一个站路由器或者网络接口的MAC地址,而IP头部的目的IP地址是主机B的IP地址;
这里要指出的是:ARP请求报文以下一站路由器或网络接口的IP地址为目的IP地址,寻找真的目的MAC地址。换句话,ARP请求报文只负责IP数据报传输过程中每一跳中的目的MAC地址查询。
}
else
{
寻找标为“默认”的表目,把报文发送给该表目指定的下一站路由器;
报文发送到下一站时,数据帧的目的MAC地址是下一个站路由器的MAC地址,而IP头部的目的IP地址是主机B的IP地址。
}
数据帧在每两个网络设备间传递时,是转换成bit流在传输媒体上传输。链路层提供了如停止等待协议等机制,控制了bit流在传输媒体上的无措传输。


三、ARP协议详解

前言:ARP协议的作用:

1. 什么是ARP?   
ARP (Address Resolution Protocol) 是个地址解析协议。最直白的说法是:在IP以太网中,当一个上层协议要发包时,有了该节点的IP地址,ARP就能提供该节点的MAC地址。  
2为什么要有ARP?
OSI 模式把网络工作分为七层,彼此不直接打交道,只通过接口(layre interface). IP地址在第三层, MAC地址在第二层。
协议在发生数据包时,首先要封装第三层 (IP地址)和第二层 (MAC地址)的报头, 但协议只知道目的节点的IP地址,不知道其物理地址,又不能跨第二、三层,所以得用ARP的服务。
详细说明:
Ø 在网络通讯时,源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的主机的硬件地址,而数据包首先是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符,则直接丢弃。因此在通讯前必须获得目的主机的硬件地址。ARP协议就起到这个作用
Ø 当一台主机把以太网数据帧发送到位于同一局域网上的另一台主机时,是根据 48位的以太网地址来确定目的接口的,设备驱动程序从不检查 IP数据报中的目的IP地址。ARP(地址解析)模块的功能为这两种不同的地址形式提供映射:32位的 IP地址和 48位的以太网地址

(一)ARP报文各字段含义:

ARP报文字段总共有28个字节
1.硬件类型:占2个字节,表明ARP实现在何种类型的网络上。
Ø 值为1:表示以太网。
2.协议类型:占2个字节表示要映射的协议地址类型。
Ø IP:0800
3.硬件地址长度:占1个字节,表示 MAC地址长度,其值为6个字节。
4.协议地址长度:占1个字节,表示IP地址长度,此处值4个字节
5.操作类型 :占2个字节,表示ARP数据包类型。
Ø 值为1表示ARP请求。
Ø 值2表示ARP应答。
6.源MAC地址:占6个字节,表示发送端MAC地址
7.源IP地址:占4个字节,表示发送端IP地址
8.目的以太网地址:占6个字节,表示目标设备的MAC物理地址
9.目的IP地址:占4个字节,表示目标设备的IP地址.
注意:在ARP操作中,有效数据的长度为28个字节,不足以太网的最小长度46字节长度,需要填充字节,填充字节最小长度为18个字节

(二)ARP请求分组或应答分组

以太网首部总共有14字节数据,arp请求报文总共有28字节。所以一个ARP请求分组或应答分组总共有46字节数据。
而以太网数据包的最小数据为60字节。所以,要对其进行填充。
这里有一些重复信息
1. 在以太网的数据帧报头中和ARP请求数据帧中都有发送端的MAC物理地址。
2. 在发送ARP请求时,以太网帧头中的目的MAC物理地址为FF-FF-FF-FF-FF-FF,而在ARP帧中的目的MAC处此时为空。
3. 对一个ARP请求来说,除ARP中目的端MAC硬件地址外的所有其他的字段都有填充值。当系统收到一份目的端为本地的ARP请求报文后,它就把硬件地址填进去,然后用两个目的端地址分别替换两个发送端地址,并把操作字段置为2,最后发送出去。

(三)ARP协议工作过程:

1. 原理:(ARP协议只使用于局域网中)
1> 在局域网中,网络中实际传输的是“帧”,帧里面是有目标主机的MAC地址的。
2> 在以太网中,一个主机要和另一个主机进行直接通信,必须要知道目标主机的MAC地址。但这个目标MAC地址是如何获得呢?它就是通过地址解析协议获得的。所谓“地址解析”就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程。
3> ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。
4> 点对点的连接是不需要ARP协议的
2. 工作过程:
1> 当主机A向本局域网上的某个主机B发送IP数据报时,就先在自己的ARP缓冲表中查看有无主机B的IP地址。
2> 如果有,就可以查出其对应的硬件地址,再将此硬件地址写入MAC帧,然后通过以太网将数据包发送到目的主机中。
3> 如果查不到主机B的IP地址的表项。可能是主机B才入网,也可能是主机A刚刚加电。其高速缓冲表还是空的。在这中情况下,主机A就自动运行ARP。
(1)ARP进程在本局域网上广播一个ARP请求分组。ARP请求分组的主要内容是表明:我的IP地址是192.168.0.2,我的硬件地址是00-00-C0-15-AD-18.我想知道IP地址为192.168.0.4的主机的硬件地址。
(2)在本局域网上的所有主机上运行的ARP进行都收到此ARP请求分组。
(3)主机B在ARP请求分组中见到自己的IP地址,就向主机A发送ARP响应分组,并写入自己的硬件地址。其余的所有主机都不理睬这个ARP请求分组。ARP响应分组的主要内容是表明:“我的IP地址是192.168.0.4,我的硬件地址是08-00-2B-00-EE-AA”,请注意:虽然ARP请求分组是广播发送的,但ARP响应分组是普通的单播,即从一个源地址发送到一个目的地址。
(4)主机A收到主机B的ARP响应分组后,就在其ARP高速缓冲表中写入主机B的IP地址到硬件地址的映射。
3. 事例说明:用ping说明ARP工作的原理
假设我们的计算机IP地址是192.168.1.1,要执行这个命令:ping192.168.1.2。该命令会通过ICMP协议发送ICMP(以太网控制报文协议)数据包
该过程需要经过下面的步骤:  
1> 应用程序构造数据包,该示例是产生ICMP包,被提交给内核(网络驱动程序);   
2> 内核检查是否能够转化该IP地址为MAC地址,也就是在本地的ARP缓存中查看IP-MAC对应表;
3> 如果存在该IP-MAC对应关系,那么跳到步骤<7;
如果不存在该IP-MAC对应关系,那么接续下面的步骤;
4> 内核进行ARP广播,目的MAC地址是FF-FF-FF-FF-FF-FF,ARP命令类型为REQUEST(1),其中包含有自己的MAC地址;   
5> 当192.168.1.2主机接收到该ARP请求后,就发送一个ARP的REPLY(2)命令,其中包含自己的MAC地址;   
6> 本地获得192.168.1.2主机的IP-MAC地址对应关系,并保存到ARP缓存中;   
7> 内核将把IP转化为MAC地址,然后封装在以太网头结构中,再把数据发送出去;  
4. 特殊情况:
ARP是解决同一个局域网上的主机或路由器的IP地址和硬件地址的映射问题。如果所要找的目标设备和源主机不在同一个局域网上。
1>此时主机A就无法解析出主机B的硬件地址(实际上主机A也不需要知道远程主机B的硬件地址);
2>此时主机A需要的是将路由器R1的IP地址解析出来,然后将该IP数据报发送给路由器R1.
3>R1从路由表中找出下一跳路由器R2,同时使用ARP解析出R2的硬件地址。于是IP数据报按照路由器R2的硬件地址转发到路由器R2。
4>路由器R2在转发这个IP数据报时用类似方法解析出目的主机B的硬件地址,使IP数据报最终交付给主机B.
说明:
Ø 如果你的数据包是发送到不同网段的目的地,那么就一定存在一条网关的IP-MAC地址对应的记录。   
Ø 知道了ARP协议的作用,就能够很清楚地知道,数据包的向外传输很依靠ARP协议,当然,也就是依赖ARP缓存。要知道,ARP协议的所有操作都是内核自动完成的,同其他的应用程序没有任何关系。同时需要注意的是,ARP协议只使用于本网络。

(四)ARP缓冲表和TTL

1. ARP缓冲表
1> ARP协议的本质是完成网络地址到物理地址的映射。从概念上将就是找到一个映射方法f,使得“物理地址 = f(网络地址)“。物理地址有两种基本类型:以太网类型和令牌环网类型。网络地址特指IP地址,对映射方法的要求就是高效。具体到以太网,它使用的是动态绑定转换的方法。一般是设置ARP高速缓存,通过学习,老化,更新,溢出算法处理ARP映射表来解决这些问题。
Ø 学习指ARP收到任何指向本结点IP地址的ARP/IP包,从中提取出地址对,当ARP缓冲表中无对应项时,由ARP接收部分添加;
Ø 老化指为每项设置寿命域,以便代谢掉陈旧的地址映射项;
Ø 更新指ARP提取到新的地址对时,用其更新缓存里已有的对应项;
Ø 溢出算法指当缓存慢时,采取何种方法替代旧有的地址对。
2> ARP缓存表由状态,寿命,IP地址,MAC地址4个字段组成。状态字段指示地址对是否有效;寿命字段用于老化操作,初始存入最大值,以后由OS时间函数调用,每秒减1,直至为0清除;IP地址和MAC地址字段保存网络地址和物理地址的映射。围绕ARP缓存表,完成了4种操作:学习,老化,更新,表满处理。
3> 当ARP被询问一个已只IP地址节点的MAC地址时,先在ARPcache 查看
l 若存在,就直接返回MAC地址,
l 若不存在,才发送ARP request向局域网查询。
4> 当主机A向B发送数据报时,很可能以后不久主机B还要向A发送数据报,因而主机B可能要向A发送ARP请求分组。
所以,为了减少网络上的通信量,主机A在发送其ARP请求分组时,就将自己的IP地址到硬件地址的写入主机B自己的ARP高速缓冲表中。这对主机B以后向A发送数据报时就更方便了。
Tiger 说明:
任何事物都有两面性,如果掌握的好它就是天使,如果掌握的不好它就是Satan,ARP中的缓冲表为计算机之间的通信效率和减少网络通信量之间作出了巨大的贡献,但是它同时为我们上网时留下了安全隐患;例如交换机嗅探(在下面会有介绍)
2. ARP中的TTL(即上面所说的寿命域)
ARP将保存在高速缓冲表中的每一个映射地址表项都设置了TTL(生存时间),只要TTL小于0的项目就从高速缓冲表中删除掉。
(ARP的超时值一般为20分钟,对不完整的表项设置为20分钟,而对不完整的表项设置为2分钟《不完整的表项:即在以太网上对一个不存在的主机发出ARP请求》,当这些表项再次使用时,这些实现一般都把超时值重新设为20分钟。)
好处:主机A和B通信。A的ARP高速缓冲表里保存有B的物理地址。但B的网卡突然坏了,B立即就更换了一块,因此B的硬件地址就改变了。A还要和B继续通信。A在其ARP缓冲表中查找到B原先的硬件地址,并使用该硬件地址向B发送数据帧。但B原先的硬件地址已经失效了。因此A无法找到主机B。但是过了一段时间,A的ARP高速缓冲表中已经删除了B原先的硬件地址(因为它的生存时间到了),于是A重新光播发送ARP请求分组,又找到了B。

(五)ARP命令:

1. 使用arp-a命令就可以查看本地的ARP缓存内容,所以,执行一个本地的PING命令后,ARP缓存就会存在一个目的IP的记录了。
2. 使用arp –d来删除ARP高速缓存中的某一项内容
3. 使用arp –s来增加高速缓冲表中的内容,这个命令需要主机名和以太网地址。新增加的内容是永久性的,除非在命令行的末尾加上关键字temp。
arp –s 157.55.85.212 00-aa-aa-562-c6-09
增加一个静态的ARP表项。
4. arppub –s:使系统起着主机ARP代理功能。系统将回答与主机名对应的IP地址的ARP请求。

(六)ARP其他方面

1.交换网络的嗅探
1>1.ARP协议并不只在发送了ARP请求才接收ARP应答
当计算机接收到ARP应答数据包的时候,就会对本地的ARP缓存进行更新,将应答中的IP和MAC地址存储在ARP缓存中。
因此,在上面的假设网络中,B向A发送一个自己伪造的ARP应答,而这个应答中的数据为发送方IP地址是192.168.10.3(C的IP地址),MAC地址是DD-DD-DD-DD-DD-DD(C的MAC地址本来应该是CC-CC-CC-CC-CC-CC,这里被伪造了)。当A接收到B伪造的ARP应答,就会更新本地的ARP缓存,将本地的IP-MAC对应表更换为接收到的数据格式,由于这一切都是A的系统内核自动完成的,A可不知道被伪造了。ARP欺骗的主要用途就是进行在交换网络中的嗅探。
2.IP地址冲突
1>如果网络中存在相同IP地址的主机时候,就会报告出IP地址冲突的警告。
2>如何产生?
Ø 比如某主机B规定IP地址为192.168.0.1,如果它处于开机状态,那么其他机器A更该IP地址为192.168.0.1就会造成IP地址冲突。
Ø 其原理是:主机A在连接网路(或更改IP地址)的时候就会向网络发送ARP包广播自己的IP地址,也就是free arp(免费ARP).如果网络中存在相同IP地址的主机B,那么B就会通过ARP来reply该地址,当A接收到这个reply后,A就会跳出IP地址冲突的警告,当然B也会有警告。因此用ARP欺骗可以来伪造这个ARPreply,从而使目标一直遭受IP地址冲突警告的困扰。
3.阻止目标的数据包通过网关
1>比如在一个局域网内通过网管上网,那么连接外部的计算机上的ARP缓存中就存在网管IP-MAC对应记录
2>如果,该记录被更改,那么该计算机向外发送的数据包总是发送到了错误的网关硬件地址上,这样,该计算机就不能上网了。
3>这里也主要是通过ARP欺骗进行的。有两种方法达到这样的目的:
Ø 向目标发送伪造的ARP应答数据包,其中发送方的IP地址为网管的地址,而MAC地址则为一个伪造的地址。当目标接收到ARP包,那么就更新自身的ARP缓存。如果该欺骗一直持续下去,那么目标的网管缓存一直是一个被伪造的错误记录。不过,如果使用arp –a,就知道问题所在了。
Ø 第二种方法是欺骗网管。向网管发送伪造的ARP应答数据包,其中发送方的IP地址为目标的IP地址,而MAC地址则为一个伪造的地址。这样,网管上的目标ARP记录就是一个错误的,网管发送给目标的数据报都是使用了错误的MAC地址。这种情况下,目标能够发送数据到网管,却不能接收到网管的任何数据。同时,目标自己查看arp –a却看不出任何问题来。
4.通过检测混杂模式节点
1>在混杂模式中,网卡进行包过滤不同于普通模式。本来在普通模式下,只有本地地址的数据包或者广播(多播等)才会被网卡提交给系统核心,否则的话,这些数据包就直接被网卡抛弃。现在,混合模式让所有经过的数据包都传递给系统核心,然后被sniffer等程序利用。   
2>通过特殊设计的ARP请求可以用来在一定程度上检测处于混杂模式的节点,比如对网络中的每个节点都发送MAC地址为FF-FF-FF-FF-FF-FE的ARP请求。对于网卡来说这不是一个广播地址(FF-FF-FF-FF-FF-FF),所以处于普通模式的节点就会直接抛弃该数据包,但是多数操作系统核心都认为这是一个广播地址,如果有一般的sniffer程序存在,并设置网卡为混杂模式,那么系统核心就会作出应答,这样就可以判断这些节点是否存在嗅探器了。
3>可以查看,很多基于ARP的攻击都是通过ARP欺骗实现的。至于ARP欺骗的防范,还是尽可能使用静态的ARP。对于WIN,使用arp-s来进行静态ARP的设置。
当然,如果能够完全使用静态的IP+MAC对应,就更好了,因为静态的ARP缓存只是相对的。当然,可以有一些方法来实现ARP欺骗的检测。设置一个ARP的嗅探器,其中维护着一个本地网络的IP-MAC地址的静态对应表,查看所有经过的ARP数据,并检查其中的IP-MAC对应关系,如果捕获的IP-MAC对应关系和维护的静态对应关系对应不上,那么就表明是一个欺骗的ARP数据包了。


四、电脑本机的子网掩码工作过程(我猜测)

网卡收到第三层数据包(仅含有IP地址)后,要对其进行帧封装,以便通过第二层链路层发送出去,此时需要填充目的地址的mac地址。

    首先判断目的IP地址是否在本子网内(通过子网掩码判断),如果是,则在arp缓存中查找(或查找不到时启动arp协议询问),如果找到则填充目的mac地址,并通过网卡发到直连的交换机上(或集线器或路由器一端),以后数据包就由交换机或路由器负责传输下去了,如果找不到,说明本子网内根本不存在此目的ip地址,即要发往的地址不存在,则返回超时错误。

    然后判断出IP地址不在本子网内,则找到本机的默认网关的IP地址,表明应该先把该数据包发往默认网关机器上,此时利用arp协议查找默认网关IP地址对应的默认网关机器的mac地址,然后把数据包填充上默认网关机器的mac地址,然后发网路由器,因为此时的数据帧的目的mac地址写的是默认网关的mac地址,交换机(或路由器)接收的数据包后,会发往默认网关机器。以后数据包就由默认网关继续往下传输了。

数据包(Packet) 数据包(Packet)是计算机网络中数据传输的基本单位。当你在网络上发送或接收数据(例如浏览网页、发送邮件、观看视频)时,数据并不是以一个完整的“大块”直接传输的,而是被拆分成一个个小的、标准化的数据单元,这些单元就是数据包。数据包是网络通信的基石,理解其结构、工作原理和相关协议非常重要。数据包不仅涉及计算机网络的基础知识,还与AI在网络安全、分布式系统、流量优化等领域的应用密切相关。 阅读详情

相关推荐

2024年网络安全最新Wireshark抓包分析IP协议_捕捉并分析ip数据包

数据帧的最大传输限制(MTU)是1500字节,我们 ping 的数据包是 3200 字节,会被IP协议分割成三个数据包(1500 + 1500 + 200),刚好对应前面三个请求包;之所以只保存了1480个字段,是因为首部占了20个字节,首部+数据刚好够1500个字节,达到数据帧的上限。TTL是生存时间值,每经过一个路由器时,生存时间值减1,减少为0时,则会丢弃,目的是防止数据包在网络中循环转发,以节约网络资源。Fragment Offset字段的值是0,表示这个数据分片从第0个字节开始保存数据。

2401_84297944的博客 2051

数据包在网络中的传输过程详解

我们当今使用电子设备都离不开网络,通过网络我们可以聊天、玩游戏、看电影都操作。 网络的本质就是交换数据。 本文我们就来看下数据是如何在网络中传输的。 计算机网络模型 现在有两种计算机网络模型,分别为OSI七层模型和TCP/IP四层模型 OSI将计算机网络分为了7层,TCP/IP将计算机网络分为了4层 计算机网络书中为了更好的解释运行原理,将TCP/IP模型改变成了五层模型,将TCP/IP四层模型中的网络接口层分为了数据链路层和物理层。 本文也采用五层模型来解释数据在网络中的传输流程。 TCP/IP五层模

qq_40276626的博客 2万+

线程交替打印

线程交替打印

sowhat 1213

网络数据传输流程

目录 一,局域网传输流程 1.集线器 2.交换机 3.交换机+路由器 二,广域网数据传输流程 主要过程 一,局域网传输流程 1.集线器 主要过程 源主机:从上到下封装,如果知道目的IP主机的MAC地址就直接封装在数据链路层的以太网帧头中,如果没有找到进行ARP寻址(相当于喊话)收到MAC地址后,封装好在发送 集线器给每一台主机都发,不同主机判断这个数据包是不是给自己的 目的主机进行从下到上的分用 2.交换机 主要过程 源主机从上到下封装数据包中,如果知道目的IP主机的M.

qq_54773998的博客 6962

拯救者R9000P-2021-AMD5800H黑苹果EFI配置与优化指南

本文详细介绍了在联想拯救者R9000P 2021款(搭载AMD锐龙7 5800H处理器)上安装和优化黑苹果系统的完整指南。内容涵盖EFI配置、OpenCore引导设置、关键驱动(如NootedRed核显驱动)的调整,以及安装后的性能调优与常见问题解决,旨在帮助开发者和极客用户在这款游戏本上搭建稳定可用的macOS开发环境。

weixin_29291069的博客 283

K-L展开 (Karhunen-Loeve expansion)

K-L变换

susan_wang1的博客 2万+

数据包在网络中传输的过程

从PC1到Server的整个数据包流动过程,PC1执行OSI七层的封装,然后把比特流传到集线器;R1执行OSI下三层的处理后,再把比特流传到路由器R2;R2执行OSI下三层的处理后,再把比特流传到交换机;网络层的设备改变帧的格式,要执行帧的解封装和再封装,但不改变数据包中的源和目的IP地址。数据链路层的设备也不改变帧的格式,但可以根据数据帧中的目的MAC地址进行转发;从这个流动过程中,可以发现数据流在中间设备上主要执行的是OSI下三层的操作。物理层的设备不改变帧的格式,广播式转发。

qq_41764621的博客 1294

从零构建XVC协议栈:FPGA+W5300的跨界调试架构实战

本文详细介绍了如何从零构建XVC协议栈,通过FPGA与W5300以太网控制器的创新组合实现跨界调试架构。重点解析了JTAG时序逆向、TCP/IP协议栈集成与XVC协议实现,提供了硬件设计优化和性能加速技术,为嵌入式开发者和FPGA工程师提供实用的远程调试解决方案。

raspberrypi5的博客 247

网络数据包的传输和TLS加密过程

网络数据包的传输加密过程,以及抓包原理

MIILN的博客 1411

一分钟理解 AP(Affinity Propagation) 亲和⼒传播算法

这篇博客发出来后,我用 Rust 复现代码出现问题。为此,我对对照了 sklearn 的相关代码,反复比较了两天,发现一处 bug,把 += 误写成了 =,导致数据量大的时候完全无法聚类。这个debug过程让我仔细梳理的 AP 算法的计算过程,今天我对这篇博客做了大规模修改,以便能原样展现原论文思想。

程序猿视角 3219

Linux下科大讯飞离线语音识别SDK从下载到实战(附常见问题解决)

本文详细介绍了在Linux系统下,如何从科大讯飞开放平台获取离线语音识别SDK,完成环境准备、编译部署到实战开发的完整流程。文章重点解析了SDK目录结构、语法词典定制、示例代码修改,并针对开发中常见的“词典加载失败”、音频格式、交叉编译及性能优化等问题提供了深度解决方案,助力嵌入式与IoT开发者快速实现稳定可靠的离线命令识别功能。

honey的博客 1239

一个数据包在网络中传输的全过程

想必不少小伙伴面试过程中,会遇到「当键入网址后,到网页显示,其间发生了什么」的面试题。这次,我带大家一起探究下,一个数据包在网络中的心路历程。每个阶段都有数据包的「心路历程」,我们一起看看它说了什么?接下来以下图较简单的网络拓扑模型作为例子,探究探究其间发生了什么?

swadian2008的博客 1万+

PaddleOCR实战:从零开始训练自己的OCR模型(附完整代码与数据集处理技巧)

本文提供了一份详尽的PaddleOCR实战指南,手把手教你从零开始训练专属的OCR模型。内容涵盖高质量训练数据的准备与标注技巧、预训练模型的选型对比、关键参数调优策略,并附有完整的代码示例。通过遵循本文的步骤,开发者可以高效构建并优化贴合自身业务场景的高精度OCR模型,实现从数据到部署的全流程掌握。

weixin_29263201的博客 570

计算机网络 数据包在传输过程中的变化过程

这些层次的数据形式和结构各不相同,但通过这些层次的协同工作,数据能够在网络中从源端到目的端进行有效的传输和处理。每一层的协议和数据结构都有其特定的功能和责任,确保网络通信的可靠性、安全性和效率。在计算机网络中,数据包在传输过程中经历多个阶段和变化,主要包括封装、传输、路由和解封装等过程。这些过程使得数据能够在复杂的计算机网络中进行可靠和高效的传输。每一步都依赖于不同层次的协议和设备,确保数据从源端到目的端的有效传递和处理。在TCP/IP模型中,

weixin_63162063的博客 1122

风电功率预测项目技术白皮书:短期、超短期、中长期全尺度算法详解与工程落地

聚焦风电功率预测的时间尺度与算法:短期(0~72h)以XGBoost/LightGBM/CatBoost及深度学习为主,超短期(0~4h)采用ARMA+LSTM,中长期用LightGBM等,并涵盖概率预测、多气象源融合、AI大模型+物理模型混合策略、极端天气应对及工程运维要点。

算法工程师 323

46、聚类算法在智能交通数据分析中的应用

本文探讨了聚类算法在智能交通数据分析中的应用,介绍了K-均值算法、K-中心点算法和基于模型的聚类算法的基本原理及特点,并结合实际交通数据讨论了其应用场景与挑战。通过聚类分析,能够从海量交通数据中发现隐藏模式,为交通管理和规划提供科学依据。文章还展示了具体的案例分析和实现流程,为未来智能交通系统的发展提供了参考。

zz67890的博客 133

IP数据包在计算机网络传输的全过程

数据包从源主机到目的主机的传输过程涉及多层封装与解封装。应用层HTTP请求经TCP分段、IP封装后形成数据报,通过ARP获取MAC地址并转为物理信号传输。路由器接收后验证帧有效性,检查IP头部并依据路由表转发,更新TTL后重新封装发送。目的主机反向解封装,最终将HTTP请求递交给Web服务器处理。整个过程展现了网络协议栈的分层协作与路由器的核心转发功能。

shadow2kkkk的博客 711

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

网络协议(三):路由器原理及数据包传输过程

练习一:让4台主机之间可以互相通信(静态路由)练习二:让4台主机之间可以互相通信(静态路由)

从基础到源码解析的学习记录 3934

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

IP数据包在网络中的传输过程

1. 获取目的IP 2. 判断源IP与目的IP是否在同一网段 --> 比较IP& Genmask 是否相同 2.1 若在同一网段,则先查询arp缓存中是否有目的ip的mac地址,如果arp缓存中有则封装mac包,将ip数据发送给目的主机;如果arp缓存中没有则发送arp请求得到目的主机的mac地址 2.2 若不在同一网段,则将数据包发送给默认路由(或者是网关),通过多个路由(或者是网关)的转发,找到目标子网。重复2.1的操作。 MAC头部 ...

zaa_12346的博客 3857

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

【第三期】计算机网络常识/网络分层模型与数据包封装传输过程

文章目录一、计算机网络分层/五层模型二、数据包传输过程2.1同一网段之间的通信:2.2不同网段之间的通信: 我们在解决一个问题的时候,通常会把问题进行拆分,通过拆分以后的子集分析出前因后果,最后找出解决方案,把解决方案进行建模,形成新模型;当下次遇到相同或相似问题的时候我们就会利用之前得到的模型进行复用。 一、计算机网络分层/五层模型 计算机网络为什么要分层呢?因为本质上他就是在解决问题,解决计算机之间的通信问题,这里面就涉及到数据包在两个计算机之间传递的过程。 在第三期就是本篇内容,我们讨论的东西开始

令狐_JackieHao的博客 2370

网络协议 一 路由的概念、简述数据包的传输过程、网络常见概念、公网、私网、NAT(私网转公网)

网络协议从入门到底层原理 路由 实践1 - 让4台主机之间可以互相通信 实践2 - 让4台主机之间可以互相通信 数据包的传输过程(简) 第一个包的丢失 网络 (Network)、互联网 (internet)、因特网 (Internet) ISP(互联网服务提供商) 网络分类(局域网、城域网、广域网) 常见接口(FastEthernet、GigabitEthernet、Serial) 上网方式(电话线入户、光纤入户、网线入户、无线路由器) 公网IP、私网IP NAT(Network Address

Guizy 1410

【计算机网络】网络数据包传输过程

本文为系列文章的个人学习笔记,对具体知识点与示例进行了归纳整理,详细内容参考。

广皈的博客 3004

【计算机网络】数据包在传输过程中的变化

🔥❤️数据从传输层到网络层,在原数据包到基础上加了IP头,变成了。数据从传输层到物理层,在原数据包的基础上增加了。数据从应用层到传输层,在原数据的基础上加了。

代码兴国 485

网络前三层(物理,数据链路层,网络)数据包传输过程

网络前三层(物理,数据链路层,网络)数据包传输过程

qq_48984096的博客 1860

网络协议之网页数据包到服务器的传输过程

1、浏览器输入网址。例子:https://www.iqiyi.com2、浏览器打开地址簿,查找域名对应的ip,找到对应的服务器。该查找过程用到了地址簿协议DNS,或更为精准的地址簿查找协议HTTPDNS3、浏览器打包请求,http协议或https协议4、浏览器将经过应用层(DNS,http,https)封装后的数据包交给传输层(TCP,UDP)。TCP:面向连接,保证连接到达,不能到达则重链,直至...

qishi123910的专栏 1863

计算机网络-数据包传输过程

路由器与交换机的区别与联系_WhataNerd的博客-优快云博客_路由器与交换机的主要区别

hanweixiao的博客 316
上一篇: C/C++常用头文件及函数汇总
下一篇: [引用区别] c++中引用与java中引用区别
HNFXS985
博客等级 码龄14年 219粉丝 150原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值