您的位置:首页 > 理论基础 > 计算机网络

【[TCP/ip】-TCP三次握手四次挥手

2017-07-01 18:21 387 查看

传输控制协议TCP

TCP的特点:

(1)TCP是面向连接的协议。(使用前先建立连接,结束释放)

(2)每条TCP连接只能有两个端点,点对点的。(进程之间一对一)。

(3)TCP提供可靠传输。(传输的数据,无差错、不丢失、不重复、并且按序到达)

(4)TCP提供全双工通信。(允许通信双方任意时候都可发送数据)

(5)面向字节流的。(TCP把应用进程交下来的数据块看成仅仅是一串的无结构字节流)

TCP套接字是一种流套接字,把连接作为最基本的抽象,套接字是通信端点的抽象,通过套接字抽象的建立连接。

首先了解下TCP头部中的6位标识位包含如下几项:

URG:表示紧急指针是否有效

ACK:表示确认号是否有效。称携带ACK标志的TCP报文段为确认报文段。

PSH:提示接收端应用进程应该立即从TCP接收缓冲区中读取数据。

RST:表示要求对方重新建立连接。复位报文段。

SYN:表示请求建立一个连接。同步报文段。

FIN:表示通知对方本端要关闭连接了,结束报文段

TCP连接的建立和释放

TCP连接建立-TCP三次握手

  建立连接之前首先一定要有一个准备接受连接的服务器进程B。服务器进程B先创建传输控制块TCB,准备接受客户进程的连接请求。通常服务器进程B需要调用socket,bind,listen这三个函数后使得服务器进程B处于LISTEN(监听)状态,等待客户连接请求。如有请求,则做出如下响应:

TCP客户进程A也首先创建TCB,通过调用connect发起连接主动打开,向B发出请求报文段,这时首部中的SYN=1,告诉服务器待连接中发送数据的序列号,seq=x。SYN报文段不能携带数据,但会消耗一个序列号。

B接收到A的连接请求报文段后,如果同意连接,向A发送确认。在确认报文段中SYN=1,ACK=1,也为自己选择一个初始序号seq=y。

TCP客户进程收到B的确认后,再次向B给去确认。ACK=1



在建立连接的同时,双方协商了一些信息,例如双方发送序号的初始值、最大段尺寸。

TCP的连接释放-四次挥手

A的应用进程首先向其TCP发出连接释放报文段,并停止再发送数据,主动关闭TCP连接。该端的TCP发送一个一个FIN分节(FIN=1),和连接一样发送自己的序列号

B服务器进程接收这个FIN报文段,立即向A进程发送确认报文段,这时B进入CLOSE-WAIT状态。这时候从A到B这个方向的连接就释放了,这时TCP连接处于半关闭状态,A已经没有数据要发送,但B如果向A发送数据,A仍人要接收

A收到来自B进程的确认后,进入FIN-WAIT2状态,等待B发出的连接释放报文段。

若没有数据要向A发送,B就向A发送连接释放报文段必须FIN=1。这时B进入LAST-ACK,等待A的最终确认。

A在收到B的连接释放报文段后,必须对此发出确认。ACK置1,发出确认报文段,然后自己进入TIME-WAIT状态。注意,现在TCP连接还没有释放掉。必须经过时间等待计时器设置的时间2MSL后,A才进入CLOSE状态。TCP连接才真正释放。



这里提出两个问题:

TCP连接中为什么还要再发送一次确认呢?(为什么不是两次握手)

TIME-WAIT是什么?主动断开链接的一方为什么要进入TIME_WAIT状态 ?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息