本目内容还是为上课笔记,主要为自己总结。所以,写的不是很规范。 承接上一目,本目主要讲传输层的相关内容。
主要有一下几个点:
- TCP特点
- TCP报文格式
- 连接建立三次握手
- 连接终止四次挥手
- TCP如何保证可靠性
TCP特点
- 基于字节流:
- 基于字节流的传输服务。
- TCP传输的数据是segment。后者是没有边界的,是一个字节流。存在粘包问题。
- 既然当前层不解决这个问题,在应用层解决。
- 面向连接的:
- 数据传送前,建立连接。
- 可靠传输:
- 逻辑上保证数据没有差错。保证数据包不会失序和重复。
- 缓冲传输:
- 并不会立即传输段,存在缓冲区。
- 全双工:
- 发送的时候也可接受数据。主要指数据的发送和接受可以同时。如果不能同步是半双工。
- 流量控制:
- 主要是通过滑动窗口机制来控制。
TCP报文格式
源端口号和目的端口号
- 长度:16位
- 含义:源端口号和目的端口号,加上IP首部的源IP地址和目的IP地址,唯一确定一个TCP连接。
序号
- 长度:32位
- 含义:序号表示在这个报文段中的第一个数据字节序号。
确认号:
- 长度:32位
- 含义:当ACK标志有效时,确认号表示期望收到的下一个字节的序号。
头部长度
- 长度:4位
- 含义:表示头部的最长长度,以4B为单位。最多为60B
保留位
- 长度:6位
- 含义:暂时留作保留用,全为0
标志为
- 长度:6位
- 含义:
- URG:紧急指针有效
- ACK:确认序号有效
- PSH:接收方应尽快将这个报文短交给应用层
- RST:连接重置
- SYN:同步序号用来发起一个连接
- FIN:终止一个连接
窗口大小
- 长度:16位
- 含义:通过窗口大小来达到流量控制
校验和
- 长度:16位
- 含义:对TCP头部进行校验(网际校验和)
紧急指针:
- 长度:16位
- 含义:是一个正的偏移量,与序号字段中的值相加。表示紧急数据最后一个字节的序号。TCP的紧急方式是发送端向另一端发送紧急数据的一种方式
选项与填充:
- 长度:16位
- 含义:最常见的可选字段是最长报文大小MSS,每个连接方通常在通信的第一个报文段中指明这个选项。它指明本端所能接受的最大长度的报文段。该选项如果不设置,默认为536.(20+20+536 = 576,路径MTU一般是576)
连接建立三次握手
连接终止四次挥手
TCP如何保证数据传输的可靠性
对于不可靠的服务,通常会有一下几个问题:
- 差错
- 丢包
- 失序
- 重复
所以,TCP要保证数据传输的可靠性,必须解决以上几个问题。
- 差错:
- TCP保持它首部数据的校验和。
- 这是一个端到端的校验和,目的是检测数据在传输过程中的任何变化。如果收到段的校验和有错,TCP将丢弃这个报文段并且不确认。从而导致对方超时重传。
- 丢包
- 超时重传机制
- 当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。
- 当TCP收到发自TCP另一端的确认,它将发送一个确认。这个确认不是立即发送,通常将推迟几分之一秒。
- 失序
- 序号
- TCP承载于IP数据报来传输,而IP数据报的到达可能会失序。因此TCP报文段的到达可能也会失序。但是,TCP将根据序号对收到的数据进行重排。
- 重复
- 序号
- IP数据报会发生重复。因此TCP接收端根据序号丢弃重复的数据。
- 流量控制
- 滑动窗口机制
- TCP连接的每一方都有一定大小的缓冲空间。