3.5.1 TCP连接
TCP连接提供的是全双工服务:如果一台主机上的进程A与另一台主机上的进程B存在一条TCP连接,那么应用层数据就可在从进程B流向进程A的同时,也从进程A流向进程B。
TCP连接也总是点对点的。即在单个接收方和单个发送方之间的连接。
“三次握手”之后,两个进程之间建立一条TCP连接,就可以相互发送数据了。
数据通过套接字之后,TCP将这些数据引导到该连接的发送缓存里,发送缓存时发起三次握手期间设置的缓存之一。
TCP可以从缓存数据中取出并放入报文段中的数据数量受限于最大报文段长度(MSS)。
MSS通常根据最初确定的由本地发送主机发送的最大链路层帧长度(即最大传输单元(MTU))。
TCP为每块客户数据配上一个TCP首部,从而形成多个TCP报文段。
3.5.2 TCP报文段结构
TCP报文段由首部字段和一个数据字段组成。数据字段包含一块应用数据。
- 源端口号和目的端口号,它被用于多路复用和多路分解来自或者送到上层应用数据。同UDP一样,TCP首部字段也包括检验和字段。
- 32比特的序号字段和32比特的确认号字段。这些字段被TCP发送方和接收方用来实现可靠数据传输服务。
- 16比特的接收窗口字段,该字段用于流量控制
- 4比特的首部长度字段,该字段只是了以32比特的字为单位的TCP首部长度。
- 可选与变长的选项字段,该字段用于发送方与接收方协商最大报文长度时使用。
- 6比特的标志字段。