数据包头格式
- 格式:docx
- 大小:944.33 KB
- 文档页数:21
IP包头格式*版本(version)——标识了数据包的IP版本号。
这个4位字段的值设置为二进制的0100表示IP版本4(IPv4),设置为0110表示IP版本6(IPv6)。
*报头长度(header length)——字段长度为4位,正如字段名所示,它表示32位字长的IP 报头长度。
设计报头长度字段是因为数据包的可选项字段的大小会发生变化。
IP报头最小长度为20个八位组,最大可以扩展到60个八位组——通过这个字段也可以描述32位字的最大长度。
*服务类型(TOS,type of service)——字段长度为8位,它用来指定特殊的数据包处理方式。
服务类型字段实际上被划分为两个子字段:优先级和ToS。
优先级用来设置数据包的优先级,这就像邮寄包裹一样,可以是平信、隔日送到或两日内送到。
ToS允许按照吞吐量、时延、可靠性和费用方式选择传输服务。
虽然ToS字段通常不用(所有位均被设置为0),但是开放式最短路径优先(OSPF)协议的早期规范中还是称为ToS路由选择。
优先权位偶尔在服务质量(QoS)应用中使用。
更详细的信息可以参见RFC1340和RFC1349。
*总长度(total length)——数据包总长度字段的长度为16位,以八位组为单位计,其中包括IP报头。
接收者用IP数据包总长度减去IP报头长度,就可以确定数据包数据有效负载的大小。
16位长的二进制数用十进制表示最大可以为65535,所以IP数据包的最大长度是65535。
*标识符(identifier)——字段长度为16位,通常与标记字段和分片偏移字段一起用于数据包的分段。
如果数据包原始长度超过数据包所要经过的数据链路的最大传输单元(MTU),那么必须将数据包分段为更小的数据包。
例如,一个大小为5000字节的数据包在穿过网络时,如果遇到一条MTU为1500字节的数据链路,即数据帧最多容纳大小为1500字节的数据包。
路由器需要在数据成帧之前将数据包分段成多个数据包,其中每个数据包长度不得超过1500字节;然后路由器在每片数据包的标识字段上打上相同的标记,以便接收设备可以识别出属于一个数据包的分段。
srt协议格式SRT协议格式SRT(Secure Reliable Transport)是一种用于视频传输的开放源代码协议。
它提供了安全可靠的视频传输解决方案,适用于各种网络环境和应用场景。
本文将介绍SRT协议的格式和特点,并探讨其在视频传输领域的应用。
一、SRT协议概述SRT协议是一种基于UDP协议的可靠传输协议。
它通过添加额外的错误校验、重传机制和加密保护,增强了视频传输的稳定性和安全性。
SRT协议使用了一种称为“SRT包”的数据单元进行传输,每个SRT包包含了数据负载和相关的控制信息。
二、SRT协议格式1. SRT包头部:SRT包头部包含了一系列的控制信息,用于指示发送端和接收端的状态。
其中包括SRT包的序列号、时间戳、数据长度等信息。
2. SRT包数据:SRT包数据部分是实际的视频数据,它可以是视频帧、音频帧或其他媒体数据。
SRT协议并不限制数据的格式,可以适应各种编码方式和媒体类型。
3. SRT包尾部:SRT包尾部包含了一系列的错误校验码和加密信息,用于保证数据的完整性和安全性。
SRT协议使用了强大的FEC(Forward Error Correction)纠错码和AES加密算法,有效地防止了数据的丢失和篡改。
三、SRT协议特点1. 高可靠性:SRT协议通过重传机制和FEC纠错码,可以在不可靠的网络环境下保证视频数据的可靠传输。
即使在网络丢包或延迟较大的情况下,SRT协议仍可以提供稳定的视频传输服务。
2. 低延迟:SRT协议通过优化传输算法和数据压缩技术,可以有效地降低视频传输的延迟。
这对于实时视频应用非常重要,如视频会议、直播等。
3. 安全性保障:SRT协议支持数据加密和身份验证机制,可以保护视频数据的隐私和安全。
通过使用AES加密算法和数字证书,SRT 协议可以防止数据的非法访问和篡改。
四、SRT协议应用1. 在直播领域,SRT协议可以提供高质量、可靠的视频传输服务。
无论是体育赛事直播、新闻报道还是在线教育,SRT协议都可以满足高清视频传输的要求。
PCAP文件格式每个.pcap文件的文件头Pcap Header:24B每个.pcap文件中的数据包头 Packet Header:16B每个.pcap文件中的数据报 Packet Data:14B以太头+TCP/IP数据具体如下:1.pcap文件头部(pcap header)sturct pcap_file_header{DWORD magic;WORD version_major;WORD version_minor;DWORD thiszone;DWORD sigfigs;DWORD snaplen;DWORD linktype;}说明:1、标识位magic:32位的,这个标识位的值是16进制的 0xa1b2c3d4。
32-bit magic number , The magic number has the value hex a1b2c3d4.2、主版本号version_major:16位,默认值为0x2。
返回写入被打开文件所使用的pcap函数的主版本号。
16-bit major version number, The major version number should have the value 2.3、副版本号version_minor:16位,默认值为0x04。
16-bit minor version number, The minor version number should have the value 4.4、区域时间thiszone:32位,实际上该值并未使用,因此可以将该位设置为0。
32-bit time zone offset field that actually not used, so you can (and probably should) just make it 0;5、精确时间戳sigfigs:32位,实际上该值并未使用,因此可以将该值设置为0。
IP数据包格式IP数据包格式TCP/IP协议定义了一个在因特网上传输的包,称为IP数据报(IP Datagram)。
这是一个与硬件无关的虚拟包, 由首部和数据两部分组成,其格式如图所示。
首部的前一部分是固定长度,共20字节,是所有IP 数据报必须具有的。
在首部的固定部分的后面是一些可选字段,其长度是可变的。
首部中的源地址和目的地址都是IP协议地址1、IP数据报首部的固定部分中的各字段(1)版本占4位,指IP协议的版本。
通信双方使用的IP协议版本必须一致。
目前广泛使用的IP协议版本号为4(即IPv4)。
(2)首部长度占4位,可表示的最大十进制数值是15。
请注意,这个字段所表示数的单位是32位字长(1个32位字长是4字节),因此,当IP的首部长度为1111时(即十进制的15),首部长度就达到60字节。
当IP分组的首部长度不是4字节的整数倍时,必须利用最后的填充字段加以填充。
因此数据部分永远在4字节的整数倍开始,这样在实现IP协议时较为方便。
首部长度限制为60 字节的缺点是有时可能不够用。
但这样做是希望用户尽量减少开销。
最常用的首部长度就是20字节(即首部长度为0101),这时不使用任何选项。
(#我们一般看到的版本和首部长度两个字段是十六进制45,就是版本号version=4,headlength=5,也就是首部长度是60个字节)(3)区分服务占8位,用来获得更好的服务。
这个字段在旧标准中叫做服务类型,但实际上一直没有被使用过。
1998年IETF把这个字段改名为区分服务DS(Differentiated Services)。
只有在使用区分服务时,这个字段才起作用。
(4)总长度总长度指首部和数据之和的长度,单位为字节。
总长度字段为16位,因此数据报的最大长度为216-1=65535字节。
#可以看这个以太网frame总长为336字节,而IP数据包Total length=322,336-322=14正好是Ethernet包头的长度,所以就可以看出这IP数据包总长度一值就是除去Ethernet头的剩余长度,也就是IP包头加数据的长度。
IP包头(Packet Header)的格式版本(version):长度4比特,表示数据包的IP版本号,0x0100表示IP版本4,0x0110表示IP版本6报头长度(header lenght):长度4比特,表示IP包头长度,最小长度为20个字节,最大可以扩展到60个字节。
服务类型(Type of service):长度8比特,表示特殊数据包的处理方式。
服务类型字段实际上被划分为两个子字段:优先级和ToS。
总长度(Total Length):长度16比特,表示IP包的长度(包头+数据),所以IP 数据包的最大长度是65535(2^16)。
标识符(Identifier):长度16比特,通常与标记字段和分片偏移字段一起用于数据包的分段。
如果数据包原始长度超过数据包所要经过的数据链路的最大传输单元(MTU),那么必须将数据包分段为更小的数据包。
例如,一个大小为5000字节的数据包在穿过网络时,如果遇到一条MTU为1500字节的数据链路,即数据帧最多容纳大小为1500字节的数据包。
路由器需要在数据成帧之前将数据包分段成多个数据包,其中每个数据包长度不得超过1500字节;然后路由器在每片数据包的标识字段上打上相同的标记,以便接收设备可以识别出属于一个数据包的分段。
标记字段(Flag):长度3比特,其中第1位不使用,第2位是不分段(DF)位。
当DF位被设置为1时,表示路由器不能对数据包进行分段处理。
如果数据包由于不能被分段而未能被转发,那么路由器将丢弃该数据包并向源点发送错误消息。
第3位表示还有更多分段(MF)位,当路由器对数据包进行分段时,MF位为1,说明后面还有分段;MF位为0,说明这是最后一个分段。
分段偏移(Fragment Offset):长度13比特,表示该IP包在该组分片包中位置,接收端靠此来组装还原IP包。
请注意,如果一个分片在传输中丢失,那么必须在网络中同一点对整个数据包重新分片重新发送。
TCP包头格式详解⼀般来说,⽹络编程我们只需要调⽤⼀些封装好的函数或者组件就能完成⼤部分的⼯作,但是⼀些特殊的情况下,就需要深⼊的理解⽹络数据包的结构,以及协议分析。
如:⽹络监控,故障排查等……IP包是不安全的,但是它是互联⽹的基础,在各⽅⾯都有⼴泛的应⽤。
由IP协议衍⽣的协议族有10数种(据我所知),以后还会出现更多的基于IP的协议…先从实际出发吧!⼀般我们在谈上⽹速度的时候,专业上⽤带宽来描述,其实⽆论说⽹速或者带宽都是不准确的,呵呵。
⽐如:1兆,512K……有些在学校的学⽣,也许会有疑问,明明我的业务是1M,为什么下载速度到100K就飙不上去了?512K的为什么50多K就封顶了?…这⾥所说的1M是指1Mbps = 1 Million Bits Per Second,也就是1M⽐特每秒,即⼀秒钟传输1048576个⼆进制位。
我们知道⼀个字节是8个⼆进制位。
好,⼜来问题了。
即便这样⼦,1M=1048756÷8=131072÷1024=128K。
那也应该有128K啊,为什么下载速度还是很少到120K,110K都谢天谢地了。
看完本⽂,你的帐就对了……IP数据包结构:如图,⼀个刻度表⽰1个⼆进制位(⽐特)。
1-1.版本4位,表⽰版本号,⽬前最⼴泛的是4=B1000,即常说的IPv4;相信IPv6以后会⼴泛应⽤,它能给世界上每个纽扣都分配⼀个IP地址。
1-2.头长4位,数据包头部长度。
它表⽰数据包头部包括多少个32位长整型,也就是多少个4字节的数据。
⽆选项则为5(红⾊部分)。
1-3.服务类型,包括8个⼆进制位,每个位的意义如下:过程字段:3位,设置了数据包的重要性,取值越⼤数据越重要,取值范围为:0(正常)~ 7(⽹络控制)延迟字段:1位,取值:0(正常)、1(期特低的延迟)流量字段:1位,取值:0(正常)、1(期特⾼的流量)可靠性字段:1位,取值:0(正常)、1(期特⾼的可靠性)成本字段:1位,取值:0(正常)、1(期特最⼩成本)保留字段:1位,未使⽤1-4.包裹总长16位,当前数据包的总长度,单位是字节。
hc05协议协议名称:HC05协议一、介绍HC05协议是一种蓝牙串口透传模块的通信协议,用于实现蓝牙设备与其他设备之间的无线数据传输。
该协议定义了数据格式、命令集、通信方式等规范,以确保设备之间的互操作性和数据传输的稳定性。
二、通信接口HC05协议使用串口通信接口进行数据传输,支持多种波特率设置。
通信接口的定义如下:1. 通信方式:全双工2. 数据位:8位3. 停止位:1位4. 校验位:无三、数据格式HC05协议定义了数据的格式,以确保数据的正确解析和传输。
数据格式如下:1. 数据包头:每个数据包以固定的包头标识开头,用于识别数据包的起始位置。
2. 数据长度:数据包中的有效数据长度,以字节为单位。
3. 数据内容:实际传输的数据内容。
4. 校验和:用于校验数据包的完整性。
四、命令集HC05协议定义了一系列命令,用于控制蓝牙模块的工作状态和数据传输。
以下是常用命令的示例:1. AT指令:用于设置蓝牙模块的配置参数,如波特率、设备名称等。
2. AT+ROLE:设置蓝牙模块的角色,可以是主设备(Master)或从设备(Slave)。
3. AT+CMODE:设置蓝牙模块的连接模式,可以是公共模式(Public)或私有模式(Private)。
4. AT+INQM:设置蓝牙模块的查询模式,可以是标准查询模式(Standard)或增强查询模式(Enhanced)。
5. AT+RNAME:查询蓝牙模块与其他设备的名称。
五、通信流程HC05协议规定了蓝牙设备之间的通信流程,以确保数据的可靠传输。
通信流程如下:1. 初始化:蓝牙模块上电后,进行初始化设置,包括设置波特率、角色等参数。
2. 建立连接:蓝牙设备通过广播或扫描的方式发现其他设备,并建立连接。
3. 数据传输:建立连接后,蓝牙设备可以通过串口通信接口发送和接收数据。
4. 断开连接:通信结束后,蓝牙设备可以主动断开连接或等待对方断开连接。
六、错误处理在数据传输过程中,可能会出现错误或异常情况。
TCP包头格式TCP数据被封装在一个IP数据包中:|←—————————————————IP数据包———————————————→|TCP包头数据格式。
如果不计可选项字段,它通常是20个字节。
源端口和目的端口:每个TCP段都包含源端和目的端的端口号,用于寻找发起端和拉收端应用进程。
这两个值加上IP首部中的源IP地址和目的IP地址唯一确定一个TCP连接。
有时,一个IP地址和一个端口号也称为一个套接字(socket)。
这个术语出现在最早的TCP规范(RFC793)中。
套接字对(socket pair)(包含客户I P地址、客户端口号、服务器I P地址和服务器端口号的四元组)可唯一确定互联网络中每个T C P连接的双方。
序列号:序列号用来标识从T C P发起端向T C P接收端发送的数据字节流,它表示在这个报文段中的第一个数据字节。
如果将字节流看作在两个应用程序间的单向流动,则T C P用序列号对每个字节进行计数。
序列号是32 bit的无符号数,序号到达23 2-1后又从0开始。
确认序列号:当建立一个新的连接时,S Y N标志变1。
序列号字段包含由这个主机选择的该连接的初始序号ISN(Initial Sequence Number)。
该主机要发送数据的第一个字节序号为这个ISN加1,因为SYN标志消耗了一个序号(FIN标志也要占用一个序号)。
既然每个传输的字节都被计数,确认序号包含发送确认的一端所期望收到的下一个序号。
因此,确认序号应当是上次已成功收到数据字节序号加1。
只有A C K标志为1时确认序号字段才有效。
发送ACK无需任何代价,因为32 bit的确认序号字段和ACK标志一样,总是TCP首部的一部分。
因此,我们看到一旦一个连接建立起来,这个字段总是被设置,ACK标志也总是被设置为1。
头部长度:头部长度给出首部中32 bit字的数目。
需要这个值是因为任选字段的长度是可变的。
这个字段占4 bit,因此TCP最多有60字节的首部。
一、TCP报头TCP报文段的报头有10个必需的字段和1个可选字段。
报头至少为20字节。
报头后面的数据是可选项。
1、源端口号(16位)标识发送报文的计算机端口或进程。
一个TCP报文段必须包括源端口号,使目的主机知道应该向何处发送确认报文。
2、目的端口号(16位)标识接收报文的目的主机的端口或进程。
3、序列号(32位)用于标识每个报文段,使目的主机可确认已收到指定报文段中的数据。
当源主机用于多个报文段发送一个报文时,即使这些报文到达目的主机的顺序不一样,序列号也可以使目的主机按顺序排列它们。
在建立连接时发送的第一个报文段中,双方都提供一个初始序列号。
TCP 标准推荐使用以4ms间隔递增1的计数器值作为这个初始序列号的值。
使用计数器可以防止连接关闭再重新连接时出现相同的序列号。
对于那些包含数据的报文段,报文段中第一个数据字节的数量就是初始序列号,其后数据字节按顺序编号。
如果源主机使用同样的连接发送另一个报文段,那么这个报文段的序列号等于前一个报文段的序列号与前一个报文段中数据字节的数量之和。
例如,假设源主机发送3个报文段,每个报文段有100字节的数据,且第一个报文段的序列号是1000,那么第二个报文段的序列号就是1100(1000+100),第三个报文段的序列号就是1200(1100+100)。
如果序列号增大至最大值将复位为0。
4、确认号(32位)目的主机返回确认号,使源主机知道某个或几个报文段已被接收。
如果ACK控制位被设置为1,则该字段有效。
确认号等于顺序接收到的最后一个报文段的序号加1,这也是目的主机希望下次接收的报文段的序号值。
返回确认号后,计算机认为已接收到小于该确认号的所有数据。
例如,序列号等于前一个报文段的序列号与前一个报文段中数据字节的数量之和。
例如,假设源主机发送3个报文段,每个报文段有100字节的数据,且第一个报文段的序列号是1000,那么接收到第一个报文段后,目的主机返回含确认号1100的报头。
接收到第二个报文段(其序号为1100)后,目的主机返回确认号1200。
接收到第三个报文段后,目的主机返回确认号1300。
目的主机不一定在每次接收到报文段后都返回确认号。
在上面的例子中,目的主机可能等到所有3个报文段都收到后,再返回一个含确认号1300的报文段,表示已接收到全部1200字节的数据。
但是如果目的主机再发回确认号之前等待时间过长,源主机会认为数据没有到达目的主机,并自动重发。
上面的例子中,如果目的主机接收到了报文段号为1000的第一个报文段以及报文段号为1200的最后一个报文段,则可返回确认号1100,但是再返回确认号1300之前,应该等待报文段号为1100的中间报文段。
5、报文长度(4位)由于TCP报头的长度随TCP选项字段内容的不同而变化,因此报头中包含一个指定报头字段的字段。
该字段以32比特为单位,所以报头长度一定是32比特的整数倍,有时需要在报头末尾补0。
如果报头没有TCP选项字段,则报头长度值为5,表示报头一个有160比特,即20字节。
6、保留位(6位)全部为0。
7、控制位(6位)URG:报文段紧急。
ACK:确认号有效。
PSH:建议计算机立即将数据交给应用程序。
RST:复位连接。
SYN:进程同步。
在握手完成后SYN为1,表示TCP建立已连接。
此后的所有报文段中,SYN都被置0。
FIN:源主机不再有待发送的数据。
如果源主机数据发送完毕,将把该连接下要发送的最后一个报文段的报头中的FIN位置1,或将该报文段后面发送的报头中该位置1。
8、窗口(16位)接收计算机可接收的新数据字节的数量,根据接收缓冲区可用资源的大小,其值随计算机所发送的每个报文段而变化。
源主机可以利用接收到的窗口值决定下一个报文段的大小。
9、校验和(16位)源主机和目的主机根据TCP报文段以及伪报头的内容计算校验和。
在伪报头中存放着来自IP报头以及TCP报文段长度信息。
与UDP一样,伪报头并不在网络中传输,并且在校验和中包含伪报头的目的是为了防止目的主机错误地接收存在路由的错误数据报。
10、紧急指针(16位)如果URG为1,则紧急指针标志着紧急数据的结束。
其值是紧急数据最后1字节的序号,表示报文段序号的偏移量。
例如,如果报文段的序号是1000,前8个字节都是紧急数据,那么紧急指针就是8。
紧急指针一般用途是使用户可中止进程。
11、TCP选项(0或更大)完整的TCP报头必须是32比特的整数倍,为了达到这一要求,常在TCP 选项字段的末尾补零。
12、数据部分报头后面是可选的报文段数据部分。
IP协议标准要求株距能接收最长达576字节的数据报。
无其他选项的IP报头是20字节,无其他选项的TCP报头也是20字节,所以IP选项和TCP选项且含有多达536字节数据的TCP报文段无须分片就可达到目的主机。
二、UDP报头由4个域组成,其中每个域各占用2个字节,具体为:源端口号目标端口号数据报长度校验值UDP协议使用端口号为不同的应用保留其各自的数据传输通道数据报的长度是指包括报头和数据部分在内的总的字节数。
因为报头的长度是固定的,所以该域主要被用来计算可变长度的数据部分(又称为数据负载)UDP协议使用报头中的校验值来保证数据的安全。
校验值首先在数据发送方通过特殊的算法计算得出,在传递到接收方之后,还需要再重新计算。
且udp必须要有校验值i贴吧新浪微博腾讯微博QQ空间人人网豆瓣MS N9回答时间:2009-4-9 19:25 |我来评论\FTP两种工作模式:主动模式(Active FTP)和被动模式(Passive FTP)FTP是仅基于TCP的服务,不支持UDP。
与众不同的是FTP使用2个端口,一个数据端口和一个命令端口(也可叫做控制端口)。
通常来说这两个端口是 21(命令端口)和20(数据端口)。
但FTP 工作方式的不同,数据端口并不总是20。
这就是主动与被动FTP的最大不同之处。
(一)主动FTP主动方式的FTP是这样的:客户端从一个任意的非特权端口N(N>1024)连接到FTP服务器的命令端口,也就是21端口。
然后客户端开始监听端口 N+1,并发送FTP命令“port N+1”到FTP服务器。
接着服务器会从它自己的数据端口(20)连接到客户端指定的数据端口(N+1)。
针对FTP服务器前面的防火墙来说,必须允许以下通讯才能支持主动方式FTP:1. 任何大于1024的端口到FTP服务器的21端口。
(客户端初始化的连接)2. FTP服务器的21端口到大于1024的端口。
(服务器响应客户端的控制端口)3. FTP服务器的20端口到大于1024的端口。
(服务器端初始化数据连接到客户端的数据端口)4. 大于1024端口到FTP服务器的20端口(客户端发送ACK响应到服务器的数据端口)(二)被动FTP为了解决服务器发起到客户的连接的问题,人们开发了一种不同的FTP连接方式。
这就是所谓的被动方式,或者叫做PASV,当客户端通知服务器它处于被动模式时才启用。
在被动方式FTP中,命令连接和数据连接都由客户端发起,这样就可以解决从服务器到客户端的数据端口的入方向连接被防火墙过滤掉的问题。
当开启一个 FTP连接时,客户端打开两个任意的非特权本地端口(N > 1024和N+1)。
第一个端口连接服务器的21端口,但与主动方式的FTP不同,客户端不会提交PORT命令并允许服务器来回连它的数据端口,而是提交 PASV命令。
这样做的结果是服务器会开启一个任意的非特权端口(P > 1024),并发送PORT P 命令给客户端。
然后客户端发起从本地端口N+1到服务器的端口P的连接用来传送数据。
对于服务器端的防火墙来说,必须允许下面的通讯才能支持被动方式的FTP:1. 从任何大于1024的端口到服务器的21端口(客户端初始化的连接)2. 服务器的21端口到任何大于1024的端口(服务器响应到客户端的控制端口的连接)3. 从任何大于1024端口到服务器的大于1024端口(客户端初始化数据连接到服务器指定的任意端口)4. 服务器的大于1024端口到远程的大于1024的端口(服务器发送ACK响应和数据到客户端的数据端口)以上关于主动和被动FTP的解释,可以简单概括为以下两点:1、主动FTP:命令连接:客户端 >1024端口 -> 服务器 21端口数据连接:客户端 >1024端口 1024端口 -> 服务器 21端口数据连接:客户端 >1024端口 -> 服务器 >1024端口(三)主动与被动FTP优缺点:主动FTP对FTP服务器的管理有利,但对客户端的管理不利。
因为FTP服务器企图与客户端的高位随机端口建立连接,而这个端口很有可能被客户端的防火墙阻塞掉。
被动FTP对FTP客户端的管理有利,但对服务器端的管理不利。
因为客户端要与服务器端建立两个连接,其中一个连到一个高位随机端口,而这个端口很有可能被服务器端的防火墙阻塞掉。
Http访问过程原理2010-06-27 15:55:44标签:访问Http原理原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处、作者信息和本声明。
否则将追究法律责任。
/509018/339906很简单的一个东西,咱们慢慢来分析一下,首先,看一下拓扑图:假如主机A要访问网站:www.baidu.co m时,主机A会立即封装一个HTTP的报文,按照TCP/IP的模型,应该是是:二层报文+IP报文+TCP报文+HTTP报文,也就是:数据链接路+网络层+传输层+应用层…但是主机A在封装的过程中,发现是个域名,主机A不知道的IP地址,于是他需要先生成一个DNS的解析报文,也就是:二层报文+IP报文+TCP报文+DNS报文....可是主机A在封装的过程中,发现如果要解释DNS,必须得与DNS联系,而DNS的IP是:202.96.134.133,他与DNS联系时又不知道它的MAC地址,而且很明显与自己不在同一网段,于是得请求网关转发DNS,周时主机A也不知道网关的MAC地址时,就需要向外广播一条ARP消息,并得到了路由器的MAC地址….然后请求网关转发DNS报文给202.96.134.133….所以正个过程也就是这样:先ARP得到网关MAC,再请求网关转发DNS报文,得到 ip是: 121.14.89.10再与www.baidu.co m建立TCP/IP连接最后再开始传输HTTP报文用wiershark抓包是,大致过程就是这样(因为开了360,所以里面有两个360的广告新闻DNS,忽略它):既然咱们能抓到包,那么我们就一个一个来分析报文的过程:第一步:得到arp网关的M AC报文是这样的:ARP的报文格式:按报文内容填充就是这样的:一个请求,一个响应:请求:响应:第二步:再请求网关转发DN S报文,得到 ip是: 121.14.89.10,(在这里,实际上用了UPD的连接,因不是本文重点,且UPD报文格式简单,在这里就不详细说了。