TCP报文与三次握手四次挥手

TCP报文与三次握手四次挥手

1. TCP报文格式

964016-20160829215953168-1927861560.png

端口号

用来标识同一台计算机的不同的应用进程

  • 源端口:源端口和IP地址的作用是表示报文的返回地址
  • 目的端口:端口指明接收方计算机上的应用程序接口

TCP报文中的源端口号和目的端口号同IP数据报中的源IP与目的IP唯一确定一条TCP连接

序号和确认号

是TCP可靠传输的关键部分。

  • 序号是本报文段发送的数据组的第一个字节的序号。EG.一个报文段的序号为300,此报文段数据部分共有100字节,则下一个报文段的序号为400。序号确保了TCP传输的有序性。
  • 确认序号,ACK,指明下一个期待收到的字节序号,表明该序号之前的所有数据已经正确无误的收到。确认号只有当ACK标志为1时才有效。

数据偏移/首部长度

4bits,4位

保留

6bits

控制位

  • URG:紧急指针标志,为1时表示紧急指针有效,为0是忽略紧急指针
  • ACK:确认序号标志,为1时表示确认号有效,为0表示报文不含确认信息,忽略确认号字段。TCP协议规定,只有ACK=1时有效,也规定连接建立后所有发送的报文ACK必须为1
  • PSH:push标志,为1表示带有push标志的数据,指示接收方在接收到该报文段以后,应尽快将这个报文段交给应用程序,胃不适在缓冲区排队
  • RST:重置连接标志,用于重置由于主机崩溃或其他原因出现的错误的连接。
  • SYN:同步序号,用于建立连接过程,在连接请求中,SYN=1和ACK=0表示该数据段没有使用捎带的确认域,而连接应答捎带一个确认,即SYN=1和ACK=1
  • FIN:finish标志,用于释放连接,为1时表示发送方已经没有数据发送了,即关闭本方数据流

窗口

滑动窗口大小,用来告知发送端接收端的缓存大小,以此控制发送端发送数据的速率,从而达到流量控制。窗口大小是一个16bit字段,因为窗口大小最大为65535

校验和

奇偶校验,此校验和是对整个TCP报文段,包括TCP头部和TCP数据,以16位字进行计算所得。由发送端计算和存储,由接收端进行校验。

紧急指针

只有当URG标志置1时紧急指针才有效。紧急指针是一个正的偏移量,和顺序号字段中的值相加表示紧急数据最后一个字节的序号

选项和填充

最常见的可选字段是最长报文大小,又称为MSS(Maximum Segment Size),每个连接方通常都在通信的第一个报文段(为建立连接而设置SYN标志为1的那个段)中指明这个选项,它表示本端所能接受的最大报文段的长度。选项长度不一定是32位的整数倍,所以要加填充位,即在这个字段中加入额外的零,以保证TCP头是32的整数倍。

数据部分

TCP 报文段中的数据部分是可选的。在一个连接建立和一个连接终止时,双方交换的报文段仅有 TCP 首部。如果一方没有数据要发送,也使用没有任何数据的首部来确认收到的数据。在处理超时的许多情况中,也会发送不带任何数据的报文段。

2.TCP三次握手

三次握手.png

TCP/IP协议是传输层的一个面向连接的安全可靠的传输协议。三次握手机制是为了保证能建立一个安全可靠的连接。

第一次握手是由客户端发起,客户端会向服务端发送一个报文,报文里面SYN位标志位置1,当服务端收到这个报文之后就知道客户端要发起一个新的连接,于是服务端会向客户端发送一个确认消息报文,确认消息报文中,ACK位置1。

以上两次握手后,客户端已经知道全部的信息,客户端可以向服务端发送消息,也可以收到服务端发送的消息。但是对于服务端而言,两次握手是不够的。因为到目前为止,服务端只知道一件事情,客户端发给服务端的消息服务端知道,但是服务端发给客户端的消息,客户端能不能收到未知,所以还要进行第三次握手。

第三次握手是,当客户端收到服务端发来的确认消息报文之后,还要继续给服务端一个回应,也是一个ACK位置1的确认消息。

通过以上三次连接以后,不论是服务端还是客户端,都彼此知道自己既能发送消息也能收到对方的消息,这时一个面向连接的安全可靠的连接就建立了。

3. TCP四次挥手

四次挥手.png

四次挥手机制也是客户端首先发起的:

客户端会发送一个报文,这个报文里面,FIN位标志位置1

当服务端收到这个报文后,服务端就知道了客户端想要断开连接,但是此时服务端不一定能做好准备,因为当客户端发起断开连接的消息时,对于服务端而言极有可能还有未发送完的消息还要继续发送,所以对于服务端而言它只能做一个消息确认,告诉客户端已经收到了将要断开连接的消息。

等待服务端做好准备以后,服务端会再向客户端发送一个FIN位置1的断开连接报文。这个报文表示服务端已经做好了断开连接的准备,此时客户端也要向服务端发送一个消息确认的报文。

一共有4次,通过这4次的相互沟通和连接,服务端和客户端都做好了断开连接的准备,此时连接就可以断开了。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容