一、TCP基础知识补充
TCP是运输层使用的一种协议,提供面向连接的、可靠的字节流服务。
TCP协议的头部:
-
TCP端口:
TCP是端到端,点到点的协议,所以在它的头部当中有明确的来源(源端口)和去向(目的端口),TCP是一对一的,不能用于广播。
TCP的面向连接是指逻辑上的连接,所以它头部当中的“源端口”和“目的端口”都是指软件端口,注意和硬件端口的区分。 -
顺序号(seq):
TCP是面向字节流的,不管应用层给的文件大小如何,TCP都是以字节的整数倍进行传输的,从而会把一个整体划分成很多个部分,相应给上编号就有了顺序号。 -
应答号(ack):
应答号是接送方返回给发送方的一个确认信息,如果接收方成功接收了发送方的前k个字节流,则返回应答号为k+1,示意发送方可以继续发送以序号k+1开头的字节流。 -
TCP首部长度:
TCP首部长度又称数据偏移,反映的是数据段距离开始部分的长度。 -
保留:
保留字段是留存以后使用的 -
URG:
紧急字段,当它为1的时候紧急指针才可生效 -
ACK
确认号字段,建立连接后,ACK置1 -
PSH
推送字段,接收方的缓存中会第一时间向上推送PSH为1的报文。 -
RST
重置字段,当TCP运输过程中出现重大错误/拒绝打开非法报文、链接时使用 -
SYN
同步字段,发送方在想要建立连接时,会向接收方发送SYN=1的请求 -
FIN
终止字段,是用来释放连接的。
二、如何建立连接——三次握手
-
第一次握手:客户端发送网络包,服务端收到了。这样服务端就能得出结论:客户端的发送能力、服务端的接收能力是正常的。
-
第二次握手:服务端发包,客户端收到了。这样客户端就能得出结论:服务端的接收、发送能力,客户端的接收、发送能力是正常的。不过此时服务器并不能确认客户端的接收能力是否正常。
-
第三次握手:客户端发包,服务端收到了。这样服务端就能得出结论:客户端的接收、发送能力正常,服务器自己的发送、接收能力也正常。
三次握手主要是为了可以确定收、发双方的发送和接收能力是否正常!