标签:tcp
TCP段格式:
主要介绍下URG和PSH标志位:
URG(紧急位):急指针是一个正的偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号。TCP的紧急方式是发送端向另一端发送紧急数据的一种方式。紧急指针指向包含数据段的某个字节(数据从第一字节到指针所指字节就是紧急数据,不进入接收缓冲就直接交到上层进程,余下的数据要进入缓冲)
PSH(急迫位):在一个交互程序中,当客户发送一个命令给服务器时,它设置PUS标志并停下来等待服务器的响应。通过允许客户应用程序通知TCP设置PSH标志,客户进程通知TCP在向服务器发送一个报文段时不要因等待额外数据而使已提交数据在缓存中滞留。类似地,当服务器的T C P接收到一个设置了P U S H标志的报文段时,它需要立即将这些数据(包括以前存中滞留的数据)递交给服务器进程而不能等待判断是否还会有额外的数据到达。 PSH=1,只对接收方的接收缓冲区起作用,发送方通过使用PSH位来通知接收方将所有收到的数据立即提交给服务器进程,而不需要等待额外数据(将缓存填满)而让数据在缓存中停留!这里所说的数据包括与此PSH包一起传输的数据以及之前就为该进程传输过来的数据(滞留在缓存中的数据)。
TCP建立:(三次握手)
在建立连接时,需要一方主动发起请求。
第一次握手:client向server发出请求建立连接
第二次握手:当server收到client发来的请求,并向client发送一个确认请求建立连接,当server收到client确认请求建立连接时,只能说明client向server发出的请求建立连接,server已收到。
第三次握手:当client收到server发来的确认请求建立连接时,并向server发送已收到确认请求建立连接,即双方建立连接成功。
为什么不能是二次握手或者四次,五次握手?
client发送的第一个请求连接报文段并没有丢失,而是因为网络的问题滞留了,而是在连接已经释放后的某个点到达server,而server以为是client发送的一个请求连接报文,于是向client发送一个确认报文,server认为连接已经建立,等待client发送报文,而client并没有向server发送请求建立连接,就不会理会server发来的确认。将会引起死锁。若采用三次握手,就上述情况,client不会向server的确认发出确认,当server没有收到client的确认,就认为client并没有要求建立连接。
TCP建立连接时,四次,五次都可以,但是三次比较简洁。
TCP释放连接(四次挥手)
在释放连接时,需要双方同意。
第一次挥手:client向server发送请求释放连接
第二次挥手:当server收到client发送的请求释放连接,并向client发送确认请求释放连接。此时,client与server的连接已经被释放,client不能向server发送数据,但是server与client的连接并没有释放。
第三次挥手:server向client发送请求释放连接
第四次挥手:当client收到server发送的请求释放连接,并向server发送确认请求释放连接。此时,server与client的连接已释放。即client与server之间的连接彻底释放。
标签:tcp
原文地址:http://10810429.blog.51cto.com/10800429/1834898