详解TCP协议

一、定义

传输控制协议(TCP)是Internet一个重要的传输层协议。TCP提供面向连接、可靠、有序、字节流传输服务。应用程序在使用TCP之前,必须先建立TCP连接;TCP通过校验和、序列号、确认应答、重发控制、连接管理以及窗口控制等机制实现可靠性传输。

二、如何保证可靠性

在TCP的传输中,当发送端数据到达接受主机时,接收端主机回返回一个已收到的消息通知,这个消息就叫做确认应答(ACK);在一定时间内没有收到确认应答,发送端就会认为数据丢失,会进行数据的重发。

为了防止接受重复的数据,TCP引入了一个机制,来识别是否已经接收到了这个数据,这个就是序列号;序列号是按顺序给发送数据的每一个字节(8位字节)都标上号码的编号,接收端查询接收数据TCP首部的序列号和数据的长度,来确认自己下一步应该接收的序号最为确认应答返送回去。

三、TCP的三次握手与四次挥手

三次握手过程:其目的不是为了打通网络连接,而是在正式使用之前,先要检测网络是否通畅。

TCP在进行三次握手时,会确认发送数据包的单位,也就是发送的最大消息长度(MSS:Maximum Segment Size),TCP在进行大量数据传送时,就是以MSS的大小将数据进行分割发送。

其中TCP是以一个段为单位进行数据的发送的,每发送一个段就需要一次对应的确认应答处理,这个传输的缺点就是,包的往返时间越长通信性能就越低;为了解决这个问题,TCP引入了窗口这个概念,窗口大小就是指无需等待确认应答而可以继续发送数据的最大值,如下图所示,这个窗口的值为3,窗口的机制实现使用了大量的缓冲区

在使用了窗口后,某些数据的丢失也不用进行重发,机制在窗口中的某些应答丢失,也可以通过下一次的应答来进行确认;在窗口中,如果某一段数据未被发送到服务端,这个时候同一个序号到确认应答会被反复不断的返回,当连续3次返回同一个应答号,客户端就会对数据进行重发。

四次挥手过程:挥手就是断开连接的过程。

 四、TCP报文格式

  • 原端口号、目标端口号:长度为16为,表示发送端端口号和接收端端口号
  • 序列号:长度为32位,指发送数据端位置,每发送一次数据,就累加一个该数据字节数的大小。
  • 确认应答号:长度为32位,是指下一次应该收到的数据的序列号。
  • 数据偏移:长度位4位,表示TCP所传输的数据部分应该从TCP包的哪个位开始计算,可以看作是TCP首部的长度。
  • 保留:长度为4位,为了以后扩展时使用。
  • 控制位:字段长位8位,每一位从左到右分别位CWR、ECE、URG、ACK、PSH、RST、SYN、FIN;这就控制标识就叫做控制位。
    • FIN标志:用于断开连接,为1时,表示今后都不会再有数据发送了。
    • SYN标志:用于建立连接,为1时,表示希望建立连接。
    • RST标志:为1时,表示TCP连接中出现异常必须强制断开连接。
    • PSH标志:为 1时,表示传输的数据立刻给上层应用,为0时,不需要立刻传送可以进行缓存。
    • ACK标志,为1时,表示确认应答的字段为有效,在三次握手时,SYN包之外该位必须为1。
    • URG标志,为1时,表示时需要紧急处理的数据。
    • ECE标志,当为1时,表示从对方到这边的网络有拥堵。
    • CWR标志,与ECE表示都用于IP首部的ECN字段。
  • 窗口大小:长度为16位,表示可以发送数据的窗口大小,当为0时,表示可以发送窗口探测。
  • 校验和:长度为16位,校验TCP伪首部是否正确。
  • 紧急指针:长度为16位,只有在URG标志为1时有效,该字段的数值表示本报文段中紧急数据的指针。
  • 选项:可以用于提高TCP传输性能。
  • 填充:用于数据补全。 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值