一次网页请求背后的连接

一次网页请求背后的连接

想成为一个优秀的前端,对互联网协议是必须要了解的。本文使用WireShark抓包工具,对一次网页请求背后的TCP连接、HTTP请求进行了详细的展示。对网页请求中浏览器使用的并行连接、持久连接以及TCP连接建立关闭的过程均有所分析讨论,对HTTP如何封装在TCP中进行数据请求以及数据的响应返回也有所展示。供学习交流之用。

TCP简介

本文从传输层的报文开始,下层网络IP层、链路层寻址不在这里讨论范围。可以查看相关资料补充计算机网络知识。

TCP和UDP是传输层的2个协议。

UDP是一个简单的、尽力而为的数据报传输协议,它不能确保可靠传输。提供一种无连接的服务,不可靠但效率高,适合通信量较小或者延迟敏感的传输。

相对而言TCP(Transmission Control Protocol)能够提供可靠传输,这也决定了它高度的复杂性以及较大的系统开销。TCP的复杂性足以用一本专门的教材来讲解,这里我们只对其经典的三次握手、“四次挥手”以及基本报文格式进行简介,达到看懂wireshark抓获的封包的目的。

TCP报文格式


图1

TCP的报文格式如上图所示。孜孜不倦地工作在我们每日的互联网通信中,并将长期保持不变。所以你有大把的时光慢慢记住它。

这里特别需要用到的是红色的标志位部分,分别是:URG,ACK,PSH,RST,SYN,FIN。

其中在三次握手中十分重要的标志位:

ACK:这是非常常用的一个标志位,不仅仅在三次握手以及四次挥手中,该标志位的功能就是用于确认。该位置1时表示正确接收到了对方的报文。

SYN:同步序列号标志。在建立TCP连接时,一定会有一方主动端,一方被动端。网页请求中客户端浏览器就是主动端。当SYN为1而ACK为0时,这就是一个主动请求连接的报文。若对方同意连接,返回一个ACK和SYN均为1的接受报文。可以说它就是建立连接的一个标志。

FIN:在数据发送完毕,希望断开连接时,向对方发送一个FIN位置1的报文,表示我已经发送完毕。

还有一些需要说明的是图中红色的标志位上面的2排–32位序列号以及32位确认号。

先补充说明一点,TCP连接是一个全双工的连接,也就是连接的双方均可以在此连接上进行数据的收发操作。对于大块的数据,TCP的一个报文装不下,需要分成多个报文来发送,然而在实际的网络中,报文很可能经过不同的路由到达对方。报文到达的顺序是没办法保证的因此,32位序列号就用来指明报文的顺序,其具体含义是本报文携带的数据部分,第一个字节的序号。

举例来说,假设现在有3394字节的数据需要传输(每个字节占用一个序号),每个TCP报文最多携带1424字节的数据,同时假设数据从序号1开始发送(这个序号不一定是1,你可以选定从其他序号开始发送,这个序号是在三次握手的过程中协商好的)。那么第一个TCP报文的32位序列号就为1,发送了1424个字节。那么第二个TCP报文的32位序列号就从1425开始,第三个就为1424+1424的下一个2849开始。

刚才说了,TCP是全双工的连接,发送方在发送数据的同时也会接收数据。32位确认号就是告诉对方我已经成功接收的数据序号是多少。我们现在转换角色,假设我们是上面发送3394数据的接收方,我已经正确接收了上面的第一个报文,也就是我正确接收到了1到1424字节序号,那么我在发回的报文中将会把32位确认号写为1425(这里正确接收到了1424序号,但TCP自动将其加1,只是为了方便表示我希望接收的下一个字节序号是1425)。注意,只有在ACK标志位置1时该字段才有意义,ACK置1表明确认接收。还有,收发双方选择的起始发送序号不一定相同,比如我选择从1序号开始发,你可以选择从1024序号开始发,序号只是一个编号而已,彼此根据这个编号进行确认就可以了。

下面我们还会具体分析一次网页请求的报文。

TCP三次握手

TCP是面向连接的协议,建立连接需要进行经典的3次握手,为什么一定要进行三次握手,你可以自行查阅资料。

三次握手的过程如下:


图2

在网页请求中,首先客户浏览器端向服务器发送一个SYN为1的报文,其中包含一个自己选定的初始的32位序列号x,这是第一次握手。

