通过向本地端口发送OPEN命令及外部套接字参数建立连接,TCP返回一个标记这个连接的名称,以后假如用户需要使用这个名称标记这个连接 。为了保存这个连接的信息,我们假设有一个称为传输控制块(Transmission Control Block,TCB)的东西来保存 。OPEN命令还指定这个连接的建立是主动请求还是被动等待请求 。下面我们要涉及具体的功能了,TCP段以internet数据报的形式传送 。IP包头传送不同的信息域,包括源地址和目的地址 。TCP头跟在internet包头后面,提供了一些专用于TCP协议的信息 。下图是TCP包头格式图:
源端口:16位;
目的端口:16位
序列码:32位,当SYN出现,序列码实际上是初始序列码(ISN),而第一个数据字节是ISN 1;
确认码:32位,假如设置了ACK控制位,这个值表示一个预备接收的包的序列码;
数据偏移量:4位,指示何处数据开始;
保留:6位,这些位必须是0;
控制位:6位;
窗口:16位;
校验位:16位;
优先指针:16位,指向后面是优先数据的字节;
选项:长度不定;但长度必须以字节记;选项的具体内容我们结合具体命令来看;
填充:不定长,填充的内容必须为0,它是为了保证包头的结合和数据的开始处偏移量能够被32整除;
我们前面已经说过有一个TCB的东西了,TCB里有存储了包括发送方,接收方的套接字,用户的发送和接收的缓冲区指针等变量 。除了这些还有一些变量和发送接收序列号有关:
发送序列变量
SND.UNA - 发送未确认
SND.NXT - 发送下一个
SND.WND - 发送窗口
SND.UP - 发送优先指针
SND.WL1 - 用于最后窗口更新的段序列号
SND.WL2 - 用于最后窗口更新的段确认号
ISS - 初始发送序列号
接收序列号
RCV.NXT - 接收下一个
RCV.WND - 接收下一个
RCV.UP - 接收优先指针
IRS - 初始接收序列号
下图会帮助您了解发送序列变量间的关系:
当前段变量
SEG.SEQ - 段序列号
SEG.ACK - 段确认标记
SEG.LEN - 段长
SEG.WND - 段窗口
SEG.UP - 段紧急指针
SEG.PRC - 段优先级
连接进程是通过一系列状态表示的,这些状态有:LISTEN,SYN-SENT,SYN-RECEIVED,
ESTABLISHED,FIN-WAIT-1,FIN-WAIT-2,CLOSE-WAIT,CLOSING,LAST-ACK,TIME-WAI
T和 CLOSED 。CLOSED表示没有连接,各个状态的意义如下:
LISTEN - 侦听来自远方TCP端口的连接请求;
SYN-SENT -
在发送连接请求后等待匹配的连接请求;
SYN-RECEIVED - 在收到和发送一个连接请求后等待对连接请求的确认;
ESTABLISHED - 代表一个打开的连接,数据可以传送给用户;
FIN-WAIT-1 - 等待远程TCP的连接中断请求,或先前的连接中断请求的确认;
FIN-WAIT-2 - 从远程TCP等待连接中断请求;
CLOSE-WAIT - 等待从本地用户发来的连接中断请求;
CLOSING - 等待远程TCP对连接中断的确认;
LAST-ACK - 等待原来发向远程TCP的连接中断请求的确认;
TIME-WAIT - 等待足够的时间以确保远程TCP接收到连接中断请求的确认;
CLOSED - 没有任何连接状态;
TCP连接过程是状态的转换,促使发生状态转换的是用户调用:OPEN,SEND,RECEIVE,
CLOSE,ABORT和STATUS;传送过来的数据段,非凡那些包括以下标记的数据段SYN,ACK,RST和FIN;还有超时,上面所说的都会时TCP状态发生变化 。
下面的图表示了TCP状态的转换,但这图中没有包括错误的情况和错误处理,不要把这幅图看成是总说明了 。
3.3. 序列号
请注重,我们在TCP连接中发送的字节都有一个序列号 。因为编了号,所以可以确认它们的收到 。对序列号的确认是累积性的,也就是说,假如用户收到对X的确认信息,这表示在X以前的数据(不包括X)都收到了 。在每个段中字节是这样安排的:第一个字节在包头后面,按这个顺序排列 。我们需要认记实际的序列空间是有限的,虽然很大,但是还是有限的,它的范围是0到2的32次方减1 。我想熟悉编程的一定知道为什么要在计算两个段是不是相继的时候要使用2的32次方为模了 。TCP必须进行的序列号比较操作种类包括以下几种:
推荐阅读
- 高压锅压绿豆汤需要多少时间
- 高温消毒多长时间最佳
- 宿迁有高铁吗 宿迁有没有高铁
- 如何提高鸡种蛋受精率
- 年龄大的人还会出现心梗吗,人到一定年龄,心脏也渐渐显老态,高血压,冠心病,糖尿病,心经梗塞纷纷找上门来,如何预防这类病症的
- 螃蟹能带上高铁吗 可以带螃蟹上高铁吗
- k火车时速一般多少
- 稻城亚丁有高原反应吗
- 什么是高热量食物有哪些 高热量食物有哪些
- 高利贷需要偿还吗
