一.tcp协议
1.tcp协议的段格式如下图:
2. tcp协议中的六个标志位及其含义:
- URG 紧急指针,告诉接收TCP模块紧要指针域指着紧要数据。
- ACK 置1时表示确认号()为合法,为0的时候表示数据段不包含确认信息,确认号被忽略。
- PSH 置1时请求的数据段在接收方得到后就可直接送到应用程序,而不必等到缓冲区满时才传送。
- RST 置1时重建连接。如果接收到RST位时候,通常发生了某些错误。
- SYN 置1时用来发起一个连接。
- FIN 置1时表示发端完成发送任务。用来释放连接,表明发送方已经没有数据发送了。
不合法的标志位组合。
1、所有标志位都为0。
2、SYN和FIN同时被置1。
3、SYN和RST同时被置1。
4、FIN和RST同时被置1。
5、FIN位被置1,但ACK位没有被置1。
6、PSH位被置1,但ACK位没有被置1。
7、URG位被置1,但ACK位没有被置1。
3.URG和PSH的区别
URG(紧急数据标志位):如果URG为1,表示本数据包中包含紧急数据。此时紧急数据指针表示的值有效,它表示在紧急数据之后的第一个字节的偏移值(即紧急数据的总长度)。若URG为0,则紧急指针没有意义。
PSH(推位):当设置为1时,要求把数据尽快的交给应用层,不做处理。
当两个应用进程进行交互式的通信时,有时在一端的应用进程希望再键入一个命令后立即就能够收到对方的响应。在这种情况下,TCP就可以使用推送操作。这时,发送方TCP把PSH置1,并立即创建一个报文段发送出去。接收方TCP收到PSH=1的报文段,就尽快交付接收应用进程,而不再等到整个缓存都填满了再向上交付。
虽然应用进程可以选择推送操作,但推送操作还是很少使用。
两者都可理解为处理紧急数据的标志位,只是处理方法不同。URG的紧急数据仅在报文内,而PSH的紧急数据还在接受缓冲区内。