首页 > 其他 > 详细

深入理解TCP协议及其源代码

时间:2019-12-24 19:40:47      阅读:230      评论:0      收藏:0      [点我收藏+]

深入理解TCP协议及其源代码

前言

在前面实验我们分别实现了Socket 通信工具,探讨了Socket API、Socket 调用原理等。但是还没有针对某一实例进行讲解,在本实验我们将针对TCP协议进行详细分析,期待在Linux内核进行分析TCP原理。

1.Tcp基本原理

TCP是一种面向连接、可靠、基于字节流的传输协议,位于TCP/IP模型的传输层。

  • 面向连接:不同于UDP,TCP协议需要通信双方确定彼此已经建立连接后才可以进行数据传输;
  • 可靠:连接建立的双方在进行通信时,TCP保证了不会存在数据丢失,或是数据丢失后存在拯救丢失的措施;
  • 字节流:实际传输中,不论是何种数据,TCP都按照字节的方式传输,而非以数据包为单位。

针对它的这三种特性,本小节我们将对其原理进行探究。

1.1面向连接(三次握手)

技术分享图片

  • 第一次握手。如图,TCP双方在进行连接时首先由Client(客户端)发起连接请求,请求中附带连接参数,包括随机数字起点Seq(预防传输时字节序列被预测收到攻击),连接请求标志位SYN(占用1字节序号)等。
  • 第二次握手:当Server(服务器)分配资源打开监听请求,收到客户端请求后,对请求头进行解析。若连接建立成功则分配相应资源,并返回针对客户端请求的确认报文,其中响应报文头部参数包括:连接建立标志位SYN、Server端针对该通信过程的随机Seq、针对该请求的确认号ack、可附加接收窗口大小信息等。
  • 第三次握手。客户端收到服务端的确认连接请求后将会发送对该确认请求的确认(简单来说也就是A请求B,B告诉A准许,A再告诉B我知道你准许了),试想若不对该请求进行响应那么服务端将白白分配资源并等待。
    若以上三次握手都没问题则连接建立,在第三次握手的时候即可开始传送数据。

    1.2可靠

2.基本原理探究

在上次实验,我们通过追踪qemu底层的sys_call入口观察系统态和内核态之间的联系,理清了系统层面是怎样对底层接口进行调用的。在本小节,详细分析一下TCP协议在内核中的基本原理。

TCP协议的初始化及socket创建TCP套接字描述符

技术分享图片
如图所示,上面展示了TCP调用系统内核中的相关函数进行资源分配和通信。经过上次实验对qemu的跟踪不难发现建立连接时在服务端经历了socket()->bind()->listen()->accept()四个步骤,在accet() 函数之后会等待客户端的连接建立请求。

深入理解TCP协议及其源代码

原文:https://www.cnblogs.com/xshun/p/12093145.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!