对方收到该请求后,如果同意建立连接,返回一个ACK和SYN标志位均为1的确认报文,将该报文的32位确认号写为x+1,与此同时,自己选定一个初始32位序列号y,这是第二次握手。

第三次握手,发起请求方收到了确认回复之后,返回一个ACK为1的确认报文,其中的32位确认号为y+1。至此连接建立。客户端将从自己设定的x+1序号开始发送数据。

这里我们使用wireshark对进行抓包,该网站是我部署在腾讯云的小主页。打开浏览器,请求该网页。抓到下面的封包:


图3

可以把图放大看,这里红线圈出来的3条就是3次握手的过程。可能看不太清,我下面会逐一对单个报文截图。

我们看到在三次握手中间还夹杂了其他的TCP包,实际上在一次网页请求中,不止建立了一个TCP端到端的连接!我们下面会说,这里我们只需要关注用红色圈起来的3个报文。

第一条:


图4

这里我们暂时不关注其他层。但是从下面第一条蓝色上面的网络IP层可看到

Internet Protocol Version 4, Src:115.156.245.180, Dst: 115.159.81.187

这是网络层的内容,它负责IP寻址,其中封装了手法双方的IP信息。加上Transmission Control Protocol中的内容:

Source Port: 60545
Destination Port: 80

可以看出这是从本机115.156.245.180:60545端口到目标主机115.159.81.187:80端口的连接,http服务默认端口就是80。我们看蓝色的Flags:0x002(SYN),可知这是一个TCP请求连接的报文,也就是第一次握手。注意看Sequence number:0,发送方将初始发送序号x选择成了0。

tip: ip+端口号 就是一个套接字

第二条:


图5

同上,我们可以看到这是一个从目标主机115.159.81.187:80端口发到本机115.156.245.180:60545端口的报文。其中Flags: 0x12(SYN, ACK),SYN、ACK置1,表明对方同意建立连接。这是第二次握手。回复的Acknowledgment number: 1也就是32位确认序列号,为第一次握手的x+1(第一次放松选择的x是0)。同时自己选择的初始发送序号Sequence number:0也为0。

第三条:


图6

这是第三次握手,由本机60545端口发向目标主机80端口一个ACK确认报文。

红色部分,回复的Acknowledgment number为第二次握手服务器方选定的Sequence number+1。至此连接建立。

发送第一个HTTP请求,获取HTML文档

紧接着三次握手建立连接之后,就是一次http请求:

