1、什么是TCP协议
传输控制协议(TCP),向应用提供了可靠的、面向连接的服务;换句话说,TCP提供了一个类似于点到点的连接。
2、点到点连接特点
- 仅存在一条到达目的地的路径。进入连接的数据包不会丢失,因为数据包惟一可去的地方就是连接的另一端。
- 数据包到达的顺序与发送顺序相同。
TCP提供了一条看似点到点的连接,虽然实际上这条连接并不存在。TCP利用的Internet层可以提供无连接的、尽力而为转发的服务。
同样的,Internet层不保证所有的数据包使用相同的路径,因而也不保证数据包到达时仍旧保持发送时的顺序和间隔或者全部到达。
另一方面,电话呼叫是一个面向连接的服务。数据必须顺序、可靠地到达,否则数据就会作废。像电话呼叫一样,TCP首先必须建立连接,然后是传送数据,当数据传送完成后要拆除连接。
3、tcp报头
源端口(Source Port )和目的端口(Destination Port )——字段长度各为16位,它们为封装的数据指定了源和目的应用程序。应用程序的端口号加上应用程序所在主机的IP地址统称为套接字(socket)。在网络上套接字惟一地标识了每一个应用程序。
序列号(Sequence Number)一一字段长度为32位,序列号确定了发送方发送的数
据流中被封装的数据所在位置。
确认号(Acknowledgment Number)—一—字段长度为32位,确认号确定了源点下
一次希望从目标接收的序列号。如果主机收到的确认号与它下一次打算发送(或已发送)的序列号不符,那么主机将获悉丢失的数据包。
报头长度(Header Length)——又叫数据偏移量,长度为4位,报头长度指定了
以32位字为单位的报头长度。
保留(Reserved) —---字段长度为6位,通常设置为0。
标记(Flag)一--包括8个1位的标记,用于流和连接控制。
它们从左到右分别是:
拥塞窗口减少(CWR) ——主要用于流控制ECN-Echo(ECE)
紧急(URG) —— 指明紧急数据的结束
确认(ACK)
弹出(PSH)
复位(RST)
同步(SYN)
结束(FIN)
窗口大小( Wlndow Stze)——字段长度为16位,主要用于流控制。窗口大小指明
了自确认号指定的八位组开始,接收方在必须停止传输并等待确认之前发送方可以接收的数据段的八位组长度。
校验和(Checksum)---字段长度为16位,它包括报头和被封装的数据,校验和
允许错误检测。
紧急指针(Urgent Pointer)-—字段仅当URG标记置位时才被使用。这个16位
数被添加到序列号上用于指明紧急数据的结束。
可选项(Options)———字段用于指明TCP的发送进程要求的选项。最常用的可选
项是最大段长度,最大段长度通知接收者发送者愿意接收的最大段长度。为了保证报头的长度是32个八位组的倍数,所以使用0填充该字段的剩余部分。
4、三次握手详解
第一次握手:客户端给服务端发一个 SYN 报文,并指明客户端的初始化序列号 Seq。此时客户端处于 SYN_Send状态。
服务器收到 ACK 报文之后,也处于 establised 状态,此时,双方以建立起了链接。
这些数据通过传输层发送(tcp)。数据会被送到传输层处理,在这里报文打上了传输头的包头,主要包含端口号,以及tcp的各种制信息。然后把待发送的数据段发送到网络层。
5、四次挥手
第1次挥手:客户端发送一个FIN,用来关闭客户端到服务端的数据传送,客户端进入FIN_WAIT_1状态;
第2次挥手:服务端收到FIN后,发送一个ACK给客户端,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),服务端进入CLOSE_WAIT状态;
第3次挥手:服务端发送一个FIN,用来关闭服务端到客户端的数据传送,服务端进入LAST_ACK状态;
第4次挥手:客户端收到FIN后,客户端t进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,服务端进入CLOSED状态,完成四次挥手。
其中:FIN标志位数置1,表示断开TCP连接。