目录

  • HCIA所有内容:
  • TCP(传输控制协议)
    • TCP报文段结构:
      • 序号和确认号
        • 序号
        • 确认号
    • 三次握手全过程
      • 第一次握手:
      • 第二次握手:
      • 第三次握手:
        • 补充:
    • 面试中可能问到的问题
      • 1.三次握手中,第一次握手丢失了
      • 2.三次握手中,第二次握手丢失了
      • 3.三次握手中,第三次握手丢失了
      • 4.为什么两次握手不可以呢
      • 5.为什么不需要四次握手?
      • 6.服务端端收到客户端的 SYN 后,为什么还要传回 SYN?
      • 7.传了 SYN,为什么还要传 ACK?

HCIA所有内容:

1、七层参考模型及IP讲解
2、TCP三次握手讲解
3、TCP四次挥手讲解及抓包分析
4、DHCP协议讲解及抓包分析
5、静态综合实验讲解
7、静态路由讲解
8、RIP路由信息协议讲解
9、动态路由协议讲解
10、抓包进行分析RIP以及OSPF的包
11、动态路由OSPF配置综合实验讲解
12、Vlan虚拟局域网技术讲解
13、ACL访问控制列表讲解
14、NAT技术讲解
15、网络综合实验讲解

TCP(传输控制协议)

名字得知肯定传输层协议。
面向连接: 因为在一个应用进程开始向另一个应用进程发送数据之前,这两个进程必须先相互“握手”,也就是说它们必须相互发送某些预备报文段,来确保数据传输的参数。
提供全双工服务: 如果一台主机上的进程A与另一台主机上的进程B存在一条TCP连接,那么应用层数据就可在从进程B流向进程A的;同时,也从进程A流向进程B。
点对点连接: 单个发送方与单个接收方之间的连接。

TCP报文段结构:

TCP为每块客户数据配上一个TCP首部,从而形成多个TCP报文段。
TCP报文段由首部字段和一个数据字段组成,数据字段包含一块应用数据。

由上图可知,TCP与UDP相同,首部都包含源端口号以及母的端口号。
(用于多路复用/分解来自或送到上层应用的数据)
同时都包含了检验和字段。
32比特的序号字段以及32比特的确认号字段:
用来实现可靠数据传输服务。
16比特的接受窗口字段: 用于流量控制。
4比特的首部长度字段: 指示了以32比特的字为单位的TCP首部长度。
由于TCP选项字段的原因,TCP首部的长度是可变的,通常情况下,选项字段为空,所以TCP首部的典型长度为20字节。
可选与变长的选项字段: 用于发送方与接收方协商最大报文长度(MSS)时,或在高速网络环境下用作窗口调节因子时使用。
6比特的标志字段 ACK比特用于指示确认字段中的值是有效的,即该报文段包括一个对已被成功接收报文段的确认。

序号和确认号

序号

TCP报文段首部中两个最重要的字段是序号字段和确认号字段,是TCP可靠传输服务的关键部分。
TCP把数据看成一个无结构的,有序的字节流
一个报文段的序号 是报文段首字节的字节流编号。
举个例子:数据流由一个包含40000字节的文件组成,其MSS为1000字节,数据流的首字节编号为0。
MSS: 最大报文段长度(不包含首部)
那么,该TCP就会为数据流构建500个报文段,给第一个报文段分配序号0,第二个报文段分配序号1000,第三个报文段分配序号2000,那么每个序号被填入相应的TCP报文段首部的序号中。

确认号

首先TCP是全双工的,那么两个主机之间肯定可以相互发送且接收数据(都是同一条TCP连接的一部分)。
主机A填充报文段的确认号是主机A期望从主机B收到的下一字节的序号。

三次握手全过程


首先, TCP采用三次握手的目的:
1.要使每一方能够确知对方的存在。
2.要允许双方协商一些参数。
比如:最大报文段长度,最大窗口大小,服务质量等。
3.能够对传输实体资源进行分配。
比如:缓存大小,连接表中的项目等

假定左边主机为客户端s,右边为服务端c

第一次握手:

主机A向主机B发送TCP连接请求数据包,其中包含了主机A的初始序列号seq=x(随机生成的)。
其中报文中同步标志位SYN=1,ACK=0:
表示这是一个TCP连接请求数据报文;
序列号seq=x:
表明传输数据时的第一个数据字节的序号为x。

第二次握手:

主机B收到了主机A的请求后,会发回连接确认数据包。(其实这就好比加上一个陌生人的微信,然后大多数人第一句都是你好,进行回复,也算是一种“机制协议”)
其中,确认报文段中,标识位SYN=1,ACK=1:
表示这是一个TCP连接响应的数据报文,其中包含了主机B的初始序列号,seq=y,以及主机B对主机A初始序号的确认号ack=seq+1=x+1

第三次握手:

主机A收到主机B的确认报文后,还需要做出确认,也就是发送一个序列号,seq=x+1,确认号为ack=y+1的报文。此时,主机B收到主机A的回复后,就可以数据传输了。

补充:

ACK: (Acknowledgment fieldsignificant)置1时表示确认号(AcknowledgmentNumber)为合法,为0的时候表示数据段不包含确认信息,确认号被忽略。
SYN: (Synchronize sequence numbers)用来建立连接,在连接请求中,SYN=1,ACK=0,连接响应时,SYN=1,ACK=1。即,SYN和ACK来区分Connection Request和Connection Accepted。

面试中可能问到的问题

1.三次握手中,第一次握手丢失了

当客户端C和服务器S建立连接的时候,第一步客户端会发出一个SYN报文包含客户端的初始的序列号,如果说SYN报文中间传输丢失的话,那么这个时候客户端收不到服务端应该传输的SYN-ACK报文,就会触发重传机制,重传SYN报文,并且重传的SYN报文的客户端序列号是不变的。

2.三次握手中,第二次握手丢失了

首先明白第二次握手的意义,就是服务器给客户端回复SYN-ACK的过程,而且第二次握手的报文中包含了客户端的第一次ACK的确认报文。
如果客户端并没有收到服务端发送的SYN-ACK的话,那么客户端就会认为自己发送的SYN丢失,于是继续重传SYN。不过,第二次握手的报文中还包含服务端回复给客户端的SYN。
当服务端发送完SYN-ACK后,它就会开始还等待接收客户端发送的ACK,不过,第二次握手的包已经丢失了,收不到ACK,所以这个时候服务端认为自己所发送的报文丢失了,就会重传SYN-ACK。

客户端:当客户端达到一定重传次数时,依旧没有收到来自服务端的连接确认数据包,此时就会断开连接。
服务端: 服务端和客户端一样,不过,它等待的是客户端的第三次握手的确认报文。

3.三次握手中,第三次握手丢失了

当客户端收到服务端的SYN-ACK报文后,就会给服务端发送一个ACK报文,而第三次握手的ACK是对第二次握手的SYN的确认报文,所以当第三次握手丢失后,服务端接收不到客户端发送的ACK,就会认为发送的SYN-ACK丢失了,从而触发超时重传机制,重传SYN-ACK。

4.为什么两次握手不可以呢

为了防止已经失效的连接请求报文段突然又传送到了 B,因而产生错误。
例如:A 发出的第一个连接请求报文段并没有丢失,而是在网路结点长时间滞留了,以致于延误到连接释放以后的某个时间段才到达 B。本来这是一个早已失效的报文段。但是 B 收到此失效的链接请求报文段后,就误认为 A 又发出一次新的连接请求。于是就向 A 发出确认报文段,同意建立连接。
如果不进行第三次握手: B 发出确认后就认为新的运输连接已经建立了,并一直等待 A 发来数据。B 的许多资源就这样白白浪费了。如果采用了三次握手: 由于 A 实际上并没有发出建立连接请求,所以不会理睬 B 的确认,也不会向 B 发送数据。B 由于收不到确认,就知道 A 并没有要求建立连接。

5.为什么不需要四次握手?

首先,完全可靠的通信协议是不存在的。
在经过三次握手之后,客户端和服务端已经可以确认之前的通信状况,都收到了确认信息。所以即便再增加握手次数也不能保证后面的通信完全可靠,所以是没有必要的。

6.服务端端收到客户端的 SYN 后,为什么还要传回 SYN?

接收端传回发送端所发送的 SYN 是为了告诉发送端,我接收到的信息确实就是你所发送的信号了。
SYN 是 TCP / IP 建立连接时使用的握手信号。
在客户机和服务器之间建立正常的 TCP 网络连接时,客户机首先发出一个 SYN 消息,服务器使用 SYN-ACK 应答表示接收到了这个消息,最后客户机再以 ACK1 消息响应。
这样在客户机和服务器之间才能建立起可靠的 TCP 连接,数据才可以在客户机和服务器之间传递。

7.传了 SYN,为什么还要传 ACK?