最低0.47元/天 解锁文章
一次TCP连接只能进行一次http请求吗?
qq_41944283的博客
07-27 235
一次TCP连接只能进行一次http请求吗? 不是,在最早期http/1.0版本里是一次http请求后就关闭TCP连接,不过可以通过设置请求头Connection: keep-alive,保持TCP连接。后来的http/1.1默认实现了这个请求头...
一次简单的TCP通信
知识改变命运!
12-02 196
基于Python的一次TCP通信 client端代码 from socket import * serverName = '121.199.**.**' serverPort = 12000 clientSocket = socket(AF_INET, SOCK_STREAM) clientSocket.connect((serverName, serverPort)) sentence = i...
tcp网络请求
最新发布
PHPneweer的博客
03-22 185
发送方(一般设计成本机)接收方。
一次TCP连接支持多少次HTTP请求
u013578042的博客
03-09 3017
http 1.0 默认一次tcp连接进行一次http请求之后就会断开(由于资源浪费,有些服务器支持通过配置支持多次) http 1.1 请求头配置:Connection:keep-alive = true,只要tcp连接不断开(默认2小时),一直可以进行http请求,但是一个tcp连接同一时间只支持一个http请求 Connection:keep-alive = false,只能发一次http请...
PHP 批量网络请求同一个API,php – 在一个API请求中有多个连接的单个查询,或者在单独的API请求中有一些连接的几个查询?...
weixin_29202213的博客
03-25 273
什么是最佳实践,什么提供最佳性能?我目前有一个查询,其中包含许多LEFT JOIN,用于获取用户及其所有数据,如朋友,朋友请求等:SELECT`user`.`id` AS `user_id`,`user`.`name` AS `user_name`,`manager`.`id` AS `manager_id`,`competition`.`id` AS `manager_competition_i...
解析一次TCP连接的过程
csdn1314hjb的博客
05-23 845
这是我的第一篇博客:介绍一下自己: 我是一名小小的网管,是一个尘世中的迷茫小书童。作为一名网管,要学的东西很杂,很多。譬如我,公司是一个跨境电商,自己有自己的一套ERP系统。我的工作是:电脑的硬件知识;一些桌面的运维的知识;一些手机的知识(公司有PDA);一些无线网络的知识;一些Linux的知识;还有更多的是ERP系统后台代码的编写....等等都是一些杂事。说容易嘛,也容易,说不容易嘛也不容易。今...
完美解决request请求流只能读取一次的问题
08-24
主要介绍了完美解决request请求流只能读取一次的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
如何设置一定时间内只能发送一次请求
09-04
主要介绍了如何设置一定时间内只能发送一次请求,需要的朋友可以参考下
CSS 合并 一次请求
09-29
CSS 合并 一次请求 减少请求数,代码可以借鉴
vue axios请求频繁时取消上一次请求的方法
10-17
主要介绍了vue axios请求频繁时取消上一次请求的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
易语言建立HTTP连接请求
08-20
建立HTTP连接请求系统结构:取端口,HTTP查询信息,Http创建请求,Internet关闭句柄,Internet建立连接,Http发送请求,Internet激活, ======窗口程序集1 || ||------__启动窗口_创建完毕 || ||------_按钮1_被单
一个页面同时请求多个接口,超过6个请求之后,stallled时间过长
莉兹Liz的博客
03-03 9142
Network Timing 使用Chrome浏览器请求多个接口时发现前面的请求Network Timing中stalled时间明显较短,到第四个请求时stalled时间开始加长,超过6个请求之后,stallled时间过长,导致接口整体请求时间变长,页面渲染变慢。 为什么会这样呢,通过查看stalled发现和TCP连接有关。 TCP连接 TCP是网络传输层中的协议,三次握手建立连接、四次挥手终止连接。问题中,因为使用axios结合async、await异步请求请求接口,因此,7个TCP同时发起连接
http连接基于tcp还是udp以及tcp与udp的区别(简述)
08-02 9701
httptcp的关系: (1)首先,httptcp、udp并不是在一个层(osi七层模型)中,http在应用层,tcp和udp在传输层。 (2)http是基于tcp的,因为发送http请求时,会先进行tcp三次握手的连接。 (3)http的长连接与短连接,其实就是tcp的长连接与短连接http1.1开始默认使用长连接,也就是 connection 默认使用 keep-alive关键字。长连接就是只需要在第一次连接时进行tcp三次握手,接下来就不需要了,可以一直使用这个连接,不会立即关闭,与短连接
发送一条请求,页面自动将这条请求发送两次!
luting668的专栏
06-01 1635
注意:我includ进来的cdProvideType_top.jsp,在该页面上的标为蓝色的一行,在此table标签中,我有一个属性: background="#BED9A6", 问题就出在它这, 将此处的#BED9A6,改成对应的英文来表示的颜色,页面就不再将请求自动的发送两次了。
一次请求执行两次同一html页面
qiny2020的专栏
02-14 1770
在html中加入以下代码,当前页会被执行两次 rel="shortcut icon" href="#" /> 原因:link 中href="#" 加载当前地址。
HTTP——三次挥手与四次握手
q392636814的博客
04-29 202
目录 三次握手 四次挥手 TCP标志 三次握手 第一次握手:客户端将标志位置为1,随机产生一个值seq=J,并将该数据包发送给服务端,客户端进入SYN_SENT,等待服务器确认。 第二次握手:服务器端收到数据包后由标志位SYN=1知道客户端请求建立链接,服务器端将标志位SYNACK都置为1,ACK=J+1,随机产生一个值seq=K,并将数据包发送给客户端以确认连接请求,服务器进入SY...
通过http请求获取指定url的页面
Hello,你好!
05-27 6650
根据url获取其静态页面
创建一个使用POST请求连接
05-28
好的,可以使用以下 Python 代码创建一个使用POST请求连接: ```python import requests url = "https://example.com/api" data = {"name": "John", "age": 30} response = requests.post(url, data=data) print...

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
43
原创
353
点赞
864
收藏
236
粉丝
关注
私信
写文章

热门文章

  • IntelliJ IDEA添加jar包 121817
  • 十分详细的React入门实例 84355
  • JSX语法详解 81100
  • JavaScript构造函数及原型对象 25714
  • 一个简单的Servlet程序 16280

