第二十二期:动画讲解TCP,再不懂请来打我

TCP 三次握手过程对于面试是必考的一个,所以不但要掌握 TCP 整个握手的过程,其中有些小细节也更受到面试官的青睐。

 

前言

TCP 三次握手过程对于面试是必考的一个,所以不但要掌握 TCP 整个握手的过程,其中有些小细节也更受到面试官的青睐。

对于这部分掌握以及 TCP 的四次挥手,小鹿将会以动画的形式呈现给每个人,这样将复杂的知识简单化,理解起来也容易了很多,尤其对于一个初学者来说。

思维导图

TCP是什么

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

我们知道了上述了解到了 TCP 的定义,通俗一点的讲,TCP 就是一个双方通信的一个规范标准(协议)。

我们在学习 TCP 握手过程之前,首先必须了解 TCP 报文头部的一些标志信息,因为在 TCP 握手的过程中,会使用到这些报文信息,如果没有掌握这些信息,在学习握手过程中,整个人处于懵逼状态,也是为了能够深入 TCP 三次握手的原理。

TCP头部报文

1. source port 和 distination port

两者分别为「源端口号」和「目的端口号」。

源端口号就是指本地端口,目的端口就是远程端口。

一个数据包(pocket)被解封装成数据段(segment)后就会涉及到连接上层协议的端口问题。

可以这么理解,我们可以想象发送方很多的窗户,接收方也有很多的窗户,这些窗口都标有不同的端口号,源端口号和目的端口号就分别代表从哪个规定的串口发送到对方接收的窗口。不同的应用程度都有着不同的端口,之前网络分层的文章中有提到过。

扩展:

应用程序的端口号和应用程序所在主机的 IP 地址统称为 socket(套接字),IP:端口号, 在互联网上 socket 唯一标识每一个应用程序,源端口+源IP+目的端口+目的IP称为”套接字对“,一对套接字就是一个连接,一个客户端与服务器之间的连接。

2. Sequence Numbe

称为「序列号」。用于 TCP 通信过程中某一传输方向上字节流的每个字节的编号,为了确保数据通信的有序性,避免网络中乱序的问题。接收端根据这个编号进行确认,保证分割的数据段在原始数据包的位置。

再通俗一点的讲,每个字段在传送中用序列号来标记自己位置的,而这个字段就是用来完成双方传输中确保字段原始位置是按照传输顺序的。(发送方是数据是怎样一个顺序,到了接受方也要确保是这个顺序)

  • PS:初始序列号由自己定,而后绪的序列号由对端的
  • ACK 决定:SN_x = ACK_y (x 的序列号 = y 发给 x 的 ACK),这里后边会讲到。

3. Acknowledgment Numbe

称为「确认序列号」。确认序列号是接收确认端所期望收到的下一序列号。确认序号应当是上次已成功收到数据字节序号加1,只有当标志位中的 ACK 标志为 1 时该确认序列号的字段才有效。主要用来解决不丢包的问题。

若确认号=N,则表明:到序号N-1为止的所有数据都已正确收到。

在这里,现在我们只需知道它的作用是什么,就是在数据传输的时候是一段一段的,都是由序列号进行标识的,所以说,接收端每接收一段,之后就想要的下一段的序列号就称为「确认序列号」。

4. TCP Flag

TCP 首部中有 6 个标志比特,它们中的多个可同时被设置为 1,主要是用于操控 TCP 的状态机的,依次为URG,ACK,PSH,RST,SYN,FIN。

不要求初学者全部掌握,在这里只讲三个重点的标志:

(1) ACK

这个标识可以理解为发送端发送数据到接收端,发送的时候 ACK 为 0,标识接收端还未应答,一旦接收端接收数据之后,就将 ACK 置为 1,发送端接收到之后,就知道了接收端已经接收了数据。

 

此标志表示「应答域有效」,就是说前面所说的TCP应答号将会包含在 TCP 数据包中;

有两个取值:0 和 1,为 1 的时候表示应答域有效,反之为 0;

(2) SYN

表示「同步序列号」,是 TCP 握手的发送的第一个数据包。

用来建立 TCP 的连接。SYN 标志位和 ACK 标志位搭配使用,当连接请求的时候,SYN=1,ACK=0连接被响应的时候,SYN=1,ACK=1;这个标志的数据包经常被用来进行端口扫描。扫描者发送一个只有 SYN 的数据包,如果对方主机响应了一个数据包回来 ,就表明这台主机存在这个端口。看下面动画:

(3) FIN

