了解TCP报文
? ?1.什么是报文
TCP 报文是 TCP 层传输的数据单元,也称为报文段。
? ?2.报文格式:
? ? ?? ? ? ? ? ? ?TCP报头信息出TCP报文段中,用于指定通信的源端端口,目的端口,管理tcp连接等。? ?
?
?数据报文的头部有多长,TCP报文头部大小并不固定? ? ?>>固定长度20字节+可变长度
TCP报文头部的固定内容:每一行32bit(4字节)* 5行 =20字节
? ? ? ?
?????????????????????? ? ? ? ? ? ? ? ? ? 报文的报头结构图
????????
各字段代表的含义:
源端口:指定了发送端的端口(图1 TCP报头结构)
目的端口:指定了接受端的端口号
序号:指明了段在即将传输的段序列中的位置
确认号:规定成功收到段的序列号,确认序号包含发送确认的一端所期望收到的下一个序号
TCP偏移量:指定了段头的长度。段头的长度取决与段头选项字段中设置的选项
保留:指定了一个保留字段,以备将来使用
标志:SYN、ACK、PSH、RST、URG、FIN
??????SYN:?表示同步
??????ACK:?表示确认
??????PSH:?表示尽快的将数据送往接收进程
??????RST:?表示复位连接
??????URG:?表示紧急指针
??????FIN:?表示发送方完成数据发送
窗口:指定关于发送端能传输的下一段的大小的指令
校验和:校验和包含TCP段头和数据部分,用来校验段头和数据部分的可靠性
紧急:指明段中包含紧急信息,只有当U?R?G标志置1时紧急指针才有效
选项:指定了公认的段大小,时间戳,选项字段的末端,以及指定了选项字段的边界选项
想了解更多可以移步这里? ——(49条消息) TCP报文头部_wdirdo的博客-CSDN博客_tcp报文头
????????前面我们了解了TCP报文,接下来进入正题:
三次握手
什么是三次握手 :
所谓三次握手(Three-way Handshake),是指建立一个TCP连接时,需要客户端和服务器总共发送3个包。
应用场景:?
TCP/IP协议是传输层的一个面向连接的安全可靠的传输层协议。 三次握手发生在连接过程中的,三次握手机制是为了保证能建立一个安全可靠的连接;
过程:
第一次握手是由客户端发起,客户端会向服务端发送一个报文,报文里面SYN标志位是置1的, 当服务端收到这个报文的时候就知道客户端要和我发起一个新的连接, 于是服务端就向客户端发送一个确认消息包ACK位置1,这是第二次握手,
以上两次握手之后, 对于客户端而言,其实是已经知道了所有信息,就是我既能给服务端发送消息, 我还能收到服务端的消息;对于服务端而言,两次握手是不够的,因为到目前为止, 服务端只知道一件事情,客户端给我发送的消息我收的到,但是我发给客户端的消息, 客户端能不能收到还不知道。所以还要进行第三次握手。
第三次握手就是当客户端收到服务端发过来的确认消息的报文之后, 还要继续给服务端进行一个回应,也是一个ACK位置1的一个确认消息。 通过以上三次连接,不管是服务端还是客户端都彼此知道了,我既能给对方发送消息也能收到对方的消息, 那么这个连接就能被安全的建立了。
四次挥手
四次握手机制,也是由客户端首先发起的,客户端会发起一个报文,在报文里面FIN标志位置1;当服务端收到这报文之后,我就知道了客户端想要和我断开连接,但是此时服务端不一定能做好准备,因为当客户端发起断开连接的时候,对于服务端而言它极有可能有未发送完的的消息,它还要继续发送;所以此时对于服务端而言他只能进行一个消息确认,我先告诉服务端,我知道你要和我断开连接了,但是我这还可能没有做好准备,你还需要等我一下,等会我会告诉你;于是,发完这个消息确认包后,可能稍作片刻,它可能会继续发送一个断开连接的报文,一个FIN位置1的报文,是由服务端发给客户端的,这个报文表示了服务端已经做好了断开连接的准备,那么当这个报文发给客户端的时候,客户端同样要给服务端继续发送一个消息确认的报文。 一共有四次,通过这四次的相互沟通和连接,我就知道了,不管是服务端还是客户端都已经做好了断开连接的准备,于是连接就可以被断开了。
关于TCP握手机制的疑问
为什么需要三次握手?
TCP/IP是不可靠的,为了在不可靠的环境下建立可靠的连接,必须要有握手确认机制。
为什么是三次?
TCP是全双工的,需要双方进行同时通信,在保证信息成功传输双向确认,最少需要三次握手。
|