分类专栏

  • Java Web入门实战笔记 13篇
  • JavaScript 9篇
  • jQuery学习笔记 3篇
  • css笔记 4篇
  • 博文翻译 1篇
  • Java 5篇
  • 数字图像处理 2篇
  • React 2篇
  • Redux 1篇
  • 网络协议 1篇
  • 入门笔记 16篇

最新评论

  • 常见排序算法的Javascript实现

    CSDN-Ada助手: 非常感谢CSDN博主的分享,这篇博客对于想要学习排序算法的Javascript开发者来说非常有用。我觉得下一篇博客可以继续深入探讨JavaScript的数据结构和算法,比如二叉树、图、递归等等。这样的技术文章对其他用户也会非常有帮助,希望你能继续分享你的知识和经验,相信会有更多读者受益。 为了方便博主创作,提高生产力,CSDN上线了AI写作助手功能,就在创作编辑器右侧哦~(https://mp.csdn.net/edit?utm_source=blog_comment_recall )诚邀您来加入测评,到此(https://activity.csdn.net/creatActivity?id=10450&utm_source=blog_comment_recall)发布测评文章即可获得「话题勋章」,同时还有机会拿定制奖牌。

  • css选择器详解

    八火明灯: 后续兄弟选择器(~):和相邻兄弟选择器类似,但它会选取后面的全部兄弟元素

  • 新手推荐JSP+JavaBean+Servlet MVC模式用户注册模块

    zjf_china007: 很棒,按照步骤操作,可行

  • JSX语法详解

    od400: 一脸懵逼

  • 十分详细的React入门实例

    A.张小震: 没有图片那

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • 常见排序算法的Javascript实现
  • JSX语法详解
  • React-"Refs and the DOM"
2017年1篇
2016年44篇

目录

目录

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

哆哆女性网浆果儿资源2018杨姓宝宝起名大全爱奇艺tv版女孩姓姜起名如何起名字最好的方法有r2v32仙人球起名字鄞州区卫生局怎么给宝宝起名字3c认证羽毛球队起名起什么名字好 五行缺土挖机公司起名寓意好水命起什么名野鸭子睿字配什么字好听搭配起名去哪网机票查询qm517878起名宫斗服饰商标免费起名大全集姓张的的起名大全起孩子取名网盖亚奥特曼剧场版www.uuu54.comnbl直播疯狂的农场给宝宝起名大全免费网58食品批发网中字头公司名称大全起名保温公司起什么名字比较好淀粉肠小王子日销售额涨超10倍罗斯否认插足凯特王妃婚姻不负春光新的一天从800个哈欠开始有个姐真把千机伞做出来了国产伟哥去年销售近13亿充个话费竟沦为间接洗钱工具重庆警方辟谣“男子杀人焚尸”男子给前妻转账 现任妻子起诉要回春分繁花正当时呼北高速交通事故已致14人死亡杨洋拄拐现身医院月嫂回应掌掴婴儿是在赶虫子男孩疑遭霸凌 家长讨说法被踢出群因自嘲式简历走红的教授更新简介网友建议重庆地铁不准乘客携带菜筐清明节放假3天调休1天郑州一火锅店爆改成麻辣烫店19岁小伙救下5人后溺亡 多方发声两大学生合买彩票中奖一人不认账张家界的山上“长”满了韩国人?单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#青海通报栏杆断裂小学生跌落住进ICU代拍被何赛飞拿着魔杖追着打315晚会后胖东来又人满为患了当地回应沈阳致3死车祸车主疑毒驾武汉大学樱花即将进入盛花期张立群任西安交通大学校长为江西彩礼“减负”的“试婚人”网友洛杉矶偶遇贾玲倪萍分享减重40斤方法男孩8年未见母亲被告知被遗忘小米汽车超级工厂正式揭幕周杰伦一审败诉网易特朗普谈“凯特王妃P图照”考生莫言也上北大硕士复试名单了妈妈回应孩子在校撞护栏坠楼恒大被罚41.75亿到底怎么缴男子持台球杆殴打2名女店员被抓校方回应护栏损坏小学生课间坠楼外国人感慨凌晨的中国很安全火箭最近9战8胜1负王树国3次鞠躬告别西交大师生房客欠租失踪 房东直发愁萧美琴窜访捷克 外交部回应山西省委原副书记商黎光被逮捕阿根廷将发行1万与2万面值的纸币英国王室又一合照被质疑P图男子被猫抓伤后确诊“猫抓病”

哆哆女性网 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化