TCP协议

一. TCP协议特点

1.基于连接的: 数据传输之间需要连接
2.全双工: 双向传输
3.字节流: 不限数据大小,打包成报文段, 保证有序接收,重复报文丢弃
4.流量缓冲: 解决双方处理能力的不匹配
5.可靠的传输服务: 保证可达,丢包时,通过重发机制实现可靠性
6.拥塞控制: 防止网络出现恶性拥塞

二. TCP报文格式

在这里插入图片描述

源端口(2字节): 发送端应用程序的端口号,与源IP地址确定一个唯一地址

目的端口(2字节):接收端计算机应用程序的端口号,与目的IP地址确定唯一的地址

序号(4字节):TCP是面向字节流传输的,他为每一个字节编了一个序号,该报文段中序号为传输数据第一个字节的序号,例如:一个报文端的数据部分大小为100个字节,他的序号为400,那么下一次报文段的序号就为500

确认号(4个字节):指明了下一个期待接收的字节序号,表明该序号之前的所有字节都正确接收到了,只有当ACK为1的时候确认号才有效

数据偏移/首部长度(4个字节): 用来表示报文段数据的起始处距离报文起始处的长度也就是TCP报文首部的长度,由于首部含有可选项,所以TCP报头长度是不确定的。

保留:为了将来定义新的用途保留,现在一般都置为0

URG紧急控制位:与紧急指针配合使用,当URG为1的时候,就是通知系统这个报文段有紧急数据,需要优先传输。

ACK确认控制位: 当他为1的时候,确认号字段才有效,TCP规定,在连接建立后,所有ACK都应该置为1

PSH推送控制位: 当报文段的psh为1的时候,接收方接到该报文段,就立刻将他交付给接收应用进程,而不是等缓存已满的时候再交付。

RST复位控制位: 当报文段的RST为1的时候,说明该TCP连接出现错误,必须释放连接,并重新建立连接。

SYN同步控制位: 在连接建立时用来同步序列号,当SYN=1,ACK=0时说明这是一个连接请求报文段,如果对方同意建立连接则应该在响应的报文段中将SYN=1,ACK=1,表示接受请求

FIN终止控制位: 用来释放连接,当FIN=1时表示此报文段发送方的数据已经发送完毕,并要求释放连接。

三. 三次握手

在这里插入图片描述

  1. 服务器进行监听
  2. 客户端发送SYN包给服务器,客户端进入SYN-SEND状态。
  3. 服务器收到SYN包后将建立连接的SYN包和应答包一起发送给客户端,并且进入SYN-RCVD状态。
  4. 客户端收到包SYN+ACK包后,发送应答包ACK给服务器。进入建立连接状态,服务器接收到应答包后进入建立连接状态。

四. 四次挥手

在这里插入图片描述

  1. 客户端发送FIN包告诉服务器,现在开始我已经没有数据可以发了,接着进入FIN-WAIT-1状态,等待应答包。
  2. 服务器接收到FIN包后,发送一个应答包ACK,告诉客户端我知道了,现在我还有数据要发,先等我,接着服务器进入CLOSE-WAIT状态。客户端接收到应答包ACK后进入FIN-WAIT-2状态。
  3. 服务器发送完所有数据后,同样发送一个FIN包给客户端,告诉客户端,我也没有数据可以发送了,进入LAST-ACK状态。
  4. 客户端接收到FIN包后发送应答包ACK给服务器,进入TIME-WAIT状态。服务器接收到应答包后进入CLOSE状态。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值