TCP协议分析

目录

 

TCP简介

TCP首部格式

建立连接

结束连接

为什么建立连接是三次而断开连接是四次呢?

TCP和UDP的区别

1.连接方面区别

2.安全方面

3.传输效率的区别

4.连接对象数量的区别

5.数据包区别


TCP简介

TCP(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。我们所熟悉的FTP,SSH,HTTP,HTTPS,SMTP,POP3等都是使用TCP协议。

TCP最重要的一个特点就是面向连接的协议,一次TCP的会话连接需要三次握手,断开则需要四次握手。

TCP首部格式

Source Port 源端口

Destination Port  目的端口

Sequence Number 是发送数据包中的第一个字节的***

Acknowledgment Number 是确认***

Data Offset是数据偏移,该字段的值是TCP首部(包括选项)的、长度除以4

标志位:

URG表示Urgent Pointer字段有意义

ACK表示Acknowledgement Number字段有意义

PSH表示Push功能,RST表示复位TCP连接

SYN表示SYN报文(在建立TCP连接时候使用)

FIN表示没有数据发送了(再关闭TCP连接的时候使用)

window表示接受缓冲区的空闲空间,用来告诉TCP连接对端自己能接受的最大数据长度

Checksum是校验和

Urgent Pointers是紧急指针,只有URG标志位被设置时该字段才有意义,表示紧急数据相对***(Sequence Number字段的值)的偏移

TCP协议分析

建立连接

 TCP是因特网中的传输层协议,使用三次握手协议建立连接。当主动方发出SYN连接请求后,等待对方回答SYN+ACK,并最终·对对方的SYN执行ACK确认。这种建立连接的方法可以防止产生错误的连接,TCP使用的流量控制协议是可变大小的滑动窗口协议。

TCP三次握手的过程如下:

(1) 客户端发送SYN(seq=x)的报文给服务器端,进入SYN_SEND状态

(2)服务器收到SYN报文,回应一个SYN(seq=y)ACK(ACK=x+1)报文,进入SYN_RECV状态。

(3)客户端收到服务器的SYN报文,回应一个ACK(ACK=y+1)报文,进入Established状态。

TCP协议分析

结束连接

建立一个连接需要三次握手,而终止一个连接需要经过四次握手,这是由TCP的半关闭造成的。具体过程如下图所示。

(1)客户端发送一个FIN,seq=u,用来关闭客户端到Server的数据传送,Client进入FIN_WAIT_1状态。

(2)server收到FIN后,发送一个ACK=1给客户端,确认序号ack=u+1,server进入CLOSE_WAIT状态

(3)server发送一个FIN,seq=w用来关闭server到客户端的数据传送,server进入LAST_ACK状态

(4)客户端收到FIN后,客户端进入TIME_WAIT状态,接着发送一个ACK=1给server,ack=w+1,seq=u+1,server进入关闭状态,完成四次挥手。

TCP协议分析

为什么建立连接是三次而断开连接是四次呢?

服务器的LISTEN状态下的SOCKET当接收到SYN报文建立请求后,它可以把ACK和SYN放在一个报文里面来发送。但是关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;但是未必你所有的数据全部发送给对方了,所以你未必可以马上关闭SOCKET,也许你还需要发送一些数据给对方之后,在发送FIN报文给对方来表示你同意现在可以关闭连接了,所以这里的ACK报文和FIN报文多数情况下都是分开发送的

TCP和UDP的区别

1.连接方面区别

TCP面向连接,UDP是无连接的

2.安全方面

通过TCP连接传送的数据,我差错,不丢失,不重复,且按序到达

UDP尽最大努力交付

TCP协议分析

3.传输效率的区别

TCP传输速率相对较低。

UDP传输效率高,适用于对高速传输和实时性有较高的通信

4.连接对象数量的区别

TCP连接只能是点到点,一对一的。

UDP支持一对一,一对多,多对一和多对多的相互通信

5.数据包区别

TCP数据包的封装

TCP协议分析

UDP数据包的封装

TCP协议分析