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

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

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

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

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

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

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

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

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

第五行就是UDP 包的内容了,它请求的是什么呢?看图 一张图放不下,看两张 图中 的标记

请求的数据是在一个数据包里的,可以看到 箭头所指,当前是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。

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

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏hotqin888的专栏

beego操作session

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hotqin888/article/det...

1071
来自专栏前端小吉米

谷歌都在用 PWA 你还不用?

1575
来自专栏刘望舒

Android Apk安装过程解析

静默安装 apk安装流程简析 installd进程意义 最近工作上遇到静默安装相关的内容,顺便学习一下apk安装的知识

2296
来自专栏Golang语言社区

"LollipopGo/library/lollipop/common" 测试3

Golang语言社区 开源轻量级web应用框架,可以快速创建博客及商城等

4909
来自专栏Golang语言社区

go http 服务器编程(1)

1. 初识 http 是典型的 C/S 架构,客户端向服务端发送请求(request),服务端做出应答(response)。 golang 的标准库 net/h...

1.8K6
来自专栏Java3y

【Java】留下没有基础眼泪的面试题

使用多线程时,不是多线程能提升程序的执行速度,使用多线程是为了更好地利用CPU资源!

1462
来自专栏python3

bs4爬虫实战二:获取双色球中奖信息

访问双色球网站:http://www.zhcw.com/ssq/kaijiangshuju/index.shtml?type=0

982
来自专栏Golang语言社区

【转】Go语言Http Server源码阅读

目录(?)[-] 前言 几个重要概念 具体分析 几个接口 Handler ResponseWriter Flusher Hijacker response H...

2854
来自专栏SDNLAB

OpenDaylight与Mininet应用实战之三层转发机制四

本文属于该专题中的进阶篇,主要讲解ODL应用不同网段的三层数据转发机制,在OpenDaylight与Mininet应用实战之流表操作(三)中会涉及到相同网段的二...

4806
来自专栏Janti

基础巩固——长连接 、短连接、心跳机制与断线重连

本文将从长连接和短连接的概念切入,再到长连接与短连接的区别,以及应用场景,引出心跳机制和断线重连,给出代码实现。

2651

扫码关注云+社区