TCP入门与实例讲解 (2)

比如,服务端发送给客户端的TCP报文段中,确认序号是701,窗口字段(Window Size)是1000,表明服务端能够接受客户端发来的,序号从701开始的1000字节数据。

Checksum(校验和):16位

发送端对TCP首部、数据进行CRC运算得出的结果。接收端收到数据后,对接收到的TCP报文段的首部、数据进行CRC运算,并跟TCP首部中的校验和进行对比,确保数据在传输过程中没有损坏。

计算、校验规则这里先不展开。

Urgent Pointer(紧急指针):16位

仅在URG=1时才生效,它的值是一个偏移量,和序号字段中的值相加得到紧急数据最后一个字节的序号。

options(可选字段):大小不固定

最常见的可选字段是MSS(Maximum Segment Size),表示最长报文大小,通信双方通常在连接的第一个报文段中指明这个选项。(只能出现在SYN报文中)

建立连接 vs 断开连接

TCP的两段正式开始传输数据前,需要先建立连接。一旦数据传输完成,则需要断开连接。

后面章节中,会通过实际例子说明TCP数据传输的完整生命流程。在这之前,先简单介绍下TCP是如何建立连接以及断开连接的,也就是我们所熟悉的3次握手以及4次挥手。

这里留几个问题给读者朋友:

建立连接的主要目的是什么?做了哪些事情?

建立连接为什么是3次握手,可不可以是2次?

断开连接一定要4次挥手吗?

Seq => Sequence Number,Ack => Acknowledgment Number,[SYN] => 控制标志SYN,[ACK] => 控制标志ACK

建立连接

一般情况下,握手流程如 所示,主要做了两件事情:

互相确认对方当前可以建立连接

互相交换确认初始序列号(ISN)

TCP入门与实例讲解

断开连接

一般情况下,TCP断开连接需要4次挥手。假设 TCP A 主动断开连接,流程如下。主要就是告知对方,自己准备断开连接了,并且等待对方的确认。

TCP入门与实例讲解

从实例看TCP生命周期

在这一小节,会通过例子,阐述TCP从建立连接,到数据传输,到最后断开连接的整个过程,并通过wireshark抓包探究一些通信的细节。

首先,打开wireshark监听网络请求。然后,在终端输入如下命令发送HTTP请求。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyydjx.html