动手学习TCP:TCP连接建立与终止,它是一个面向连接的协议

本文详细探讨了TCP连接的建立和终止,包括三次握手和四次挥手。讲解了TCP首部的重要字段,如Sequence Number和Acknowledgement Number,并强调了Initial Sequence Number的初始化。还提到了TCP连接建立和终止过程中的关键点,以及通过Pcap.Net进行TCP实验的操作步骤。
摘要由CSDN通过智能技术生成

TCP是一个面向连接的协议,任何一方在发送数据之前,都必须先在双方之间建立一条连接。所以,本文就主要看看TCP连接的建立和终止。

在开始介绍TCP连接之前,先来看看TCP数据包的首部,首部里面有很多重要的字段,在我们实现程序的时候需要进行设置。

TCP的首部

在OSI七层模型中,上层的数据包都会作为下层数据包的数据部分(payload)。

也就是说,当构造TCP数据包的时候,会把应用层的数据包作为TCP包的数据部分,然后加上TCP头构成TCP数据包;同样,当构造IP数据包的时候,整个TCP包就会被当作数据部分,然后加上IP头构成IP数据包。

TCP头的数据格式如下,在不包括可选字段的情况下,一般TCP头会占用20个字节。

在TCP首部中,有几个字段是需要关注一下:

  • 在TCP首部中没有源和目标的IP、MAC地址(IP和MAC地址分别是网络层和链路层首部的信息),只有源和目标的端口
  • Sequence Number是包的序号,网络层(IP层)的传输是不可靠的,可能产生包乱序,所以这个需要可以解决网络包乱序的问题
  • Acknowledgement Number用来确认收到数据包的确认序号,为TCP的传输提供了可靠性保证
  • TCP Flags包括了8个bit,通过对这些bit的设置,可以代表不同类型的TCP数据包

下面就看看TCP连接的建立和终止。

TCP连接建立

TCP连接建立的过程被称为三次握手过程:

  1. 连接建立发起端发送[SYN]包,该端将主动打开(active open)
  2. 接收端将发送[SYN, ACK]包,该端将被动打开(passive open),ACK标志表示对收到的[SYN]包的确认
  3. 连接建立发起端发送[ACK]包确认[SYN, ACK]包

Initial Sequence Number

连接建立过程中,一个重要的工作就是初始化Sequence Number,通信的双方在建立连接的过程中互相通知对方自己的初始Sequence Number(ISN:Initial Sequence Number)。ISN不是固定的,ISN跟时钟绑定,根据特定的间隔自增,直到超过2^32,又从0开始。

SYN全称就是Synchronize Sequence Number,通过seq序号,TCP就可以保证数据包的顺序;通过ack序号,TCP就有了可靠性。

连接建立注意点

在建立TCP连接的过程中,有以下两点需要注意一下:

  1. [SYN]标志的数据包会使用消耗一个序号,所以对端的确认号(ack)是当前序号(seq)加一
  2. 当被动打开端发
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值