表示发送端已经达到数据末尾,也就是说双方的数据传送完成,没有数据可以传送了,发送FIN标志位的 TCP 数据包后,连接将被断开。这个标志的数据包也经常被用于进行端口扫描。

这个很好理解,就是说,发送端只剩最后的一段数据了,同时要告诉接收端后边没有数据可以接受了,所以用FIN标识一下,接收端看到这个FIN之后,哦!这是接受的最后的数据,接受完就关闭了。动画如下:

 

5.  Window size

称为滑动窗口大小。所说的滑动窗口,用来进行流量控制。

为什么进行TCP三次握手?

第一,为了确认双方的接收与发送能力是否正常。第二,指定自己的初始化序列号,为后面的可靠传送做准备。第三,如果是 https 协议的话,三次握手这个过程,还会进行数字证书的验证以及加密密钥的生成到。

如果你了解 UDP 的话,TCP 的出现正式弥补了 UDP 不可靠传输的缺点。但是 TCP 的诞生,也必然增加了连接的复杂性。

TCP三次握手过程?

TCP 三次握手的过程掌握最重要的两点就是客户端和服务端状态的变化,另一个是三次握手过程标志信息的变化,那么掌握 TCP 的三次握手就简单多了。下面我们就以动画形式进行拆解三次握手过程。

初始状态:客户端处于closed 状态,服务器处于listen(监听) 状态。

第一次握手:客户端发送请求报文将SYN = j(1)初始化序列号发送给客户端,发送完之后客户端处于SYN_Send状态。

 

第二次握手:服务端受到 SYN 请求报文之后,如果同意连接,会以自己的SYN(服务端) = K(0)和ack(1) = SYN(客户端) + 1(ACK = 1)报文作为应答,服务器为SYN_Receive状态。

第三次握手:客户端接收到服务端的SYN + ACK,然后发送ack = SYN(服务端) + 1(ACK = 1)确认包作为应答,客户端转为established状态。

为什么不是一次、两次握手?

防止了服务器端的一直等待而浪费资源。

为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。如果此时客户端发送的延迟的握手信息服务器收到,然后服务器进行响应,认为客户端要和它建立连接,此时客户端并没有这个意思,但 server 却以为新的运输连接已经建立,并一直等待 client 发来数据。这样,server 的很多资源就白白浪费掉了。


阅读目录(置顶)(长期更新计算机领域知识)https://blog.csdn.net/weixin_43392489/article/details/102380691

阅读目录(置顶)(长期更新计算机领域知识)https://blog.csdn.net/weixin_43392489/article/details/102380882

阅读目录(置顶)(长期科技领域知识)https://blog.csdn.net/weixin_43392489/article/details/102600114

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/424929.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数据结构与算法】二分查找

一、什么是二分查找? 二分查找针对的是一个有序的数据集合,每次通过跟区间中间的元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间缩小为0。 二、时间复杂度分析? 1.时间复杂度 …

第七章 假设检验(3)

关于样本量n的取值 如果希望在控制第I类错误的情况下,同时限制第II类错误的,这个时候就需要考虑样本量。样本量越大,错误概率越低。使用OC曲线。 分布拟合检验 如果不知道总体服从什么类型的分布,就需要根据样本来检验分布的假设…

git 多用户多仓库配置

ssh全称是Secure Shell,即安全Shell,是一种可以进行安全远程登录的协议,在Linux中以OpenSSH为代表,Windows中则有Putty作为实现。ssh的会话建立阶段类似TCP协议的三次握手,里面涉及到利用非对称加密(RSA/DSA)和密码协商…

第二十三期:你用的Windows操作系统是不是盗版?微软知道吗

长期以来,一些小白对于微软操作系统的“正版”“盗版”“原版”的含义不太明确,从根本上说Windows原始版权属于微软,我们没有那个技术去开发盗版操作系统,很多人用的可能是二次修改的版本,而操作系统的激活方式&#x…

[Leetcode][第109题][JAVA][有序链表转换二叉搜索树][分治][快慢指针][中序遍历]

