TCP报文的头部结构
TCP头部信息出现在TCP报文段中,目的是指定源端端口、目的端端口、管理TCP链接等等。
TCP的头部结构如图所示:其中16位端口号就是指定通信端口的,分别指定源端口号和目的端口号。而32位的序号也就是SEQ来表示每次传输方向里字节流中每个字节的编号。通常这个值是某一个随机值。32位的确认号ACK是用来对发送来的TCP报文段进行响应。通常ACK=SEQ+1。
4位的头部信息用来标识TCP报文信息。6个标志位中,ACK,RST,SYN,FIN此四个最常用,分别表示确认号是否有效,让对方从新请求链接,请求建立一个链接和通知关闭链接。
16位窗口大小是TCP流量控制的一个手段,让它通知对方能一次收纳多大的字节数,以此来控制数据传输的速度。
三次握手
三次握手主要指的是客户端在请求服务端建立连接的过程中,需要三次通信才能完整的建立链接。
首先是client将SYN置为1,生成随机值seq,发送给服务端,此时server的状态是SYN_RCVD,然后Server首先将SYN和ACK都置为1,ack的值是seq+1,并随机产生一个seq=k打包发送给客户端。client收到确认后,检查ACK标志位变成了1,这说明对方已经收到,则将自己的ACK置为1,确认号ack=k+1,并将数据报发送给Server,Server检查ACK标志位是否是1,如果正确,则说明完全建立起链接,client和server都进入了ESTABLISHED状态。
四次挥手
四次挥手指的是在数据传输完成之后,需要将双方建立的链接进行关闭。由于TCP是全双工链接,所以每个方向都需要单独关闭。首先在数据传输完成之后,client段的FIN置为1,