2025 08 20 19:01:20| 来源: 互联网整理
之前讲了「从输入 URL 再到浏览器成功看到界面」中的域名是如何变成 IP 地址的,了解了 DNS 相关的东西。这篇文章就聊聊发生在 DNS 解析之后的操作——建立连接。也就是我们常说的三次握手。
看到三次握手你可能会说,这不是面试都被问烂了的题吗?
三次握手不就是:
这不就完了吗?还有什么好聊的?
这篇文章不会涉及到上面提到的什么各种状态的变化,包内的标志位是什么,而是会更加关注于底层的东西,也就是上面那些发来发去的数据包是如何发送出去的。
其实不仅仅是建立连接时的三次握手,像浏览器中调用的很多 HTTP 接口,都会和服务器进行通信。
那这些个请求到底都是怎么发送给服务器的呢?
这还用问?不就是发个 HTTP 请求就过去了吗?
当然,这个答案可能是很多不了解网络的人可能会说出的答案。
其实更具体、更准确的说法是通过协议栈和网卡发送出去的。
其中,协议栈负责对数据进行打包,打包完成之后就由网卡将数据转换成电信号,通过光纤发送出去了。
网卡自不必说,用来和其他的计算机进行通讯的硬件,我们常说的 MAC(MediumAccessControl) 地址,其实就是网卡的编号,从其被生产出来的那一刻就被确定的一个唯一编号。MAC 地址长为48 个比特,也就是 6 个字节,用十六进制进行表示。
当我们知道了和我们通信的 IP 地址之后,就可以委托操作系统中的协议栈将来来自应用程序的数据,打包成数据包然后发送出去。那协议栈,具体是啥呢?协议栈其实是一系列网络协议的总和,例如:
不同的应用程序在进行数据传输的时候,可能会选择不同的协议。例如我们使用的浏览器就是使用的 TCP 协议,而像之前讲过的 DNS 解析就用的 UDP 协议。
那数据在协议栈中到底经历了什么?才变成了一个一个的数据包?
就拿我们向服务器发送一个 HTTP 请求作为例子,我们知道 HTTP 请求中有:
HTTP 是属于应用层的协议,而应用层还有很多其他的协议,每个协议所涉及到的数据也都不同,协议栈要怎么去兼容不同协议之间的数据呢?
答案是不做兼容。对于协议栈来说,所有的数据都只不过是一堆二进制序列。
那协议栈收到了这一堆二进制序列之后是不是就直接交给网卡发送了呢?
我都这么问了,那显然不是了…
其实协议栈在收到数据之后并不会马上就会就发送出去,而是会先写入位于内存的 Buffer中。那为啥不直接发出呢?
其实很简单,假设你现在正在公交车的起始站,你觉得公交车会来一个人就立马发车吗?
显然不是,它会等一段时间,有更多的乘客上车之后再发车。但是它又不能等太长的时间,不然后续站台的乘客就会等的很久。
协议栈之所以不立即发出去,其实也是同样的道理。其实这背后无非基础两种考虑:
应用层的程序发送过来的数据可能长度都不太一样,有的可能一个字节一个字节的发, 有的可能一次性就传入所有的数据。
如果收到数据就发送出去,会导致在网络中传输着很多小包,而这会降低网络传输的效率。
所以,协议栈在收到数据之后会等待一段时间,等数据达到一定量之后,再执行发送操作。
但是,协议栈又不能等的太久是吧?等太久了你让正在电脑面前操作的用户情何以堪,这种发送延迟会让用户体验刷刷的往下掉。
但是吧,想做到对这两者的平衡却不是一件简单的事。数据包太短,降低网络传输效率,等待太长时间,又会造成发送延迟。所以协议栈索性就把控制权交给了应用程序。
应用程序可以自己控制到底采取哪种措施,例如我们常用的浏览器,因为和用户实时的在进行交互,用户对整个页面的响应速度也相当敏感,所以一般都会采用直接发送数据的方式,即使其数据并没有达到「一定的量」
这一个「一定的量」到底是啥?
的确,上面都只说一定的量、一定的量,那这个量到底是多少?
要了解这个我们需要知道两个参数,分别是:
MTU 其实就代表了上面途中数据包的最大长度,一般来说是 1500 字节。而我们需要知道数据包是由以下部分组成的:
而从 MTU 中减去各种头部数据的大小,剩下的就是 MSS 了,也就是实际的数据。
知道了数据包的组成和 MTU、MSS 的概念之后,我们就可以继续接下来的步骤了。某次发送的数据,没有超过 MSS 还好,就可以直接发送出去了。
那如果超过了 MSS 咋办?例如我发这篇文章时所发请求的数据长度就可能超过 MSS 。
过长数据包拆分
此时就需要对数据进行拆分,按照 MSS 的长度为单位进行拆分,将拆出来的数据分别装进不同的数据包中。拆分好之后,就可以发送给目标服务器了。
TCP 会确保通信的服务器能够收到数据包。传输时对每个字节都进行了编号,举个例子,假设此次传输的数据是1 – 1000字节,然后服务器回的 ACK 就会是 1001,这就代表没有丢包。
这些发送过的包都会暂存在 Buffer 中,如果传输的过程中出错,则可以进行重发的补偿措施。这也是为什么在数据链路层(例如网卡、路由器、集线器)等等都没有补偿机制,它们一旦检测到错误会直接将包丢弃。然后由传输层重发就好。
那要是网络很拥堵,服务器一直没有返回怎么办?
在服务器端,我们去和其他第三发进行交互时,是不是都会设定一个超时的时间?如果不设置超时时间那难道一直在这等下去吗?
TCP 也同理。客户端在等待服务器响应时,会有一个时间叫ACK 等待时间,其实也是超时时间。
当网络发生拥堵时,其实你完全也可以把网络拥堵理解成路上堵车。此时,ACK 的返回就会变慢。如果返回时间长到了让客户端认为服务器没有收到,就有可能会重发。
并且有可能刚刚重发完,ACK 就到了。虽然服务器端可以通过序号来对包进行判重,不会造成错误,但是这种没有意义的重复包,在本身网络负担已经很重的情况下,你还往里怼重复的无用的数据包,这不是扯淡吗?这明显不行的。
那怎么避免上面的这个情况呢?答案很简单,稍微延长一点ACK等待时间,这样一来就能一定程度上避免上述的问题。但是用屁股想想应该也知道,这个时间肯定不是越长越好,再长用户那又该等爆炸了。
除了网络波动会影响到 ACK 的返回时间,通信的物理距离也是一个影响的因素。说白了就是这玩意儿不可能设置一个固定的时间。所以,实际上,这个等待时间是动态调整的,这次稍微返回慢了点,那我下次就稍微延长一点等待时间。返回 ACK 的速度如果很给力,那么就会相应的减少等待。
上面的概念也有一个大家很熟悉的名字,叫——超时重传。
我们来设想一个更加极端的情况,假设你们通信的网线被挖断了,甚至机房起火了,这个时候无论你重发多少次都没用。那 TCP 不就一直无限循环的把请求发下去了?
当然 TCP 设计时也考虑到了这种情况,其在重传几次无效之后,就会强制中断通信,并抛出错误给应用程序。
问题又来了,客户端在向服务器发送数据包之后,等待 ACK 的过程中,真的就只是等 ACK,其他的什么也不做吗?
当然不是,这样极其的浪费资源,降低通信效率。发送完一个数据包之后,不用等待 ACK 的返回,会直接继续发送下一个包,这就是滑动窗口。
但是这样会有一个问题,应用程序发送包发送的过于频繁,导致服务器接收不过来了。
因为刚刚说过,应用程序发送的时候,会将发送过的数据存储在 buffer 中。而对于接收方也是一样的,接收方收到消息之后,会将数据存储在 Buffer 中,然后在 Buffer 中对收到的数据进行重组,还原成最初的应用程序发送的数据。
但是如果发送的数据太快,超过了重组的速度,缓冲区就会被填满。而缓冲区一旦被填满,后续的数据就无法再接收了,然后丢包就出现了。
那 TCP 是如何解决这个问题的呢?答案是流量控制。为了防止传输方发送的过快直接造成丢包,继而触发上面的超时重传机制,根据接收方的接受能力,来决定发送方的传输速度,这个机制就是流量控制。
该机制作用于接受方。在TCP报文头部中会用一个16位的字段来表示窗口大小,非常重要的调优参数。这个数字越大,则说明接收方的缓冲区越大,能够接收更多的数据。接收方会在确认应答的时候,将自己的剩余窗口大小写入,随ACK一起发送给发送方。
TCP流量控制
如果发送方接收到的大小为0,那么此时就会停止发送数据。这样会有一个问题,如果下一个应答(也就是窗口大小不为0)在过程中丢了,那么发送方就会进入死锁,相互等待。所以发送方会定期的向接收方发送窗口探测的数据段。
好了,关于数据包的发送就介绍到这里。之后有机会再聊聊 TCP 的拥塞控制相关的东西。
本篇文章已放到我的Githubgithub.com/sh-blog 中,欢迎 Star。微信搜索关注【SH的全栈笔记】,回复【队列】获取MQ学习资料,包含基础概念解析和RocketMQ详细的源码解析,持续更新中。
如果你觉得这篇文章对你有帮助,还麻烦点个赞,关个注,分个享,留个言。
1.常规的网络交互过程是从客户端发起网络请求,用户态的应用程序(浏览器)会生成 HTTP 请求报文、并通过 DNS 协议查找到对应的远端 IP 地址。
2.在套接字生成之后进入内核态,浏览器会委托操作系统内核协议栈中的上半部分,也就是 TCP/UDP 协议发起连接请求。
3.然后经由协议栈下半部分的 IP 协议进行封装,使数据包具有远程定位能力。
4.经过 MAC 层处理,找到接收方的目标 MAC 地址。
5.最终数据包在经过网卡转化成电信号经过交换机、路由器发送到服务端,服务端经过处理拿到数据,再通过各种网络协议把数据响应给客户端。
6.客户端拿到数据进行渲染
7.客户端和服务端之间反复交换数据,客户端的页面数据就会发生变化。刚才的过程中,提到了多个层级和网络协议,那么网络为什么要分层呢?网络协议又是什么?
在计算机网络时代初期,各大厂商推出了不同的网络架构和标准,为统一标准,国际标准化组织 ISO 推出了统一的 OSI 参考模型。
当前网络主要遵循的 IEEE 802.3 标准,就是基于 OSI 模型提出的,主要定义的是物理层和数据链路层有线物理数据流传输的标准。
那网络为什么要分层?
通过分层处理简化问题难度,降低复杂度,由于分层后的各层之间相互独立,我们可以把大问题分割成小问题。同样,分层也保证了网络的松耦合和相对的灵活,分层拆分后易于各层的实现和维护,也方便了各层的后续扩展。网络分层解决了网络复杂的问题,在网络中传输数据中,我们对不同设备之间的传输数据的格式,需要定义一个数据标准,所以就有了网络协议。网络协议是双方通信的一种约定,以便双方都可以理解对方的信息。接下来我们就用 OSI 协议体系中广泛应用的 TCP/IP 层的体系结构来分析整个过程,需要重点关注数据处理的过程和网络协议
ISO_OSI通信流转示意图:
先来看下网络应用层的工作流程,依然以浏览器中输入URL开始。
在浏览器中输入URL,浏览器会根据输入内容,先匹配对应的URL以及关键字,给出输入建议,同时校验URL的合法性,并且会在URL前后补全URL
以输入 cosmos.com 为例,首先浏览器会判断出这是一个合法的 URL,并且会补全为 http://www.cosmos.com。
其中 http 为协议,cosmos.com 为网络地址,每个网络栏的地址都符合通用 URI 的语法。URI 一般语法由五个分层序列组成。后面的第一行内容我给你列了 URL 的格式,第二行做了行为说明。
URIscheme:[//authority]path[?query][fragment]
URI = 方案:[//授权]路径[?查询][片段ID]
接着,浏览器从 URL 中会提取出网络的地址,也叫做主机名(host),一般主机名可以为域名或 IP 地址,此处使用域名。对 URL 进行解析之后,浏览器确定了服务器的主机名和请求路径,接下来就是根据这些信息来生成 HTTP 请求消息了,但此时并未将HTTP请求发送出去
浏览器在 HTTP 报文生成完成后,它并不是马上就开始网络请求的。
在请求发出之前,浏览器首先会检查保存在本地计算机中的缓存,如果访问过当前的 URL,会先进入缓存中查询是否有要请求的文件。此时存在的缓存有路由器缓存、DNS 缓存、浏览器缓存、Service Worker、Memory Cache、Disk Cache、Push Cache、系统缓存等。如果在浏览器缓存里没有命中缓存,浏览器会做一个系统调用获得系统缓存中的记录,就是我们的 gethostbyname 方法,它的作用是通过域名获取 IP 地址。这个方法会返回如下结构。
structhostent
{
charh_name;// 主机的别名.www.cosmos.com就是google他自己的别名
charh_aliases;// 主机ip地址的类型,到底是ipv4(AF_INET),还是pv6(AF_INET6)
inth_addrtype;// 主机ip地址的长度
inth_length;// 主机ip地址的长度
charh_addr_list;// 主机的ip地址,注意,这个是以网络字节序存储的
defineh_addr h_addr_list[0] 这个函数,是将类型为af的网络地址结构src,转换成主机序的字符串形式,存放在长度为cnt的字符串中。返回指向dst的一个指针。如果函数调用错误,返回值是NULL
};
如果没有访问过当前的 URL,就会跳过缓存这一步,这时我们就会进入网络操作了。
接着上一小节在浏览器确认了输入的 URL 之前没有访问,浏览器就会生成对应的 HTTP 请求,这时浏览器需要委托操作系统将 HTTP 报文发送到对应的服务端。在发送消息之前,还有一个工作需要做,就是查找服务端的 IP 地址,因为操作系统在发送消息时,必须知道对方的 IP 地址才可以发送。
但是由于 IP 地址由一串数字组成,不够语义化,为方便你记忆,我们将IP 地址映射为域名,于是就有这样一个服务,维护了 IP 和域名的映射关系,它就是非常重要的基础设施——DNS 服务器。DNS 服务器是一个分布式数据库,分布在世界各地。
为提高效率,DNS 是按照一定的结构进行组织的,不同层次之间按照英文句点. 来分割。
在域名中,我们的层级关系是按照从左到右、从低到高排列的,不同层级由低到高维护了一个树形结构,最高一级的根节点为 root 节点,就是我们所谓的根域名服务器,因此 cosmos.com 完整的域名应该是 cosmos.com.,后面的 . 相当于.root。
但是所有域名的顶级域名都一样,因此被省略;再下一级.com 为顶级域名;再下一级的 cosmos 为权威域名。因为这是一个树形结构,所以客户端只要请求到一个 DNS 服务器,就可以一层层递归和迭代查找到所有的 DNS 服务器了。按照由高到低的优先级,DNS 域名解析的过程排列如下。
DNS解析 > 浏览器DNS缓存 > hosts文件 > 本地DNS服务器 > ISP DNS服务器
已经根据 URL 拿到需要请求的唯一地址了,接下来就要委托操作系统将 HTTP 报文发送出去了,这个过程由操作系统中的协议栈负责处理。
TCP/IP 协议栈是现在使用最广泛的网络协议栈,Internet 就是建立在 TCP/IP 协议栈基础上的。除 TCP/IP 协议栈外,我们的操作系统内核可以支持多个不同的协议栈,如后续我们将会用到的 LwIp。
协议栈内部分为几部分,分别承担着不同的作用。
协议栈的上半部分负责和应用层通过套接字(Socket)进行交互,它可以是 TCP 协议或 UDP 协议。应用层会委托协议栈的上部分完成收发数据的工作
协议栈的下半部分则负责把数据发送给到指定方的 IP 协议,由 IP 协议连接下层的网卡驱动。
浏览器通过 DNS 解析拿到 Cosmos 的 IP 地址后, 浏览器取出 URL 的端口(HTTP 默认 80,HTTPS 默认 443)。随即浏览器会委托操作系统协议栈的上半部分创建新的套接字(Socket)向对应的 IP 发起 TCP 连接请求。为了确保通信的可靠性,建立 TCP 首先会先进行三次握手的操作,可结合下面的图示理解。
那么 TCP 的三次握手操作,是如何进行的呢?具体的操作步骤如下。
1.首先浏览器作为客户端会发送一个小的 TCP 分组,这个分组设置了一个特殊的 SYN 标记,用来表示这是一条连接请求。同时设置初始序列号为 x 赋值给 Seq (这次捕获组的数据为: SYN=1, Seq=1)。
2.服务器接受到客户端的 SYN 连接后,会选择服务器初始序号 y。同时向客户端发送含有连接确认(SYN+ACK)、Seq=0(本例中的服务器初始序号)、Ack=1(客户端的序号 x +1)等信息的 TCP 分组。
3.客户端收到了服务器的确定字段后,向服务器发送带有 ACK=1、Seq=1 (x+1)、Ack=1 (服务器 Ack 信息的拷贝)等字段的 TCP 分组给服务器。即使是发送一个 TCP 分组,也是一次网络通信,那么对于 TCP 层来说,这一次通信的数据前面就要包含一个 TCP 包头,向下层表明这是个 TCP 数据包。TCP 包头其实是一个数据结构,我为你准备了一幅图,以便理解。下图就是 TCP 的包头,对于 TCP 头部来说,以下几个字段是很重要的,你要格外关注。TCP包头图示:
首先,源端口号(Source port)和目标端口号(Destinantion port)是不可少的,如果没有这两个端口号,数据就不知道应该发给哪个应用。
其次,你需要注意的是一串有序数字 Sequence number,这个序号保证了 TCP 报文是有序被接受的,解决网络包的乱序问题。
之后的 Acknowledgement number 是确认号,只有对方确认收到,否则会一直重发,这个是防止数据包丢失的。
紧接着还有一些状态位,由于 TCP 是有状态的,是用于维护双方连接的状态,状态发生变更会更新双方的连接状态。后面还有一个,窗口大小 Window Size,用于流量控制。
TCP 层封装好了数据包,会将这个 TCP 数据包向下层发送,而 TCP 层的下层就是 IP 层,下面我们一起去瞧一瞧完成目的地定位的 IP 层。
在IP协议里面需要有源地址IP和目标地址IP:
源地址IP,就是客户端输出的IP地址
目标地址IP,即通过DNS域名解析得到的web服务器ip
因为HTTP是经过TCP传输的,所以IP包头的协议号,要填写06,表示协议为TCP
假设客户端有多个网卡,就会有多个IP地址,那IP头部的源地址应该选择哪个IP呢?
多个网卡需要填写源地址时,需要判断应该是用哪个一块网卡来发送包。
这个时候就需要路由表规则,来判断哪一个网卡作为源地址IP
在Linux中可以 使用route -n 命令查看当前系统的路由表
根据上边的路由表 假设Web服务器的目标地址是192.168.10.200
TCP在维护状态的过程中,都需要委托 IP 层将数据封装,发送和处理网络数据包进入网络层。IP 协议是 TCP/IP 协议栈的核心,IP 协议中规定了在 Internet 上进行通信时应遵循的规则,包括 IP 数据包应如何构成、数据包的路由等,而 IP 层实现了网络上的点对点通信。
首先来看看 IP 层处理上层网络数据包的过程,网络数据包(无论输入数据包还是输出数据包)进入网络层后,IP 层协议的函数都要对网络数据包做后面这 5 步操作。
1、数据包校验和检验
2、防火墙对数据包过滤
3、IP 选项处理
4、数据分片和重组
5、接收、发送和前送
为了完成上述操作,IP 层被设计成三个部分,分别是IP 寻址、路由和分包组包。
其实在网络通信的过程中,每个设备都必须拥有自己的 IP 地址才可以完成通信,我们的** IP 地址是以四组八位的组合进行约定,每组以. 号隔开,再转化为十进制的方式。这里要注意,IP 地址并不是以主机数目进行配置的,而是根据网卡数**来进行。
有了 IP 地址,就可以通信了,但 IP 层仍然是一个软件实现的功能逻辑层,那它如何完成通信呢,答案是不能直接完成通信,它只是把 IP 地址及相关信息组装成一个 IP 头,把这个 IP 头放在网络数据的前面,形成了 IP 包,最后把这个 IP 包发送给 IP 层的下一层组件就行了,IP 头的格式如下所示。IP头部:
有了 IP 头的网络数据,就有了发送目的地的信息,那么该如何才能将报文发送到目的地呢?这就要请 MAC 出场了,这个 MAC 层,就是 IP 层的下一层组件
两点传输 —— MAC
生成了IP头部之后,接下来网络包需要在IP头部加上MAC头部
MAC包头里面有发送方MAC地址 接收方MAC地址 用于两点之间的传输
MAC包头的协议类型只有 IP协议(0800) ARP协议(0806)
发送方的MAC地址可以直接读出来
接收方的MAC地址 需要通过ARP协议帮助我们路由器的MAC地址
ARP协议会在以太网中以广播的形式 ,对以太网所有设备喊出,这个IP地址是谁的,请把你的MAC地址告诉我
对方回答之后,如果对方和自己处于同一个子网中,就可以将获得的MAC地址写入头部
之后会把查询结果放到一块ARP缓存的内存
所以说:
先查询ARP缓存,如果其中已经保存了对方的MAC地址,就不需要发送ARP查询,可以直接使用ARP缓存中的地址
而当ARP缓存中不存在对方的MAC地址时,则发送了ARP广播查询
linux中可以通过arp -a
之后获得了MAC头部的数据包就可以开始走啦
发送方的 MAC 头比较容易获取,读取当前设备网卡的 MAC 地址就可以获取,而接收方的 MAC 头则需要通过 ARP 协议在网络中携带 IP 地址,在一个网络中发送广播信息,这样就能获取这个网络中的 IP 地址对应的 MAC 地址,然后就能给我们的 IP 包加上 MAC 头了,最后这个加上 MAC 头的 IP 包,成为一个 MAC 数据包,就可以准备发送出去了
下面就进入最后的阶段,数据的发送,即网络层中的最低层——物理层
现在拿到了经过层层处理过的数据包,数据包只是一串二进制数据,网络上的数据传送,是依赖电信号的,所以我们现在需要将数据包转化为电信号,才能在物理的网线上面传输。
那么数据包是如何被转换电信号的呢数据包通过网络协议栈的层层处理,最终得到了 MAC 数据包,这个 MAC 数据包会交给网卡驱动程序,而网卡驱动程序会将 MAC 数据包写入网卡的缓冲区(网卡上的内存).然后,网卡会在 MAC 数据包的起止位置加入起止帧和校验序列,最后网卡会将加入起止帧和校验序列的 MAC 数据包转化为电信号,发送出去。
互相扒皮——服务器和客户端
数据包到了之后,看MAC是否符合,符合就收起来,
扒开IP的头,发现IP地址符合,根据IP头中的协议项,知道上层是TCP
扒开TCP的头,里面有序列号,需要看一看这个是不是我想要的,如果是就放入缓存中返回一个ACK,如果不是就丢弃。TCP头部还有端口号,HTTP的服务器正在监听这个端口号。
于是服务器就知道HTTP进程要这个包,于是就把这个包发给HTTP进程。
服务器的HTTP进程看到,原来这个请求是要访问一个页面,于是就把网页封装在HTTP相应报文里。
之后相应报文也要穿上TCP IP MAC头部,不过这次是源地址时服务器的IP地址,目的地址是客户端的IP地址。
现在,数据终于通过网卡离开了计算机,进入到局域网,通过局域网中的设备,集线器、交换机和路由器等,数据会进入到互联网,最终到达目标服务器。
接着,服务器就会先取下数据包的 MAC 头部,查看是否匹配自己 MAC 地址。然后继续取下数据包的 IP 头,数据包中的目标 IP 地址和自己的 IP 地址匹配,再根据 IP 头中协议项,知道自己上层是 TCP 协议。
之后,还要继续取下数据包 TCP 的头。完成一系列的顺序校验和状态变更后,TCP 头部里面还有端口号,此时我们的 HTTP 的 server 正在监听这个端口号,就把数据包再发给对应的 HTTP 进程。
HTTP 进程从服务器中拿到对应的资源(HTML 文件),再交给操作系统对数据进行处理。然后再重复上面的过程,层层携带 TCP、IP、MAC 头部。接下来数据从网卡出去,到达客户端,再重复刚才的过程拿到相应数据。客户端拿到对应的 HTML 资源,浏览器就可以开始解析渲染了,这步操作完成后,用户最终就能通过浏览器看到相应的页面。
画了两幅图,来描述上述过程,第一幅是网络协议各层之间封装与拆封数据的过程,如下所示TCP_IP协议栈:
下面的第二幅图,是描述客户端与服务器之间用网络协议连接通信的过程,如下所示
此时客户端和服务端之间通过 TCP 协议维护了一个连接状态,如果客户端需要关闭网络,那么会进行四次挥手,两边的网络传输过程至此完成。
如果是代理商,我们有自己的产品图片和详情页,需要先将这些制作成数据包,再发送给下面的代理,这样代理就可以上传我们的产品了。那么,要怎么制作数据包呢?
一、数据包怎么制作?
第1步:选择抓取商品的使用方式
有3种抓取商品方式,在这里以B方式做详细介绍,其他方式请查看相关文字提示
输入要抓取的宝贝地址或店铺地址到B抓取方式中,再点击“抓取该地址的商品”按钮,如输入的是某宝贝地址,如下图所示:
第2步:选择抓取商品
查看是否成功抓取该商品
如显示抓取到的宝贝,则成功抓取,然后点击“下一步”如下图所示:
第3步:选择处理方式
第4步:转换商品类目
详细查看淘宝商品类目匹配的是否正确,如有问题可以手动去编辑或批量去编辑类目,然后点击“下一步”如下图所示:
第5步:转换商品详情
查看商品详情是否转换正确,如出现属性没有转化正确,可以根据提示批量编辑宝贝的属性,然后点击“下一步”如下图所示:
注:此步骤有2个功能需详细介绍,请点击相应的蓝色字进入教程。
第6步:导出数据包
请选择导出数据包位置、导出文件类型及商品描述图片处理方式,再点击“导出”按钮
成功导出数据包
备注:导出数据包以后,用商机助理把淘宝数据包中的商品上传到店铺。
二、怎么解压?
直接用解压工具,例如RAR、好压吖这些解压出来,格式是excel,然后在淘宝助理中导入数据包就好了!
制作数据包其实并不难,只要按照上述方法来操作就行了。数据包制作好之后,就可以将其分享给代理,或者自己想要分享的人,或者放到自己其他的店铺也是可以的。
更多详细资料在这里↓
热门手游排行榜