深入理解TCP协议及其源代码
Posted ustczjce
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深入理解TCP协议及其源代码相关的知识,希望对你有一定的参考价值。
选择如下任一个问题,通过理论分析、源代码阅读和运行跟踪深入理解TCP协议完成一篇实验报告博客
- TCP协议的初始化及socket创建TCP套接字描述符;
- connect及bind、listen、accept背后的三次握手
- send和recv背后数据的首发过程
- close背后的连接终止过程
- 另外您也可以任选一个您感兴趣的角度比如封包构造和解析、拥塞控制、执行视图等来深入理解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协议及其源代码的主要内容,如果未能解决你的问题,请参考以下文章