前言:http的交互现在无论是平时自己做项目还是面试,理解他底层连接的原理都至关重要。

前置知识(已知请略过)

IP地址(internet Protocol Address)

互联网协议地址
作用:分配给用户上网使用的互联网
一个域名只能对应一个IP,一个IP可以对应多个域名
分类:IPv6,IPv4
IPv4:十进制 ,4组32位
IPv6空间更大,8组128位,更高的安全性,十六进制,相对来说多了abcdef

port:端口号

例子:
IP地址:上海市浦东新区
port:乐园中的不同游乐设施
域名:上海迪士尼乐园
默认端口:http:90, https:443, FTP:20/21

TCP:传输控制协议

http是基于TCP协议的
特点:面向连接,必须要有连接才可以传输数据
优点:稳定,重传机制,拥塞控制机制,实时断开连接
缺点:速断慢(因为需要建立可靠的连接还有其他的一些处理),效率低,容易被攻击(三次握手=
DOS,DDOS攻击)
TCP/IP协议组(联合使用):提供点对点的连接机制

对比:

UDP(User Data Protocol:喇叭喊人)

用户数据报协议
特点:面向无连接(不可靠的协议,无状态传输机制)
可以进行无连接信息发送
例:语音消息,qq发消息,直播
优点:安全,快速(因为他没有那些连接处理),漏洞少(UDP flood攻击)
缺点:不可靠,不稳定,容易丢包
只要目的源地址,端口号,地址,确定,则直接可以进行发送信息报文,但是不能保证一定能收到完整的数据
游戏是UDP和TCP相辅的
文件什么的肯定是TCP

http与https:超文本传输协议,超文本传输安全协议

https是http的安全版(安全基础是SSL/TLS,会套出http,让http变得不那么透明)
http:先建立TCP,然后再进行发送http请求,直接在TCP连接上运行,客户端和服务端都无法验证对方身份
https:先建立TCP,然后再进行发送http请求,在请求发送数据时先运行在SSL/TLS上进行加密保存后,SSL/TLS运行再TCP连接上进行请求

正文

首先模拟一个场景:你在浏览器输入自己想要访问的地址,浏览器发送请求到服务端,服务端进行响应,浏览器进行数据页面渲染,从而你得到自己想要访问地址的页面,这个流程的原理是怎么样的呢?
总体流程图:

1:DNS解析:

可以认为域名与对应的ip转化的服务器
DNS解析流程:在输入框回车请求,客户端会向本地服务器缓存中请求这个域名的IP是多少,如果没有,DNS就会去根服务器(美国有,英国有,但是根服务器中的缓存也很少),他会让DNS去找.com域服务器,如果还是没查到他会让DNS去查域名(jsplusplus)服务器(如果在中国进行备案了, 就一定会有),找到并返回给浏览器。并且每一次DNS在根,或者com,或者域名(jsplusplus)中找到的话,DNS是会先将该次查询的IP对应表数据缓存到本地,下次再进行访问这个的时候就可以直接找到,图解如下

DNS查询完后,就是进行TCP的三次握手了

2:三次握手

前置知识:

标志位:

SYN:同步序列编号

ACK:Acknowledgement 确认字符

状态:

LISTEN:侦听TCP端口的连接请求(我在等你发请求哦)

SYN-Send:发送连接请求等待回复状态(我发了请求了,等你回复哦)

SYN-RECELVED:在收到或者发送一个连接请求后等待对连接请求的确认,接收请求并确认状态(我收到你的连接请求了哈,我等你回复)

ESTABLISHED:代表一个打开的连接,数据可以传送给用户,连接建立状态(连接已经建立了哈,我跟你说一下)

首先,你输入url地址,DNS将其转换为IP地址,服务端那边的端口是一直开着的(LISTEN是进行的),

开始进行握手

1、第一次握手:客户端给服务端发一个 SYN 报文(SYN-SENT),并指明客户端的初始化序列号 ISN(J)。此时客户端处于 SYN_Send 状态。

2、第二次握手:服务器收到客户端的 SYN 报文之后,会以自己的 SYN 报文作为应答,并且也是指定了自己的初始化序列号 ISN(K),同时会把客户端刚刚传过来的 ISN(J) + 1 作为 ACK 的值,表示自己已经收到了客户端的 SYN,此时服务器处于 SYN_REVD 的状态。

3、第三次握手:客户端收到 SYN 报文之后,会发送一个 ACK 报文,当然,也是一样把服务器的 ISN(K) + 1 作为 ACK 的值,表示已经收到了服务端的 SYN 报文,此时客户端处于 establised 状态,

图解如下:

3: 四次挥手

1、第一次挥手:客户端发送一个 FIN 报文,报文中会指定一个序列号。此时客户端处于FIN_WAIT1状态。

2、第二次握手:服务端收到 FIN 之后,会发送 ACK 报文,且把客户端的序列号值 + 1 作为 ACK 报文的序列号值,表明已经收到客户端的报文了,此时服务端处于 CLOSE_WAIT状态。

3、第三次挥手:如果服务端也想断开连接了,和客户端的第一次挥手一样,发给 FIN 报文,且指定一个序列号。此时服务端处于 LAST_ACK 的状态。

