【杂记-利用TCP协议传输数据始末详解】

一、三次握手前:

1、使用TCP协议的原因

TCP协议的目的是为了保证数据能在两端准确、连续的传输。
2、实现多设备传输的基础

TCP协议可使一个设备能同时与多个设备交互信息,它必须要保证不同传输通道之间不会产生串联或相互影响,所以TCP使用Socket数据结构来实现不同设备之间的连接。
3、Socket数据结构的作用

Socket包含两个成分:IP地址和端口号,一个设备可以对应一个IP,其中不同的传输通道用不同的端口号区分开来,于是同一个设备发送给其他不同设备的信息就不会产生混乱。
4、传输控制块TCB的产生

设备可能会产生多种数据并分发给不同的设备,为了确保数据能够正确分发:TCP使用TCB,也叫传输控制块的数据结构把发给不同设备的数据封装起来,该结构看做是信封。
5、TCB的结构

TCB数据块包含数据发送双方的Socket信息,以及装载数据的缓冲区。在两个设备要建立连接和发送数据之前,双方会分配内存建立起TCB数据块。
6、两者需做好准备

无论是客户端还是服务端,在建立连接前都需要准备好TCB数据结构。
7、客户端TCB主动打开

客户端主动向服务器表达自己想建立数据连接的请求,此时TCB状态为:Active Open(Create TCB)。
8、服务端TCB被动打开

由于服务器不知道有哪个设备想向它发起连接,因此在构建TCB模块时会默认将客户端对应的Socket数据初始化为0,服务器保持监听,等待客户端从该端口向它发起连接请求,此时TCB状态为:Passive Open(Create TCB)。
9、TCB已做好准备

双方把自己的Socket和TCB数据结构准备好后,就可以进入三次握手的过程。

二、三次握手时:

11、TCP协议终端两种数据包

一种数据包用来传输数据;一种数据包用来发送控制信息(SYN、ACK等),TCP报头中的标志位用于表明数据包是用于数据发送还是用于传输控制信息。

SYN:Synchronize,同步。

ACK:Acknowledge,确认。
12、TCP报头的标志位

当标志位中的SYN比特位启动时,表明当前数据包目的是实现双方数据状态同步。

当标志位中的ACK比特为启动时,表明数据包用于通知接收方已收到了数据。
13、为数据传输前做的准备

一是客户端通知服务器,"我想建立连接"。二是双方通知对方自己数据发送时的"初始序列号"。三是实现参数交换,把自己的有关信息发送给对方。
14、简述握手时过程

TCP三次握手只是建立连接的过程,和后续的数据传输关系不大。

客户端发送一个SYN数据包给服务端,其中包含了数据的初始序列号。

服务端收到数据包后回发一个SYN+ACK给客户端,其中包含了数据的初始序列号。

客户端收到数据包后,回发一个ACK包。

至此,握手过程结束,双方可以开始互发数据包。
15、初始序列号是随机数

为了防止由于网络波动等原因,先后接收到同一序列号导致握手异常,所以初始序列号是一个随机数,而不是每次都以1开始。
16、握手过程中的初始序列号

客户端把自己的初始化序列号放在SYN数据包中发送给服务端。

服务端收到来自客户端的数据包后,会将客户端的序列号的值加1,同时放入服务端自己的初始化序列号,回发SYN+ACK数据包。

当A收到数据后发送一个ACK数据包其中包含了B发过来的序列号加一后所得的数值
(待完成)

相关推荐
哲伦贼稳妥41 分钟前
一天认识一个硬件之机房地板
运维·网络·经验分享·其他
5967851541 小时前
DotNetty ChannelRead接收数据为null
tcp/ip·c#
hgdlip2 小时前
如何快速切换电脑的ip地址
网络·tcp/ip·电脑
程序员-珍4 小时前
虚拟机ip突然看不了了
linux·网络·网络协议·tcp/ip·centos
4647的码农历程4 小时前
Linux网络编程 -- 网络基础
linux·运维·网络
向李神看齐4 小时前
RTSP协议讲解
网络
Death2005 小时前
使用Qt进行TCP和UDP网络编程
网络·c++·qt·tcp/ip
虽千万人 吾往矣5 小时前
golang gorm
开发语言·数据库·后端·tcp/ip·golang
魏大橙5 小时前
linux RCE本地/公网测试
网络·网络协议·udp
陈逸轩*^_^*5 小时前
Java 网络编程基础
java·网络·计算机网络