TCP协议

1 TCP协议

1.1 TCP认识

TCP(Transmission Control Protocol 传输控制协议)是一种面向连接、可靠的、基于字节流的传输层协议。TCP在传送数据之前会先相互发送一些预备报文段协商一些参数,比如序号等等,TCP将用户数据打包成报文段,发送数据后启动一个定时器,另一端对收到的数据进行确认,对失序的数据重新排序,丢弃重复数据,TCP提供端到端的流量控制,并计算和验证一个强制性的端到端校验和。在OSI七层模型中位于第四层,在TCP/IP四层模型中位于第三层。
使用TCP的应用程序:Telnet、Rlogin、FTP、SMTP

1.2 TCP可靠性保证方式

(1)应用数据被分割成TCP认为最适合发送的数据块。这和UDP完全不同,应用程序产生的数据报长度将保持不变。由TCP传递给IP的信息单位称为报文段或段(segment)
(2)当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文 段。
(3)当TCP收到发自TCP连接另一端的数据,它将发送一个确认。这个确认不是立即发送,通常将推迟几分之一秒
(4)TCP将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP将丢弃这个报文段和不确认收到此报文段(希望发端超时并重发)。
(5)既然TCP报文段作为IP数据报来传输,而I P数据报的到达可能会失序,因此TCP报文段的到达也可能会失序。如果必要,TCP将对收到的数据进行重新排序,将收到的数据以正确的顺序交给应用层。
(6)既然IP数据报会发生重复,TCP的接收端必须丢弃重复的数据
(7)TCP还能提供流量控制。TCP连接的每一方都有固定大小的缓冲空间。TCP的接收端只允许另一端发送接收端缓冲区所能接纳的数据。这将防止较快主机致使较慢主机的缓冲区溢出。

2 TCP连接的建立与断开

2.1 TCP三次握手和四次挥手示意图

TCP建立连接和断开连接示意图

2.2 TCP的11种转态

TCP状态变迁图
(1)Client独有:SYS_SENT, FIN_WAIT1, FIN_WAIT2, TIME_WAIT, CLOSING
(2)Sever独有:LINSTEN, SYN_RECD, CLOSE_WAIT, LAST_ACK
(3)共有:CLOSED, ESTABLISHED
当客户端处于FIN_WAIT_1状态时,若同时接收到FIN,ACK可以不经过FIN_WAIT_2状态直接进入TIME_WAIT状态

2.3 TCP建立连接(三次握手)

(1)客户端、服务器端初始转态CLOSED, 服务器端创建SOCKET开始监听,服务器端转态变为LINSTEN,客户端发送SYN进行建立连接的请求,客户端转态变为SYS_SENT
(2)服务端收到客户端发来的SYN后,向客户端发送ACK确认及SYN,服务器端转态变为SYN_RECD
(3)客户端收到服务器端发来的ACK及SYN后,向服务器端发送确认ACK,客户端转态变为ESTABLISHED
(4)服务器端收到客户端发来的ACK后,转态变为ESTABLISHED,建立连接完成

TCP建立连接需要三次握手的原因:
(1)防止已经过期的连接再次传送到被连接的主机
client端向server发送第一个连接请求报文段并没有丢失而是在网络中某个节点滞留到client和server连接结束后的某个时间点到达了server,若不采用三次握手,server发送ACK此时server端认为连接就已经建立,但是client端并没有发送连接请求因此对server发来的ACK不予理睬,这样server就一直等到客户端发送数据,浪费了服务器端的资源。
(2)防止出现死锁
A向B请求连接,B收到后发出确认,B认为连接成功,开始向A发送数据,但是B发往A的确认丢失了,A认为连接还未成功建立会忽略B发来的其他任何消息只等待连接确认,A在发送数据(非确认)超时时重复发送相同分组,这就形成了死锁。

2.4 TCP结束连接(四次挥手)

(1)此时客户端和服务器端转态都为ESTABLISHED,客户端数据传输完毕请求断开连接,客户端发送FIN给服务器端,客户端转态变为FIN_WAIT1
(2)服务器端收到客户端

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值