[Linux]经典面试题 - 网络基础 - TCP三次握手

[Linux]经典面试题 - 网络基础 - TCP三次握手

目录
  • [Linux]经典面试题 - 网络基础 - TCP三次握手
    • 一、TCP报文格式
      • 1.1 TCP报头
      • 1.2 报文图例
    • 二、TCP三次握手
      • 2.1 运作方式
      • 2.2 建立过程
      • 2.3 抓包分析
    • 三、TCP四次挥手
      • 3.1 断开过程

参考:文章地址https://www.yii666.com/article/754012.html

  • TCP报头 - 维基百科,自由的百科全书 (wikipedia.org)

  • TCP三次握手与四次挥手 - 维基百科,自由的百科全书 (wikipedia.org)

  • TCP握手挥手的千层套路_技术交流_牛客网 (nowcoder.com)文章来源地址:https://www.yii666.com/article/754012.html

一、TCP报文格式

1.1 TCP报头

[Linux]经典面试题 - 网络基础 - TCP三次握手

TCP的报头有20字节,一共160位,其中包括以下内容:

  • 源端口号(16位):发起连接端口。
  • 目的端口号(16位):接受连接端口。
  • 序列号(seq,32位):
    • 如果含有同步化旗标(SYN),则此为最初的序列号;第一个资料比特的序列码为本序列号加一。
    • 如果没有同步化旗标(SYN),则此为第一个资料比特的序列码。
  • 确认号(ack,32位):仅当ACK标志为1时有效,确认号表示期望收到的下一个字节的序号。
  • 资料偏移(4位):以4字节为单位计算出的数据段开始地址的偏移值。
  • 保留(6位):置零。
  • 标识符(6位):
    • URG:1,紧急指针字段有效。
    • ACK:1,确认号字段有效。
    • PSH:1,接收方应尽快将报文交给引用层。
    • RST:1,出现严重差错,可能要重新创建TCP请求。
    • SYN:1,表示这是连接请求或是连接接受请求,用于创建连接和使顺序号同步。
    • FIN:1,表示发送方没有数据要传输了,要求释放连接。
  • 窗口(window,16位):表示从确认号开始,本报文的发送方可以接收的字节数,即接受窗口

    的大小,用于流量控制。
  • 校验和(checksum,16位):对整个的TCP报文段,包括TCP头部和TCP数据,以16位字进行计算所得。这是一个强制性的字段。
  • 紧急指针(16位):本报文段中的紧急数据的最后一个字节的序号。

1.2 报文图例

[Linux]经典面试题 - 网络基础 - TCP三次握手

二、TCP三次握手

2.1 运作方式

  • TCP协议的运行可以分为三个阶段:连接建立、数据传送、连接中止文章来源地址https://www.yii666.com/article/754012.html

  • 操作系统将TCP连接抽象为套接字表示的本地端点,作为编程接口给程序用。

  • 一对终端同时初始化一个它们之间的连接是可能的。但通常是由一端(服务器端)打开一个套接字(socket)然后监听来自另一方(客户端)的连接,这就是通常所指的被动打开。服务器端被被动打开以后,客户端就能开始创建主动打开。网址:yii666.com

  • 服务器端执行了listen函数后,就在服务器上创建起两个队列:

    • SYN队列:存放完成了二次握手的结果。
    • ACCEPT队列:存放完成了三次握手的结果。

2.2 建立过程

[Linux]经典面试题 - 网络基础 - TCP三次握手

为了保证数据能够到达目标,TCP采用三次握手的策略,过程如下:网址:yii666.com<

  1. 客户端向服务端发送一个SYN包,请求一个主动打开。该包携带客户端为这个连接请求而设定的随机数A作为消息序列号。
  2. 服务端收到一个合法的SYN包后,把该包放入SYN队列中;回送一个SYN/ACK。ACK的确认码应为A+1,SYN/ACK包本身携带一个随机产生的序列号B
  3. 客户端收到SYN/ACK包后,发送一个ACK包,该包的序号被设定为A+1,而ACK的确认码为B+1

2.3 抓包分析

(待补充)

三、TCP四次挥手

3.1 断开过程

[Linux]经典面试题 - 网络基础 - TCP三次握手

断开过程如下:

  1. 主动断开方(客户端/服务端)-发送一个 FIN,用来关闭主动断开方(客户端/服务端)到被动断开方(客户端/服务端)的数据传送
  2. 被动断开方(客户端/服务端)-收到这个 FIN,它发回一 个 ACK,确认序号为收到的序号加1 。和 SYN 一样,一个 FIN 将占用一个序号
  3. 被动点开方(客户端/服务端)-关闭与主动断开方(客户端/服务端)的连接,发送一个FIN给主动断开方(客户端/服务端)
  4. 主动断开方(客户端/服务端)-发回 ACK 报文确认,并将确认序号设置为收到序号加1

版权声明:本文内容来源于网络,版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。文本页已经标记具体来源原文地址,请点击原文查看来源网址,站内文章以及资源内容站长不承诺其正确性,如侵犯了您的权益,请联系站长如有侵权请联系站长,将立刻删除

[Linux]经典面试题 - 网络基础 - TCP三次握手-相关文章

  1. [Linux]经典面试题 - 网络基础 - TCP三次握手

  2. Nginx开发从入门到精通 学习目录分享学习 (阿里著作)

  3. Linux运维相关目录

  4. Wireshark基本介绍和学习TCP三次握手(转)

  5. SSL/TLS 握手过程详解

  6. HTTP请求过程-域名解析和TCP三次握手建立链接

  7. Linux和Shell回炉复习系列文章总目录

  8. 脑残式网络编程入门(一):跟着动画来学TCP三次握手和四次挥手

    、引言网络编程中TCP协议的三次握手和四次挥手的问题,在面试中是最为常见的知识点之一。很多读者都知道“三次”和“四次”,但是如果问深入一点,他们往往都无法作出准确回答。本篇文章尝试使用动画图片的方式,来对这个知识点进行“脑残式”讲解(哈哈),期望

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信图片_20190322181744_03.jpg

微信扫一扫打赏

请作者喝杯咖啡吧~

支付宝扫一扫领取红包,优惠每天领

二维码1

zhifubaohongbao.png

二维码2

zhifubaohongbao2.png