关于前端:jsliang-求职系列-27-TCP

31次阅读

共计 3566 个字符,预计需要花费 9 分钟才能阅读完成。

一 目录

不折腾的前端,和咸鱼有什么区别

目录
一 目录
二 前言
三 UDP 连贯
四 TCP 连贯
 4.1 建设连贯阶段
  4.1.1 三次握手过程
  4.1.2 问题:两次握手不行吗?
  4.1.3 问题:三次握手过程中能够携带数据吗?
 4.2 传输数据阶段
 4.3 断开连接阶段
  4.3.1 四次挥手过程
  4.3.2 问题:为什么须要四次挥手
五 TCP 和 UDP 的区别
六 参考文献

二 前言

返回目录

面试官问:你晓得三次握手和四次挥手吗,能不能讲讲其中过程?为什么不能两次握手?还有为什么要四次挥手才断开连接呢?

三 UDP 连贯

返回目录

用户数据包协定(User Datagram Protocol),简称 UDP,是基于 IP 之上开发能和利用打交道的协定。

UDP 中一个最重要的信息是端口号,端口号其实就是一个数字,每个想拜访网络的程序都须要绑定一个端口号。

通过端口号 UDP 就能把指定的数据包发送给指定的程序了,所以通过 IP 地址信息把数据包发送给指定的电脑,而 UDP 通过端口号把数据包分发给正确的程序。

UDP 传输缺点:

  • 数据包在传输过程容易失落
  • 大文件传输中,UDP 并不知道如何组成这些数据包,不晓得如何还原成残缺的文件。

虽说 UDP 不能保证数据可靠性,然而传输速度却十分快,所以 UDP 会利用在一些关注速度、但不那么严格要求数据完整性的畛域,如在线视频、互动游戏等。

四 TCP 连贯

返回目录

TCP(Transmission Control Protocol,传输控制协议)是一种面向连贯的、牢靠的、基于字节流的传输层通信协议。

TCP 绝对于 UDP 有 2 个特点:

  • 对于数据包的失落,建设重传机制
  • TCP 引入数据包排序机制,用来保障把乱序的数据包组合成一个残缺的文件

在一个 TCP 连贯中,会有 3 个过程。

4.1 建设连贯阶段

返回目录

这个阶段是通过“三次握手”来建设客户端和服务器之间的连贯。

TCP 提供面向连贯的通信传输。面向连贯是指数据通讯开始先做好两端之间的筹备工作。

所谓 三次握手 ,是指在建设一个 TCP 连贯时,客户端和服务器总共要发送 3 个数据包来确认连贯的建设。

三次握手次要作用是:

  • 确认单方的接管能力和发送能力
  • 指定本人的初始化序列号,为前面的可靠性做筹备

4.1.1 三次握手过程

返回目录

刚开始客户端处于 Closed 的状态,服务器处于 Listen 状态。

  1. 客户端发送到服务器 。客户端发送 SYN 报文给服务器,并且指明客户端初始化序列号为 ISN(c),即以 SYN=1, seq=x 的模式发送过来。此时客户端处于 SYN_SEND 状态。
  2. 服务器发送给客户端 。服务器收到客户端的 SYNISN(c),也发送一个 SYN 回去,同时设置 ACK = ISN(c) + 1 以及指明服务器初始化序列号为 ISN(s),即以 SYN=1, ACK=x+1,seq=y 的模式发送给客户端。
  3. 客户端发送到服务器 。客户端收到服务器发送的音讯后,设置 ACK = ISN(s) + 1,将本身的 ISN(c) + 1,即以 ACK=y+1, seq=x+1 的模式发送给服务器。此时客户端处于 ESTABLISHED 阶段,服务器收到报文,也处于 ESTABLISHED 阶段,单方建设了连贯。

图片来源于知乎,懒得重画,水印保留,如侵即删

4.1.2 问题:两次握手不行吗?

返回目录

三次握手的目标:

  1. 客户端发送数据给服务器,服务器确认本人能够承受客户端的申请。
  2. 服务器发送数据给客户端,客户端确认本人能够发送数据给服务器,也能够承受到服务器的申请。
  3. 客户端发送数据给服务器,服务器确认本人能够发送数据给客户端。

如果采纳两次握手,客户端发送数据给服务器,服务器确认后就当连贯开始:

  1. 客户端发送一次申请给服务器……指定工夫后没响应再发了一个
  2. 服务器先接管到后一个建设连贯的申请,而后前一个建设连贯的申请,因为网络提早等问题,在第二个之后达到了
  3. 服务器认为第二个申请是最新发的,于是向客户端发送确认报文段,批准建设连贯,于是连贯建设了(两次握手)
  4. 这时候客户端还在期待最新的申请连贯(第二次申请),主动疏忽服务器发送的对于第一个申请连贯的响应,也不发送数据
  5. 服务器始终期待客户端发送数据,服务器资源被占用

简略来说:

 客户端 -> 1 -> 服务器
客户端 -> 2 -> 服务器
服务器 get 1
服务器 get 2
服务器 reply 1
客户端 wait 2
gg

所以才须要三次握手而不是两次握手。

