计算机网络协议之TCP
传输控制协议(英语:Transmission Control Protocol,缩写:TCP)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能。
OSI模型
tcp报文格式
- 源端口、目的端口:和IP协议中的源IP、目的IP一起确定每一个确定的连接。TCP的包是没有IP地址的,那是IP层上的事。
- Sequence Number是包的序号,用来解决网络包乱序(reordering)问题。
- Acknowledgement Number就是ACK——用于确认收到,用来解决不丢包的问题。
- 首部长度 (数据偏移,Header Length):由于选项部分长度可变,所以需要首部长度字段明确表示首部的长度。
- Window又叫Advertised-Window,也就是著名的滑动窗口(Sliding Window),用于解决流控,指定流控窗口的大小。
- 控制标记位:
- URG (Urgent Bit):紧急指针是否有效,1表示有效
- ACK (Acknowledgment Bit):1表示确认号字段有效
- PSH (Push Bit):接收方是否尽快将报文段交给应用层,1表示有效,接收方应该尽快将报文段交给应用层而不用等待缓冲区装满。
- RST (Reset Bit):重建连接,为1表示出现严重差错。可能需要重新建立TCP连接。可以用于拒绝非法的报文段和拒绝连接请求。
- SYN (Synchronize Bit):用于发起一个连接,为1表示这是连接请求或是连接接受请求,用于建立连接和使顺序号同步。
- FIN (Finish Bit):用于关闭连接,为1表示发送方没有数据要传输了,要求释放连接。
- 校验和 (Checksum):用于校验数据的完整性。
- 紧急指针 (Urgent Pointer):当URG为1时生效,用于TCP发送端向接受端发送紧急数据。
tcp状态机、三次握手和四次挥手
- 对于建链接的3次握手,主要是要初始化Sequence Number 的初始值。通信的双方要互相通知对方自己的初始化的Sequence Number(缩写为ISN:Inital Sequence Number)——所以叫
SYN,全称Synchronize Sequence Numbers。也就上图中的 x 和 y。这个号要作为以后的数据通信的序号,以保证应用层接收到的数据不会因为网络上的传输的问题而乱序(TCP会用这个序号来拼接数据)。 - 对于4次挥手,因为TCP是全双工的,所以,发送方和接收方都需要
FIN和ACK。 - 主动断开链接的一方,会出现
TIME_WAIT状态。
参考
本文的版权归作者 longfellow 所有,采用 The MIT License (MIT)。任何人可以进行转载、分享,但不可在未经允许的情况下用于商业用途;转载请注明出处。感谢配合!