[关闭]
@SovietPower 2021-11-23T19:40:07.000000Z 字数 3351 阅读 1604

计算机网络 实验1 Protocol Layer

CN



https://zybuluo.com/SovietPower/note/1884737
参考:
https://zhuanlan.zhihu.com/p/82498482

todo:https://zhuanlan.zhihu.com/p/272082726


安装

安装wiresharkwget(这个地方的版本比较老了)。
将wget的bin文件夹添加到环境变量。

使用问题

右键点击一个数据包,选择跟踪流可过滤其它网站的包。

cannot verify ...'s certificate
添加参数--no-check-certificate忽略证书检查。

实验内容

1.绘制数据包结构

wireshark中输入过滤器tcp port http,双击当前网络(比如WLAN)开始。
清空一下wireshark输出(停止再重新开始,或Ctrl R),然后使用命令wget http://www.baidu.com --no-check-certificate,提示OK后停止wireshark,查看其中的内容。

选择每一部分,可查看每部分的提示信息:

  1. Ethernet (eth), 14 byte(s)
  2. Internet Protocol Version 4 (ip), 20 byte(s)
  3. Transmission Control Protocol (tcp), 20 byte(s)
  4. Hypertext Transfer Protocal (http), 101 byte(s)

可知该包包含了 Ethernet, IPv4, TCP, HTTP 四部分,结构图为:

EthernetIPv4TCPHTTP
14B20B20B101B
Ethernet头部
Ethernet载荷
IPv4头部
IPv4载荷

2.分析协议开销

前三个包为TCP的三次握手,第四个包为HTTP数据包。
对于1.中的数据包,开销为,有用数据为,下载协议的开销约为

开销是必要的。
Ethernet头部包含:

  • 48位目标地址:48位MAC地址。
  • 48位源地址:48位MAC地址。
  • 16位上层协议:网络层使用的协议。

IP头部包含:

  • 4位版本号
  • 4位头部长度
  • 8位服务类型(Type Of Service, TOS):表示服务质量,分为6位差分服务代码点DSCP,用于质量控制,和2位显式拥塞通告ECN,用于报告网络拥堵情况。
  • 16位IP数据报总长度
  • 16位标识字段(identification):唯一标识主机发送的每一个数据报。
  • 3位标志位flags:第一位为保留位,为0;第二位为“禁止分片”,Don’t Fragment, DF,若为1则数据不分片;第三位为“更多分片”,More Fragment, MF。
  • 8位生存时间(Time To Live, TTL):表示包可以中转多少个路由器。每经过一个路由器,TTL就减少1,直到变为0后丢弃该包。TTL可防止数据报陷入路由循环。
  • 8位协议:标识IP头部属于哪个协议。
  • 16位IP头部检验和
  • 32位发送端口IP地址
  • 32位目的端口IP地址
  • 32位可选的选项(可以没有)

TCP头部包含:

  • 16位源端口号
  • 16位目的端口号
  • 32位序列号
  • 32位确认号
  • 4位头部长度
  • 12位标志位:3位保留位(为0),其余9位分别为:Nonce,Congestion Window Reduced (CWR),ECN-Echo,Urgent (URG),Acknowledgement (ACK),Push (PSH),Reset (RST),SYN,FIN。
  • 16位窗口大小
  • 16位TCP检验和
  • 选项(可选)
  • 数据(可选)

以上是下载协议的开销。

3.分析解复用键

解复用:找到正确的上一层协议来处理到达的包。

Ethernet头部中,起始地址0x000B处,为16位上层协议,表示网络层使用的协议。
如下例的Type,使用IPv4协议,对应值为0x0800

  1. Ethernet II, Src: LiteonTe_f9:c1:65 (50:5b:c2:f9:c1:65), Dst: Cisco_c6:bd:40 (e8:65:49:c6:bd:40)
  2. Destination: Cisco_c6:bd:40 (e8:65:49:c6:bd:40)
  3. Source: LiteonTe_f9:c1:65 (50:5b:c2:f9:c1:65)
  4. Type: IPv4 (0x0800)

IP头部中,起始地址0x0008处,有8位生存时间、8位协议、16位检验和,8位协议标识了IP头部属于哪个协议。
如下例的Protocol,使用TCP协议,对应值为6

  1. Internet Protocol Version 4, Src: 172.30.242.93, Dst: 182.61.200.7
  2. 0100 .... = Version: 4
  3. .... 0101 = Header Length: 20 bytes (5)
  4. Differentiated Services Field: 0x00 (DSCP: CS0, ECN: Not-ECT)
  5. Total Length: 141
  6. Identification: 0x4f48 (20296)
  7. Flags: 0x40, Don't fragment
  8. 0... .... = Reserved bit: Not set
  9. .1.. .... = Don't fragment: Set
  10. ..0. .... = More fragments: Not set
  11. Fragment Offset: 0
  12. Time to Live: 128
  13. Protocol: TCP (6)
  14. Header Checksum: 0x8e61 [validation disabled]
  15. [Header checksum status: Unverified]
  16. Source Address: 172.30.242.93
  17. Destination Address: 182.61.200.7

TCP三次握手连接建立过程

第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手,客户端与服务器开始传送数据。


可见,这里截获了三个握手数据包,第四个是HTTP数据包,说明HTTP的确是使用TCP建立连接的。

第一次握手

客户端发送了一个TCP,标志位为SYN,序列号为0,表示客户端请求建立连接。

SYN:标志位,表示请求建立连接。
Seq = 0:初始建立连接值为0,数据包的相对序列号从0开始,表示当前还没有发送数据。
Ack = 0:初始建立连接值为0,已经收到包的数量,表示当前没有接收到数据。

第二次握手

服务器发回确认包, 标志位为SYN, ACK,确认序号为客户的序列号ISN加1。

[SYN, ACK]: 标志位,同意建立连接,并回送SYN+ACK。
Seq = 0:初始建立值为0,表示当前还没有发送数据。
Ack = 1:表示当前服务器成功接收的数据位数,虽然客户端没有发送任何有效数据,确认号还是被加1,因为包含SYN或FIN标志位。(并不会对有效数据的计数产生影响,因为含有SYN或FIN标志位的包并不携带有效数据)。

第三次握手

客户端再次发送确认包,SYN标志位为0,ACK标志位为1,并把服务器发来ACK的序号字段+1,放在确认字段中发送给对方,且在数据段放写ISN的+1。

ACK:标志位,表示已经收到记录
Seq = 1:表示当前已经发送1个数据
Ack = 1: 表示当前端成功接收的数据位数,虽然服务端没有发送任何有效数据,确认号还是被加1,因为包含SYN或FIN标志位(并不会对有效数据的计数产生影响,因为含有SYN或FIN标志位的包并不携带有效数据)。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注