【问题描述】[中等] 【解答思路】 1. 分治 快慢指针 复杂度 class Solution {public TreeNode sortedListToBST(ListNode head) {return buildTree(head, null);}public TreeNode buildTree(ListNode left, ListNode right) {if (left right) {return null;}ListNode mid …

第四十六期:关于云存储的五大优势

5G时代,越来越多的企业开始选择在云上存储数据,对于IT部门来说,了解云存储的优势是很有必要的。今天给大家介绍云存储的五大优势,以及它们如何帮助用户解决一些常见IT问题。 1、可扩展性 传统存储系统以及横向扩展增加的节点&…

leetcode之回溯backtracing专题5

参考链接 http://blog.csdn.net/zhongkeli/article/details/6966805 https://leetcode.com/problems/permutation-sequence/#/description

第四十七期:毕业3年Java程序员,年薪20W,他是如何达到的?

Java架构师,首先要是一个高级java攻城狮,熟练使用各种框架,并知道它们实现的原理。jvm虚拟机原理、调优,懂得jvm能让你写出性能更好的代码;池技术,什么对象池,连接池,线程池…… Java架构师&…

【数据结构与算法】散列表

一、散列表的由来? 1.散列表来源于数组,它借助散列函数对数组这种数据结构进行扩展,利用的是数组支持按照下标随机访问元素的特性。 2.需要存储在散列表中的数据我们称为键,将键转化为数组下标的方法称为散列函数,散列…

第八章方差分析以及线性回归(1)

方差分析 方差分析是由英国统计学家Fisher在20世纪20年代提出的。  方差分析的目的是推断两个或者两个以上的总体均值是否有差异的显著性检验。 单因素方差分析 例子 保险公司为了了解某一险种在4个不同地区索赔额情况是否存在差异。收集了四个地区一年的索赔额记录。这四个…

react树状组件

最近在react项目中需要一个树状组件,但是又不想因为这个去引入一套UI组件,故自己封装了一个基于react的树状组件, 个人认为比较难得部分在于数据的处理,话不多说直接上代码: 下面是tree.js import React, {Component} …

第四十八期:只因写了一段爬虫,公司200多人被抓!

刚从朋友听到这个消息的时候,我有点不太相信,做为一名程序员来讲,谁还没有写过几段爬虫呢?只因写爬虫程序就被端有点夸张了吧。 作者:纯洁的微笑|2019-10-17 09:51 “一个程序员写了个爬虫程序,整个公司20…

[Leetcode][第647题][JAVA][回文子串][动态规划][中心扩展][Manacher 算法]

【问题描述】[中等] 【解答思路】 1. 暴力 首先明确如何判断一个字符串是否为回文字符串。第一个字符与最后一个字符相同,第二个字符与倒数第二个字符相同…关于中心位置轴对称。 本题要求一共有多少个回文子串,那么就需要判断,索引[i, j]的…

66-加一

给定表示非负整数的非空数字数组,加上整数的1。 存储数字使得最高有效数字位于列表的开头,并且数组中的每个元素包含单个数字。 您可以假设整数不包含任何前导零,除了数字0本身 例1: 输入: [1,2,3] 输出: […

玩转oracle 11g(52):Oracle导出导入表(.sql、.dmp文件)两种方法

提示:在导入sql和dmp文件之前,先建立用户,指明表空间。其中要注意用户名和表空间最好跟sql文件中的一样。 方法一:.sql文件的导出与导入 导出步骤 使用PL/SQL Developer登录你需要备份的数据库;选择工具->导出用…

第八章方差分析以及线性回归(2)

一元线性回归 变量间的关系 变量与变量之间的关系分为确定性关系和相关性关系。  确定性关系是指当自变量给定一个值的时候,就能计算出应变量的值。例如物体下落高度h与下落时间t的关系:h12gt2。  相关性关系是指变量之间的关系不确定,表…

Creating a Pulsing Circle Animation

Creating a Pulsing Circle Animation 原文 https://www.kirupa.com/animations/creating_pulsing_circle_animation.htm Outside of transitions that animate between states, we dont see a whole lot of actual animation in the many UIs we interact with. We dont have …

第四十九期:化繁为简的五种码农必备工具

如今,开发工具已成为了软件开发过程中必不可少的组成部分。本文将向您介绍当前软件开发市场上颇具影响力的五种化繁为简的码农必备工具。 不知您是否已经发现:那些以任务为中心的软件开发工作,会比独立的研究式开发复杂得多。针对软件产品的开…

【数据结构与算法】哈希算法

一、什么是哈希算法? 1.定义 将任意长度的二进制值串映射成固定长度的二进制值串,这个映射的规则就是哈希算法,而通过原始数据映射之后得到的二进制值串就是哈希值。 2.如何设计一个优秀的哈希算法? ①单向哈希: 从哈…

自然语言处理与文本检索

今天开始把翟成祥教授的文本检索课程做一下笔记。 说明:文章内容来源于课程视频和课程ppt。我只学习了课程没有做习题。文章不是翻译,是我对课程的理解。 nlp的主要内容 1 词语处理(lexical analysis part-of-speech tagging):分词与词性标…