根据域名获取ip地址

wireshark一些设置
-
设置相对序列号(实际上序列号是随机的),这样看得清楚一些。
配置:Wireshark菜单栏中的 Edit -> Preferences ->protocols ->TCP
-
采用wireshark提供数据流图。
配置:Wireshark菜单栏中的 Statistics ->Flow Graph...->TCP flow ->OK
wireshark抓取分析报文
过滤表达式:
ip.addr == 222.169.228.146 and tcp.port == 1923
抓取包图:


包1

包1发送[SYN]报文,相对序列号为0。默认开始时候,虽然没有交互报文,但是确认号为0。FLAG标志位占2字节。窗口大小初始化为8192字节。最大报文长度为1460字节。默认开启SACK传输(SACK传输就是为了使用选择确认算法的时候,传输已确认的序列号范围)。tcp头部占32字节。
包2

为什么窗口值win为14600字节?
1)刚开始想要明确窗口值,需要快速增长(指数增长),探索窗口值的边界。所以默认使用慢启动算法。
2)慢启动算法计算公式:IW = min(10MSS,max(2MSS,14600))
上一个报文传输过来的MSS = 1460字节。通过上面公式计算IW为14600字节。具体参考RFC文档6928
包3

包3发送[ACK]报文,相对序列号为1,确认号为1。客户端发送数据的窗口值大小为64952字节。双方都已经处于ESTABLISHED状态。
包1、包2、包3联合分析

包4


包4是通信双方传输数据首个包(客户端使用http发的请求),因为一直没传输数据,所以序列号和确认号不变化,沿用上次的。窗口大小为64952字节。Flag标识位为PSH,将数据交给了应用层处理,希望迅速得到对面应用程序的回复,而不是等到缓冲区满了再发。这里是希望服务器222.169.228.146快速应答。tcp报文段数据部分大小为683字节(tcp报文段数据内容就是http请求报文信息,包含了请求行、请求头、空行、请求体)。
包5

包5是服务器收到包4后,对包5的确认报文[ACK],序列号为1。但是确认号为上一个报文的序列号加上数据包的大小(Ack=1+683=684)。窗口值为15709字节。只是确认包,没有数据,所以tcp数据包长度len为0。
包6、包7


1. 包6、包7都是服务器向客户端发送数据包。[ TCP segment of a reassembled PDU ]报文段出现是由于,http应用层将一整块响应报文发送给客户端,交由tcp协议分段发送。
-
数据部分:
tcp传输数据包长度为1412字节。而数据包的内容也只是http协议的一部分(已经看到了一些响应字段HTTP/1.1 200 OK)。
包8

包8是客户端对于服务器发送的包6和7的数据包的响应报文。tcp是采用累积确认的方式,所以不会一包一应答。
剩下的数据包都是和包6、7、8一样处理。
包42

包42是数据传输的最后一个数据包,数据包长度为537字节。FLAG为PSH,还是要将缓冲区中数据及时发出去。
段数量(Segment count)为27。需要重组tcp长度为36661字节。需要重组tcp数据(16进制):48515450...........。
包43

包43是客户端对于服务器发送的数据包的确认报文[ACK]。收到了服务器发送的所有数据包。
包49、50、51

- 包49是由于之前向服务器请求资源,服务器响应给客户端就是没有找到对应的资源,所以包49是对服务器没找到资源这个情况的回复[ACK]确认包。
-
而这一次网页全部加载完毕了,资源能加载的都加载了。但是我将浏览器关闭了。tcp提供了保活功能。发送了一个保活探测报文包(包50)。该包特点就是序列号比之前小1(包49的序列号为1849,包50序列号为1848)。数据长度为1。
-
包51出现是由于,我的浏览器客户端已经关闭了,所以服务器发送包50(保活探测报文),客户端根本就无法接收和确认。所以触发了服务器的SACK重传机制,又发送了包51,来通知客户端。
SACK选项,通知客户端已经发送了1848到1849范围的字节了。SACK范围的数量也只有1个。
包52、53、54、55

- 包52、53、54、55四个包,通过交换序列号完成了四次挥手断开连接,释放了资源。
- 标识位FALG为FIN,主动发起向对方关闭连接。
- 标识位FALG为RST,出现这个标识位是由于被我快速关闭网页,关闭连接,序列号错乱,出现RST的报文,可以看到包53、54出现了相同的序列号1849。
网友评论