TCP IP 里的网络请求 到底是什么样的?

当我输入 一个url 在浏览器的地址栏按下回车 这个以前也写过博客了:一次URL输入域名按下回车到底发生了什么?

今天聊聊 传输层 在中间做了什么事:

如果我输出 慕课网 的网址:www.imooc.com

首先我会去请求 慕课网的 ip 地址: 我请求的的数据包入下图:

这请求慕课网的ip

如图所示:
第一行是我电脑发出去 数据链路层的数据包。

第二行 是 笔记本的 mac 地址 ,请求会请求我们的路由器的,然后由路由器 转发 出去, 看到那个TP-link 也应该猜到啦。

第三行是 网络层 也是 tcp ip 所在的一个层,Src: 192.168.0.108 是 我们的ip地址 DST:116.228.111.118 是 DNS服务器的 地址。

第四行可以看到,我们DNS的请求是作为 UDP 形式发出去的,为什么是UDP呢?
因为我们只是想得到慕课网的地址,还没有开始建立连接,所以用UDP就可以了。

第五行就是UDP 包的内容了,它请求的是什么呢?看图 一张图放不下,看两张 图中 的标记
UPD包请求的数据
这里写图片描述

请求的数据是在一个数据包里的,可以看到 箭头所指,当前是64号包、

最后一行 Queries 意思是 我要请求的url www.imooc.com 的ip 是多少?

答案是:
第一行 Response in 65 意思是 当前请求的 ip 的结果 response 在65号包里面。

然后我们再看看65号包里的信息:还是看两张图里的标记:
这里写图片描述

可以看到 65号包 走的是 DNS协议,
第三行可以看到 Src 是 DNS服务器的地址, 而Dst 的 ip 地址 恰好是之前 我电脑的ip地址。

然后直接看第五行 response 里的数据。

第一行又是 request in 64
意思是 下面的数据 是64号包发出的请求得来的。

可以看出每个包的数据都记录了它是几号包发出的请求,或是 几号包的相应。
这里写图片描述

可以看到,相应的信息里说到 我请求的是 www.imooc.com 的地址。
然后对应的 ip 地址 有三个 , 然后我们可以看到 上面的66号包发出的 请求 的ip 地址是:

115.182.41.180 这个地址。

然后我们看找到了 慕课网的ip地址后 是如何发起请求的。

三次握手建立连接

可以看到 66 67 68 三个包的 我所给的标记, 很明显的就可以看出 这是在进行三次握手了。
图下面给出的信息: 请求的是 80 端口,
sequence number : 0 意思是 这是滑动窗口协议的 第 0 号包。包的编号。

看看我们发起的第一次握手 ,请求的包:
第一次握手

Tcp Segment len 是 0 意思是,除去Tcp 的头信息外,它的内容是 0 ;

Acknowledgment number 0 意思是我希望请求到你发出的 第 0 号包,就是我们发出握手请求,想得到慕课网的回应,那么慕课网的第一次回应就是 0 。
当我们第三次握手的时候, 我们就希望慕课网下次 开始给我们发数据了,那就是第 1 号包了。
不知道这么解释 观众老爷是否看得懂。。

flags 是 代表连接的请求,

Window size value 65535 意思就是 滑动窗口的大小是 65535.

看第二次握手:
第二次握手
flags 变成了 SYN, ACK 这懂的都懂。

慕课网设置的滑动窗口的大小是 14480;

第三次握手的包:
这里写图片描述

第三次握手的包就很简单了。可以看到三次握手建立连接后。
马上就开始通过HTTP请求发送信息了。

此刻终于明白了一点,Tcp ip 跟 HTTP 的关系了:
HTTP 本身是无状态的协议, 而Tcp ip 是有状态的协议。
我们网络之间的信息传输,就是靠着是一层一层协议的封装,所做到的了。
虽然我打出的这段文字,之前也在其他地方看到了,但只是自己真的体会了这个过程才能深刻的明白这个道理……

于是又通过 HTTP 请求 发送 Tcp 的包了

我们先看看HTTP 的头信息:
这里写图片描述
我想 这大家应该再熟悉不过了。 使用的是HTTP 1.1 这个协议版本,get请求。

开始发送包数据就没有什么好说的啦,
无非就是在滑动窗口的机制上,记录你发了什么数据过来,我又收到了你哪些数据,收到了就确认ack,
有时候是一个包就一个ack 有时候是两个包一次ack。

猜你喜欢

转载自blog.csdn.net/world6/article/details/79581298