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 连接相关推荐

  1. 从浏览器地址栏输入url到请求返回发生了什么(深问)

    问题: 从浏览器地址栏输入url到请求返回发生了什么 你一看这种烂掉牙的问题,小case,但996面试大佬由此延展的问题已经远远超越了这个问题本身了,不信你就接着看. 我回答了首先会进行 url 解析 ...

  2. 从浏览器地址栏输入url到请求返回发生了什么?

    1.进行域名解析.根据DNS进行IP查找 URL 常见的RUL是这样的:http://www.baidu.com,这个域名由三部分组成:协议名.域名.端口号. 除此之外URL还会包含一些路径.查询和其 ...

  3. 【重难点】【计算机网络 01】OSI 七层模型和 TCP/IP 四层模型、IP 地址分为哪几类、ping 的原理、从浏览器地址栏输入 URL 到显示网页的过程、什么是 socket

    [重难点][计算机网络 01]OSI 七层模型和 TCP/IP 四层模型.IP 地址分为哪几类.ping 的原理.从浏览器地址栏输入 URL 到显示网页的过程.什么是 socket 文章目录 [重难点 ...

  4. 浏览器地址栏输入url到显示主页的过程

    面试回答: 当用户在浏览器地址栏输入地址后,敲击回车后,首先由DNS解析,查找域名对应的IP地址,然后,与服务器通过三次握手,建立TCP连接,向服务器发送HTTP请求,服务器处理请求,返回网页内容,浏 ...

  5. 从浏览器地址栏输入url到显示页面的步骤

    从浏览器地址栏输入url到显示页面的步骤(以HTTP为例) - 在浏览器地址栏输入URL - 浏览器查看缓存,如果请求资源在缓存中并且新鲜,跳转到转码步骤     - 如果资源未缓存,发起新请求   ...

  6. 浏览器地址栏输入url以后发生了什么

    在浏览器输入url后会发生的过程: 1.DNS对域名进行解析: 2.建立TCP连接(三次握手): 3.发送HTTP请求: 4.服务器处理请求: 5.返回响应结果: 6.关闭TCP连接(四次挥手): 7 ...

  7. 地址栏输入URL到显示页面的过程

    前言 从地址栏输入URL到显示页面都发生了什么?这是一道面试经常会考的面试题.那么下面我们就来探讨一下从你输入URL后到响应,都经历了哪些过程. 1.DNS解析 我们在用户PC中使用网页浏览器来访问外 ...

  8. 输入url到页面返回的过程

    输入url后,你看到了百度的首页,那么这一切是如何发生的呢? 这个问题之前.最近.我想以后肯定还会被问到,或者问到这样的题目,如果在百度框里输入查询的字符串开始,是怎么返回你需要的东西呢. 那这什么个 ...

  9. 分析输入url到页面返回的过程(查询返回过程)

    最近看到一个题目,是当在浏览器中输入一个url后回车,后台发生了什么?比如输入url后,你看到了百度的首页,那么这一切是如何发生的呢? 这个问题之前.最近.我想以后肯定还会被问到,或者问到这样的题目, ...

最新文章

  1. 以太网未启用DHCP解决方法
  2. Android 10.0 PackageManagerService(一)工作原理及启动流程-[Android取经之路]
  3. 长春理工大学计算机学院分数线,2021长春理工大学录取分数线-长春理工大学分数线-2021长春理工大学录取查询网址...
  4. 第2章 fping、hping应用
  5. Spring AOP 应用篇
  6. 【Python函数】——sort,sorted
  7. 15分钟内开始使用Amazon Web Services和全自动资源调配
  8. 遥感原理与应用孙家炳_2.2遥感应用模型
  9. [导入]网页色彩搭配技巧
  10. Android 源码获取-----在Windows环境下通过Git得到Android源代码
  11. python实现diff json 并且打印出log日志
  12. cartographer 3D点云建图教程
  13. 宋宝华:Linux文件读写(BIO)波澜壮阔的一生
  14. 源恒房地产税务软件土地增值税清算系统
  15. iTunes历史各个版本下载地址
  16. cruzer php sandisk 闪迪u盘量产工具_sandisk cruzer 32G U盘量产工具下载
  17. FPGA学习之Cyclone器件资源结构知识介绍
  18. 咸鱼Maya笔记—Maya 场景操作
  19. 如何查看所使用计算机的配置,电脑配置的三种查看方法 不用借助软件怎么查看电脑配置...
  20. va_buffersharing example

热门文章

  1. 软件测试现状(专家采访记录)
  2. 一件真实感人的动物故事
  3. ROG STRIX如何开启游戏模式
  4. Xmind基础教程-下钻和上钻
  5. UR3机器人雅克比矩阵
  6. 腾讯狂砸2亿,给1万多员工送华为折叠屏手机! 市价2万一台且断货
  7. leaflet加载多种形式谷歌地图(120)
  8. 联想全球首席技术官研究进一步增强其“新IT”愿景,塑造更智能的未来
  9. Flask从入门到做出一个博客的大型教程(五)
  10. 完整版教育研究方法(依据笔记整理)