前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >分布式基础__TCP IP 里的网络请求 到底是什么样的?

分布式基础__TCP IP 里的网络请求 到底是什么样的?

原创
作者头像
矿泉水
发布2018-05-11 11:36:49
8161
发布2018-05-11 11:36:49
举报
文章被收录于专栏:风中追风风中追风

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

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

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

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

这请求慕课网的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包请求的数据
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。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档