4.1.3 问题:三次握手过程中能够携带数据吗?

返回目录

答案:第三次握手的时候能够携带,第一第二次不能够携带。

起因:如果第一次能够携带数据的话,有可能是歹意攻打服务器。这时候开释大量的数据,不理睬服务器的的承受能力,让服务器破费很多工夫、内存空间接管报文。

第三次握手的时候,客户端处于 ESTABLISHED 状态了,它能够建设连贯并且晓得服务器的接管、发送能力是失常的,所以能够携带数据了。

4.2 传输数据阶段

返回目录

此时客户端和服务器都处于 ESTABLISHED 状态。

这个阶段中,接收端须要对每个数据包进行确认操作。即接收端在接管到数据包之后,须要发送确认数据包给发送端。

如果发送端在规定工夫内没有接管到接收端的反馈确认音讯,那么判断丢包(数据包失落),从而触发本身的重发机制。

一个大的文件在传输过程中会被拆分为多个小的数据包,接收端依照 TCP 头中的序号进行排序,保障组成残缺的数据。

4.3 断开连接阶段

返回目录

数据传输结束之后,须要终止连贯,通过 四次挥手 来保障单方都能断开连接。

4.3.1 四次挥手过程

返回目录

  • 客户端发送给服务器 。客户端以 FIN=1, seq=u 的模式发送给服务器,示意须要敞开客户端和服务器的数据传输。此时客户端处于 FIN_WAIT 状态。
  • 服务器发送给客户端 。服务器收到信息,先返回 ACK 给客户端,即以 ACK=1, seq=v, ack=u+1 的模式返回给客户端,示意收到客户端报文了。此时服务器处于 CLOST_WAIT 状态。
  • 服务器发送给客户端 。服务器期待一会,看客户端还有没有数据没发过来,等解决完这些数据之后,也想断开连接了,于是发送 FIN 给客户端,即以 FIN=1, ACK=1, seq=w, ack=u+1 的模式发送给客户端。此时服务器处于 LAST_ACK 状态。
  • 客户端发送给服务器 。客户端收到 FIN 之后,返回 ACK 报文作为应答,即以 ACK=1, seq=w+1 的模式发送给服务器。此时客户端处于 TIME_WAIT 状态。

过一阵子之后,客户端确保服务器收到本人的 ACK 报文了,则变成 CLOSED 状态。服务器承受到 ACK 报文之后,就也处于 CLOSED 状态了。

图片来源于知乎,懒得重画,水印保留,如侵即删

4.3.2 问题:为什么须要四次挥手

返回目录

因为服务器接管到客户端的敞开申请之后。

如果有一些数据因为网络提早等问题没有发送到,那么它间接敞开会导致这些数据没有接管到;亦或者服务器也有一些数据要发送给客户端,要确保这些数据发送完。

咱们晓得 TCP 是个牢靠的棒小伙,所以它才会第一次回复客户端收到敞开连贯的申请了,第二次回复客户端你发送的数据应该没提早了,我也发送完我要发送的数据了,能够敞开了。

最初客户端接管到了,回复通知服务器它也能够敞开了,而后过一阵子确保服务器接管到它发的 ACK 报文之后,也处于 CLOSED 状态了。

五 TCP 和 UDP 的区别

返回目录

  • TCP 是面向连贯的,UDP 是无连贯的即发送数据前不须要先建设链接。
  • TCP 提供牢靠的服务。也就是说,通过 TCP 连贯传送的数据,无差错,不失落,不反复,且按序达到;UDP 尽最大致力交付,即不保障牢靠交付。并且因为 TCP 牢靠,面向连贯,不会失落数据因而适宜大数据量的替换。
  • TCP 是面向字节流,UDP 面向报文,并且网络呈现拥塞不会使得发送速率升高(因而会呈现丢包,对实时的利用比方 IP 电话和视频会议等)。
  • TCP 只能是 1 对 1 的,UDP 反对 1 对 1,1 对多。
  • TCP 的首部较大为 20 字节,而 UDP 只有 8 字节。
  • TCP 是面向连贯的可靠性传输,而 UDP 是不牢靠的。

六 参考文献

返回目录

  • [x] 面试官,不要再问我三次握手和四次挥手【浏览倡议:1hour】
  • [x] 对于三次握手与四次挥手面试官想考咱们什么【浏览倡议:20min】
  • [x] 艰深大白话来了解 TCP 协定的三次握手和四次离别【浏览倡议:20min】
  • [x] TCP 协定详解【浏览倡议:40min】
  • [x] 面试时,你被问到过 TCP/IP 协定吗?【浏览倡议:20min】
  • [x]“三次握手,四次挥手”你真的懂吗?【浏览倡议:20min】

jsliang 的文档库由 梁峻荣 采纳 常识共享 署名 - 非商业性应用 - 雷同形式共享 4.0 国内 许可协定 进行许可。<br/> 基于 https://github.com/LiangJunrong/document-library 上的作品创作。<br/> 本许可协定受权之外的应用权限能够从 https://creativecommons.org/licenses/by-nc-sa/2.5/cn/ 处取得。

正文完
 0