双方通信无误必须是两者互相发送信息都无误。 传了 SYN,证明发送方到接收方的通道没有问题,但是接收方到发送方的通道还需要 ACK 信号来进行验证。


  1. 确认字符,在数据通信传输中,接收站发给发送站的一种传输控制字符。它表示确认发来的数据已经接受无误。 ↩︎

HCIA——TCP及其三次握手,问题相关推荐

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

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

  2. java tcp 三次握手_用Java代码分析TCP的三次握手四次挥手过程

    (1)客户端发送一个带SYN标志的TCP报文到服务器.这是三次握手过程中的报文1. (2) 服务器端回应客户端的,这是三次握手中的第2个报文,这个报文同时带ACK标志和SYN标志.因此它表示对刚才客户 ...

  3. 在深谈TCP/IP三步握手四步挥手原理及衍生问题—长文解剖IP

    如果对网络工程基础不牢,建议通读<细说OSI七层协议模型及OSI参考模型中的数据封装过程?> 下面就是TCP/IP(Transmission Control Protoco/Interne ...

  4. wireshark抓包理解TCP的三次握手

    一.实验目的 通过wireshark抓包工具,抓取客户机访问FTP服务器的连接过程进一步理解TCP的三次握手 二.实验拓扑 三.实验步骤 1.根据拓扑图搭建实验环境. 2.在客户机上安装安装Wires ...

  5. 简析TCP的三次握手与四次分手【转】

    转自 简析TCP的三次握手与四次分手 | 果冻想 http://www.jellythink.com/archives/705 TCP是什么? 具体的关于TCP是什么,我不打算详细的说了:当你看到这篇 ...

  6. 为什么有TCP 的三次握手 和 四次挥手

    由于我们的设备上的通信程序很直接,所以当时没有仔细想过TCP的三次握手和四次挥手这个问题,有的时候自己写的时候 会忘掉这个问题,就是为什么会有三次握手的过程和4次挥手的过程 简单来说就一句话 &quo ...

  7. 【转】简述TCP的三次握手过程

    [转]简述TCP的三次握手过程 TCP握手协议 在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接.第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入S ...

  8. 5.3 计算机网络传输层之TCP协议(tcp协议特点、tcp报文段首部格式、tcp连接---三次握手、tcp连接释放---四次握手)

    文章目录 1.TCP协议特点 2.TCP报文段的首部格式 3.TCP连接管理 (1)连接的建立 - - - 三次握手 (2)SYN泛洪攻击 4.TCP连接释放----四次握手 5.TCP连接建立和释放 ...

  9. TCP的三次握手和四次挥手的过程?

    TCP的三次握手和四次挥手的过程? 如下2幅图 如下2幅图

最新文章

  1. BAT集体告别中台上半场!接下来,中台怎么玩?
  2. python使用matplotlib可视化线图(line plot)、自定义可视化图像的四个边框的色彩、可以分别设置矩形每一条边的色彩(change the axis color)
  3. 什么是以太网?—Vecloud微云
  4. 6 获取数组中最小值_C语言每日一练8——数组中最大值和最小值
  5. sklearn自学指南(part57)--协方差估计
  6. vnr光学识别怎么打开_干货|指纹锁的指纹识别模块的前世今生,智能锁的指纹识别到底有多智能?...
  7. LDAP命令介绍---dsreplication--enable:DISABLE
  8. linux文件操作命令介绍(一)
  9. 正确理解springboot的常用注入方式
  10. [深入浅出WP8.1(Runtime)]文本框(TextBox)
  11. Linux基本信息查看命令
  12. Java反射原理与Class类(详解)
  13. 引用阿里图标库(iconFont)的三种方式
  14. 【程序员小助手】Emacs,最强编辑器,没有之一
  15. 如何轻松使用阿里云得矢量图标库
  16. tf.keras入门系列(一)
  17. python赋值语句
  18. 安全运维和安全运营的区别
  19. Solr与mysql数据同步
  20. maven安装及环境部署(IDEA)

热门文章

  1. matlab绘制累计频率曲线图,累积频率曲线怎么画,怎么画累计曲线图
  2. hfs2.3中文版快速搭建http文件下载服务器系统——墨涩网
  3. 收藏张老三的NHibernate 博客园专题之一
  4. Spring Boot打包跳过单元测试
  5. OKR:打破组织中的沟通壁垒
  6. Asterisk AGI 详解
  7. 手写一个迷你版的 Tomcat 喵
  8. 极客日报:小米计划3年内成为全球第一;谷歌计划在韩国开放第三方支付;Firefox 94发布
  9. Mysql——双机同步
  10. Storm_Storm主要特点