TCP协议分析
目录
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是因特网中的传输层协议,使用三次握手协议建立连接。当主动方发出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的半关闭造成的。具体过程如下图所示。
(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进入关闭状态,完成四次挥手。
为什么建立连接是三次而断开连接是四次呢?
服务器的LISTEN状态下的SOCKET当接收到SYN报文建立请求后,它可以把ACK和SYN放在一个报文里面来发送。但是关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;但是未必你所有的数据全部发送给对方了,所以你未必可以马上关闭SOCKET,也许你还需要发送一些数据给对方之后,在发送FIN报文给对方来表示你同意现在可以关闭连接了,所以这里的ACK报文和FIN报文多数情况下都是分开发送的
TCP和UDP的区别
1.连接方面区别
TCP面向连接,UDP是无连接的
2.安全方面
通过TCP连接传送的数据,我差错,不丢失,不重复,且按序到达
UDP尽最大努力交付
3.传输效率的区别
TCP传输速率相对较低。
UDP传输效率高,适用于对高速传输和实时性有较高的通信
4.连接对象数量的区别
TCP连接只能是点到点,一对一的。
UDP支持一对一,一对多,多对一和多对多的相互通信
5.数据包区别
TCP数据包的封装
UDP数据包的封装