说说TCP的三次握手
TCP(Transmission Control Protocol) 传输控制协议的主要特点
1.TCP是面向连接的传输层协议。
2.每个TCP连接只能有两个端点,点对点的。
3.TCP提供可靠性。
4.TCP连接是全双工的。(TCP允许通信双方在任何时候都能发送数据,TCP连接两端都设有发送缓存和接收缓存,发送端在发送数据后,就做自己的事情了,数据会保存在缓存区,TCP会在合适的时候发送数据,接收同理)。
5.面向字节流的传输协议。
首先,我们先通过wireshark来抓取tcp的包
这个是向server端发送tcp连接请求
上图中有几个字段需要重点介绍下:
(1)序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。
(2)确认序号:Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1。
(3)标志位:共6个,即URG、ACK、PSH、RST、SYN、FIN等,具体含义如下
URG:紧急指针标志
ACK:确认序号标志
PSH:push标志
RST:重置连接标志
SYN:同步标志,用于建立连接过程
FIN:finish标识,用来释放连接
然后我们再点击打开查看内容
TCP的三次“握手”过程如下:
(1)第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。
(2)第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。
(3)第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。
TCP的可靠性实现
基于请求应答机制的 - 每次发送完一个数据分组后,等待请对方确认,收到确认信号后再发送下一个分组,分组会进行编号。
TCP报文段作为IP数据报来传输,而IP数据报的到达可能会失序,因此TCP报文段的到达也可能会失序。如果必要,TCP将对收到的数据进行重新排序,将收到的数据以正确的顺序交给应用层。保证序列按序到达。
当TCP发送一组数据后,会启动一个超时定时器,如果一定时间内没有接到目的端的接受确认信号,则进行重发。超时重发。
丢包重传。
通过滑动窗口进行流量控制,防止发送数据过快,要让接收方来的及接收。
接收方滑动窗口已满,发送方等待一段时间,系统过一段时间(设置定时器)会询问接收方的缓冲区
网络拥塞控制(慢开始,拥塞避免,快重传,快恢复)。