前段时间学习了通信的相关基础知识,由于上完相关课我就回家了,忙着跟高中同学见面玩去了……,嘿嘿,因此相关总结没写,对于通信的相关知识也记得不大清了。这两天回学校静下心来把以前的代码回味了下,思绪才渐渐的回来了,呵呵~~。下面是我对TCP连接的“三次握手,四次断开”的总结。
假如主机A客户进程要与主机B建立一个TCP连接,需要进行如下几步操作,即所谓的“三次握手”:
1、主机A向B发送一个SYN=1,ACK(确认号——用于标识接收方希望下一次接收的字节序号)=0的TCP连接请求数据报,同时为该数据报生成一个序号SEQ(序列号——用于标识TCP段区的开始位置)=x,放在数据报头中一起发送出去。
2、主机B若接受A发送的连接请求,则返回一个确认ACK=1。同时,主机B生成同步的序号,如SEQ=y,与x无关。同时用第一个数据报的序号值x加1作为对A的确认。
3、主机A再向B发送第二个数据报SEQ=x+1,同时对从主机B发来的数据报进行确认,序号为y+1。
即三次握手的过程为:A-->B SYN=1,ACK=0 我的序列号是x
B-->A SYN=1,ACK=1 我的序列号是y,你的序列号是x
A-->B SYN=0,ACK=1 我的序列号是x+1,你的序列号是y
在数据结束后,TCP需释放连接。在TCP协议中规定,通信双方都可以主动发出释放连接的请求,它的连接是双向的。TCP协议用FIN数据报(数据报头中的FIN标志位置1)来请求关闭一个连接。连接断开的四次操作如下:
1 、当主机A完成数据传输后,将控制位FIN置1,提出停止TCP连接的请求
2、 主机B收到FIN后对其作出响应,确认这一方向上的TCP连接将关闭,同时ACK=1
3、 由B 端再提出反方向的关闭请求,将FIN置1
4 、主机A对主机B的请求进行确认,将ACK=1,双方向的关闭结束.
以上操作是通信双方依次地先后关闭一个单向连接,也可以同时提出关闭连接的请求,这两种情况处理都是一样的。最后当连接在两方向上都关闭后,TCP软件便将该连接的所有记录删除。
可以看出,连接的“三次握手,四次断开”操作大大的增加了通信的可靠性。进行数据传输前的交互,提高了数据成功传输的可能性。