【从浏览器地址栏输入 url 到请求返回的过程】——3.建立TCP 连接
1.TCP是什么?
TCP(Transmission Control Protocol)传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议.。
2.建立TCP连接的过程(三次握手)
三次握手的目的是同步连接双方的序列号和确认号并交换TCP窗口大小信息。
第一次握手:客户端发送连接请求报文段,将syn置为1,Seq为x;然后,客户端进入SYN_SEND状态,等待服务器的确认;
第二次握手:服务器收到syn包,必须确认客户的syn(ack=j+1),同时自己也发送一个syn包(syn=k),即syn+ack包,此时服务器进入SYN_RECVD状态
三次握手:客户端收到服务器的syn+ack包,向服务器发送确认包ack(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手
3.常见问题
问题1: 为什么需要三次握手? 在谢希仁的《计算机网络》中是这样说的:
为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。
在书中同时举了一个例子,如下:
“已失效的连接请求报文段”的产生在这样一种情况下:client发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达server。本来这是一个早已失效的报文段。但server收到此失效的连接请求报文段后,就误认为是client再次发出的一个新的连接请求。于是就向client发出确认报文段,同意建立连接。
假设不采用“三次握手”,那么只要server发出确认,新的连接就建立了。由于现在client并没有发出建立连接的请求,因此不会理睬server的确认,也不会向server发送数据。但server却以为新的运输连接已经建立,并一直等待client发来数据。这样,server的很多资源就白白浪费掉了。采用“三次握手”的办法可以防止上述现象发生。例如刚才那种情况,client不会向server的确认发出确认。server由于收不到确认,就知道client并没有要求建立连接。”
不采用三次握手,只要服务端发出确认,就建立新的连接了,此时客户端忽略服务端发来的确认,也不发送数据,则服务端一致等待客户端发送数据,浪费资源。
问题2: 三次握手过程中可以携带数据吗?
其实第三次握手的时候,是可以携带数据的。但是,第一次、第二次握手不可以携带数据。
为什么这样呢?大家可以想一个问题,假如第一次握手可以携带数据的话,如果有人要恶意攻击服务器,那他每次都在第一次握手中的 SYN 报文中放入大量的数据。因为攻击者根本就不理服务器的接收、发送能力是否正常,然后疯狂着重复发 SYN 报文的话,这会让服务器花费很多时间、内存空间来接收这些报文。
也就是说,第一次握手不可以放数据,其中一个简单的原因就是会让服务器更加容易受到攻击了。而对于第三次的话,此时客户端已经处于 ESTABLISHED 状态。对于客户端来说,他已经建立起连接了,并且也已经知道服务器的接收、发送能力是正常的了,所以能携带数据也没啥毛病。
问题3:如果已经建立了连接,但是客户端突然出现故障了怎么办?
TCP还设有一个保活计时器,显然,客户端如果出现故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75秒钟发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。
【从浏览器地址栏输入 url 到请求返回的过程】——3.建立TCP 连接相关推荐
- 从浏览器地址栏输入url到请求返回发生了什么(深问)
问题: 从浏览器地址栏输入url到请求返回发生了什么 你一看这种烂掉牙的问题,小case,但996面试大佬由此延展的问题已经远远超越了这个问题本身了,不信你就接着看. 我回答了首先会进行 url 解析 ...
- 从浏览器地址栏输入url到请求返回发生了什么?
1.进行域名解析.根据DNS进行IP查找 URL 常见的RUL是这样的:http://www.baidu.com,这个域名由三部分组成:协议名.域名.端口号. 除此之外URL还会包含一些路径.查询和其 ...
- 【重难点】【计算机网络 01】OSI 七层模型和 TCP/IP 四层模型、IP 地址分为哪几类、ping 的原理、从浏览器地址栏输入 URL 到显示网页的过程、什么是 socket
[重难点][计算机网络 01]OSI 七层模型和 TCP/IP 四层模型.IP 地址分为哪几类.ping 的原理.从浏览器地址栏输入 URL 到显示网页的过程.什么是 socket 文章目录 [重难点 ...
- 浏览器地址栏输入url到显示主页的过程
面试回答: 当用户在浏览器地址栏输入地址后,敲击回车后,首先由DNS解析,查找域名对应的IP地址,然后,与服务器通过三次握手,建立TCP连接,向服务器发送HTTP请求,服务器处理请求,返回网页内容,浏 ...
- 从浏览器地址栏输入url到显示页面的步骤
从浏览器地址栏输入url到显示页面的步骤(以HTTP为例) - 在浏览器地址栏输入URL - 浏览器查看缓存,如果请求资源在缓存中并且新鲜,跳转到转码步骤 - 如果资源未缓存,发起新请求 ...
- 浏览器地址栏输入url以后发生了什么
在浏览器输入url后会发生的过程: 1.DNS对域名进行解析: 2.建立TCP连接(三次握手): 3.发送HTTP请求: 4.服务器处理请求: 5.返回响应结果: 6.关闭TCP连接(四次挥手): 7 ...
- 地址栏输入URL到显示页面的过程
前言 从地址栏输入URL到显示页面都发生了什么?这是一道面试经常会考的面试题.那么下面我们就来探讨一下从你输入URL后到响应,都经历了哪些过程. 1.DNS解析 我们在用户PC中使用网页浏览器来访问外 ...
- 输入url到页面返回的过程
输入url后,你看到了百度的首页,那么这一切是如何发生的呢? 这个问题之前.最近.我想以后肯定还会被问到,或者问到这样的题目,如果在百度框里输入查询的字符串开始,是怎么返回你需要的东西呢. 那这什么个 ...
- 分析输入url到页面返回的过程(查询返回过程)
最近看到一个题目,是当在浏览器中输入一个url后回车,后台发生了什么?比如输入url后,你看到了百度的首页,那么这一切是如何发生的呢? 这个问题之前.最近.我想以后肯定还会被问到,或者问到这样的题目, ...
最新文章
- 以太网未启用DHCP解决方法
- Android 10.0 PackageManagerService(一)工作原理及启动流程-[Android取经之路]
- 长春理工大学计算机学院分数线,2021长春理工大学录取分数线-长春理工大学分数线-2021长春理工大学录取查询网址...
- 第2章 fping、hping应用
- Spring AOP 应用篇
- 【Python函数】——sort,sorted
- 15分钟内开始使用Amazon Web Services和全自动资源调配
- 遥感原理与应用孙家炳_2.2遥感应用模型
- [导入]网页色彩搭配技巧
- Android 源码获取-----在Windows环境下通过Git得到Android源代码
- python实现diff json 并且打印出log日志
- cartographer 3D点云建图教程
- 宋宝华:Linux文件读写(BIO)波澜壮阔的一生
- 源恒房地产税务软件土地增值税清算系统
- iTunes历史各个版本下载地址
- cruzer php sandisk 闪迪u盘量产工具_sandisk cruzer 32G U盘量产工具下载
- FPGA学习之Cyclone器件资源结构知识介绍
- 咸鱼Maya笔记—Maya 场景操作
- 如何查看所使用计算机的配置,电脑配置的三种查看方法 不用借助软件怎么查看电脑配置...
- va_buffersharing example