4、第四次挥手:客户端收到 FIN 之后,一样发送一个 ACK 报文作为应答,且把服务端的序列号值 + 1 作为自己 ACK 报文的序列号值,此时客户端处于 TIME_WAIT 状态。需要过一阵子以确保服务端收到自己的 ACK 报文之后才会进入 CLOSED 状态

图解如下:

本文章如有错漏,欢迎指正

HTTP请求的三次握手和四次挥手,以及DNS流程解析相关推荐

  1. postman发送报文时请求时间超时因为什么_面试官说不要再问我三次握手和四次挥手是什么了...

    三次握手和四次挥手是各个公司常见的考点,也具有一定的水平区分度,也被一些面试官作为热身题.很多小伙伴说这个问题刚开始回答的挺好,但是后面越回答越冒冷汗,最后就歇菜了. 见过比较典型的面试场景是这样的: ...

  2. Linux网络编程--TCP中的三次握手和四次挥手

    服务器编程和客户端编程的大致流程如下: 三次握手是在客户端中的connect中完成的,具体如下: 那么上述说到的SYN     ACK这些是什么东西呢? 上述的截图取自<Linux高性能服务器编 ...

  3. 一文搞懂TCP的三次握手和四次挥手

    目录 1.三次握手 2.四次挥手 3.11种状态名词解析 TCP的三次握手和四次挥手实质就是TCP通信的连接和断开. 三次握手:为了对每次发送的数据量进行跟踪与协商,确保数据段的发送和接收同步,根据所 ...

  4. 硬不硬你说了算!近 40 张图解被问千百遍的 TCP 三次握手和四次挥手面试题

    来自:小林coding 每日一句英语学习,每天进步一点点: 前言 不管面试 Java .C/C++.Python 等开发岗位, TCP 的知识点可以说是的必问的了. 任 TCP 虐我千百遍,我仍待 T ...

  5. “三次握手,四次挥手”你真的懂吗?

    来源:码农桃花源 解读:"拼多多"被薅的问题出在哪儿?损失将如何买单? 之前有推过一篇不错的干货<TCP之三次握手四次挥手>,前几天有兄弟投稿,开始还以为是同一篇,后经 ...

  6. TCP 三次握手与四次挥手

    文章目录 1. 三次握手 1.1 为什么需要三次握手,两次不行吗? 1.2 什么是半连接队列? 1.3 ISN(Initial Sequence Number)是固定的吗? 1.4 三次握手过程中可以 ...

  7. 握手失败_拜托了,看完这篇别再问我什么是TCP三次握手和四次挥手

    TCP三次握手和四次挥手的问题在面试中是最为常见的考点之一.很多读者都知道三次和四次,但是如果问深入一点,他们往往都无法作出准确回答. 三次握手如何建立连接? 三次握手建立链接 从图中可以清楚的看到, ...

  8. 以女朋友为例讲解 TCP/IP 三次握手与四次挥手

    来自:开源中国,作者:Champin 链接:https://my.oschina.net/u/3708120/blog/1581023 背景 和女朋友异地恋一年多,为了保持感情我提议每天晚上视频聊天一 ...

  9. 第五章 运输层(UDP和TCP三次握手,四次挥手分析)

    序言   通过这章,可以知道其实三次握手和四次挥手其实真的好简单,通过这章的学习,我相信你也会同样的认为,以后在也不需要听到别人问三次握手的过程而自己一脸懵逼了,觉得人家好屌,其实也就是他懂你不懂,仅 ...

最新文章

  1. Ubantu下hadoop运行第一个例子wordcount过程
  2. latex写文章的一些细节问题
  3. 网站SEO优化该如何提高用户粘度?
  4. 用WINHEX合并两个或多个BIN文件
  5. 两点C#的propertyGrid的使用心得
  6. 【Qt】Qt5.12编译MySQl5.7驱动(亲自测试成功)
  7. Spring Boot 入门之缓存和 NoSQL 篇(四)
  8. 有关OPenCV的几个库函数的使用
  9. [bug解决] TensorFlow安装错误:ERROR Cannot uninstall ‘wrapt‘
  10. 设计模式学习五、代理模式
  11. Git 操作实战示例
  12. Qt 中使用librdkafka librdkafka++ 创建消费者
  13. 【电脑讲解】电脑知识入门大全,超详细电脑基础知识讲解
  14. Module ‘“xx.vue“‘ has no default export.Vetur(1192)
  15. 计算机二级c语言考点解析,2017年计算机二级C语言考点解析
  16. Excel.Application使用手册(API)
  17. CH344是一款USB总线的转接芯片
  18. Python——>字典类型和操作
  19. 计算机应用模块等级考试大纲,计算机等级考试大纲最新.doc
  20. word2003流程图变成图片_用Word2003绘制流程图的方法

热门文章

  1. 2023年宜昌市中职组“网络安全”赛项竞赛任务书-2
  2. ffmpeg图片与视频命令笔记
  3. 一文详解跨链的技术点及难点:从完美跨链谈起
  4. Java集合工具类Collections(一)
  5. opencv图片矩形网格边线_OpenCV C++(九)----几何形状的检测和拟合
  6. 符号测执行软件测试,基于符号执行与模糊测试的混合测试方法
  7. 原来是这样查快递单号的
  8. 【渝粤教育】国家开放大学2019年春季 1323内科护理学(本) 参考试题
  9. flash站的seo
  10. M201: MongoDB Performance chapter 2 Mongodb Indexes学习记录