概念:
TCP协议被称作一种端对端协议。这是因为它为两台计算机之间的连接起了重要作用:当一台计算机需要与另一台远程计算机连接时,TCP协议会让它们建立一个连接、发送和接收数据以及终止连接。
Tcp是提供面向连接的,可靠的字节流服务.面向连接是tcp在正式进行通讯之前首先通过一些握手机制确认双方通讯意向并建立一条认为可以传输的概念通道.字节流服务是tcp传输的最小单位为字节,认为字节是有意义的单位.并且tcp不会在此字节流中插入记录符号.发送端不对字节数据做任何解释,均由接收端的应用完成解释.
格式:
1. 源端口
用于指示源端口的数值。
2. 目的端口
用于指示目的端口的数值。
3. 序号
数据段中第一个数据的序号。
4. 应答号
当A C K位被置之后,这个域包括下一个发送者想要接收到的序号,这个值总被发送。
5. 偏移
这个数指示数据的开始位置。
6. 保留域
保留域不被使用,但是它必须置0。
7. 控制位
控制位是以下各位:
U ( U R G ) 紧急指针域有效
A ( A C K ) 应答域有效
P ( P S H ) p u s h操作
R ( R S T ) 连接复位
S ( S Y N ) 同步序号
F ( F I N ) 发送方已达字节末尾
8. 窗口
这个域指示发送方想要接收的数据字节数,其开始于报文中的 A C K域。
9. 校验和
校验和是报文头和内容按1的补码和计算得到的1 6位数。假如报文头和内容的字节数为奇则最后应补足一个全0字节,形成校验和,注意补足的字节不被送上网络发送。
10. 紧急指针
这个域指出紧急数据相对于跟在U R G之后数据的正偏移。
11. 选项
选项可能在头的后面被发送,但是必须被完全实现并且是 8位长度的倍数。
建立连接三次握手:
1. 客户和服务器端分别为CLOSE和LISTEN,首先客户端激活将发起请求连接的包, S ( S Y N ) 同步序号位置上,此刻客户端为SYN_SENT等待服务器回应,服务端在等待阶段LISTEN.
2. 服务器端收到客户请求连接进入SYN_RECV,马上回应ACK进入ESTABLISHED完成状态.客户端在等待回应.
3. 客户端接收到正确的ACK后进入ESTABLISHED.
关闭连接四次握手:
- 首先客户或者服务器端发送FIN进入半关闭状态,发送方进入FIN_WAIT_1
- 收到FIN一方发送ACK,进入CLOSE_WAIT,并发送FIN进入LAST_ACK
- 发送方收到ACK直接关闭进入FIN_WAIT_2,接收到FIN发送ACK进入关闭
- 介绍最后一个ACK关闭