基于上节搭好了服务器,利用浏览器访问web服务器,web服务器在8080端口监听,利用wireshark抓包,获取如下报文。
首先必须一提的是三次握手,基于tcp链接的数据报文传输前必须建立三次握手,我们分析一下前三个tcp报文
第一个报文:
这是第一个数据报文,它是由:tcp-->ip--->eth--->frame, 没有数据报文,说明第一个tcp不携带数据,同样其余两个也一样都是握手信号,只有握手成功,才能传递数据。
如何判别它是握手信息还是数据报文呢---->我们再进一步分析
我们注意到第一行 frame 201: 74bytes on write(592bits) ,74 bytes captured on interface 0
握手报文是有特点的:
物理头 = 14
ip头 = 20
tcp = 40
74 = 物理头 + ip头 + tcp
我们再分析一下,看他们有何作用
物理头
它指定src_mac 和 dst_mac 和ip层协议ipv4 = 0x0800(2bytes)--2个字节标识出以太网帧所携带的上层数据类型,注意mac一般为6bytes
IPv4: 0x0800
ARP:0x0806
PPPoE:0x8864
802.1Q tag: 0x8100
IPV6: 0x86DD
MPLS Label:0x8847
在不定长的数据字段后是4个字节的帧校验序列(Frame. Check Sequence,FCS)
再来看下ip头
它指明src_ip于dst_ip, version:4 ip_header_length = 20bytes
differentiated services field :0x00 ---区分服务,是为了客服inter--service的可扩展性差,这个在后期的qos,我会再次写到
标识(identification):该字段标记当前分片为第几个分片,在数据报重组时很有用
标志(flag):该字段用于标记该报文是否为分片(有一些可能不需要分片,或不希望分片),后面是否还有分片(是否是最后一个分片)。
片偏移:指当前分片在原数据报(分片前的数据报)中相对于用户数据字段的偏移量,即在原数据报中的相对位置。
生存时间:TTL(Time to Live)。该字段表明当前报文还能生存多久。每经过1ms或者一个网关,TTL的值自动减1,当生存时间为0时,报文将被认为目的主机不可到达而丢弃。使用过Ping命令的用户应该有印象,在windows中输入ping命令,在返回的结果中即有TTL的数值。
协议:该字段指出在上层(网络7层结构或TCP/IP的传输层)使用的协议,可能的协议有UDP、TCP