1、TCP(Transmission Control Protocol 传输控制协议)服务器
TCP是面向对链接,可靠的进程到进程通讯的协议 TCP是提供全双工服务,即数据可在同一时间双向传输
2、TCP报文段(封装在IP数据报中)工具
一、端口号
1)源端口号:发送方进程对应的端口号,源IP和端口的做用就是标志报文的返回地址。
2)目标端口号:对应的是接收端的进程,接收端收到数据段后,根据这个端口将数据对应给应用程序的接口。
注:TCP报头中的源端口号和目的端口号同IP数据报中的源IP与目的IP惟一肯定一条TCP链接。
二、序号:发送端为每一个字节进行编号,便于接收端正确重组。
三、确认号:用于确认发送端的信息。
四、控制位
1)URG:紧急指针有效位。
2)ACK:确认序号位,当该位为1时,用于确认发送方的数据。
3)PSH:标志位为1时要求接收放尽快将数据端送达应用层。
4)RST:为1时经过从新创建TCP链接
5)SYN:同步序号位,TCP须要创建链接时将该值设为1
6)FIN:当TCP断开链接时将该位置为1
五、窗口值:用于说明本地可接收数据段的数目,窗口大小是可变的。以此控制发送端发送数据的速率,从而达到流量控制。
六、校验和:用来作差错控制
七、紧急指针:只有当 URG 标志置 1 时紧急指针才有效。
八、选项:位于TCP首部多大40字节的可选信息,最多见的可选字段是最长报文大小。
注:8个字段中较为重要的是端口号、序号、确认序号、以及控制位中ACK、SYN、FIN这三个控制位。网站
3、TCP三次握手(经过wireshark抓包分析)3d
PC1为真机,PC2为虚拟机CentOS,PC1与PC2绑定在同一块虚拟网卡VNet8上,PC1IP地址为192.168.90.10,PC2IP地址为192.168.90.40。提早在CentOS上搭建号网站,PC1访问PC2,而后经过抓包工具进行TCP的抓报,以下所示:指针
一、第一次握手code
如上图,经过抓包工具抓包发现,源地址(source)为192.168.90.10,源端口号(source port)为55604,目的地址(destination)为192.168.168.90.40,目的端口号(destination port)为80。初始序列号(sequence number)和确认序列号(acknowledgment number)都为0。第一次握手PC1使用一个随机端口号向PC2的80端口发送创建链接的请求,此过程最典型的表示就是TCP的SYN控制位为1,其余五个控制位全为0。blog
二、第二次握手接口
如上图,第二次握手,源地址以及端口号和目的地址和端口与第一次握手相反,初始序列号为0,确认序列号为1,而且控制位中的ACK和SYN都为1。第二次握手实际上分两部分完成:
1)PC2收到PC1的请求,向PC1回复一个确认信息,此过程标志就是TCP的ACK控制位为1,其余五个控制位全为0,而且确认序列号是PC1的初始序列号加1。
2)PC2也向PC1发送一个创建链接的请求,此过程的标志与第一次握手同样,TCP的SYN控制位为1,其余五个控制位全为0。进程
三、第三次握手同步
如图,源地址以及端口号和目的地址以及端口号与第一次握手相同,其中初始序列号即为第二次握手的确认序列号1,确认序列号即为第二次握手的初始序列号加1。PC1收到PC2的回复(包含请求和确认),也要向PC2回复一个确认信息,此过程最典型的标志就是TCP的ACK控制位为1,其余五个控制位为0,并且确认序列号是PC2的初始序列号加1。这样完成了三次握手,在PC1和PC2之间创建了TCP链接。
4、TCP链接终止的四次挥手
此时PC1为CentOS,对应的IP地址为192.168.90.40,PC2为真机,应该的IP地址为192.168.90.10,经过抓包来分析他断开链接的过程,以下所示:
一、第一次挥手
PC1(服务器)向PC2客户端发送FIN和ACK位为1的TCP报文段。
二、第二次挥手
PC2客户端向PC1服务器返回ACK位为1的TCP报文段。
三、第三次挥手
PC2客户端向PC1服务器发送FIN和ACK位为1的TCP报文段。
四、第四次挥手
PC1服务器向PC2客户端返回ACK位为1的TCP报文段,完成终止链接。
五、TCP四次挥手的半关闭概念(TCP一方终止发数据但能够接收)1)PC2客户端FIN报文段,半关闭了这个链接,PC1服务器发送ACK报文段接收半关闭。2)PC1服务器继续发送数据,而PC2客户端只发送ACK确认,再也不发送任何数据。3)当PC1服务器把全部数据都发送完毕时,就发送FIN报文段,PC2客户端再发送ACK报文段,这样就关闭了TCP链接。