TCP报文交互
A向B发送了数据报文1,B收到后向A发送确认报文ACK1。B解析数据报文1,然后向AP发送数据报文2,A收到后向B发送确认报文ACK2。
以下是打开一个博客的交互过程的报文
TCP超时
总的来说,TCP可能有三个超时
1)连接超时
2)读超时,即阻塞在读的地方(应用层),比如B没有收到数据报文1而阻塞,或者A没有收到数据报文2而阻塞。
3)写超时,即阻塞在写的地方(即发送的地方,协议栈),数据没有发送成功,因对方没有回应收到数据,注意此处的回应并不会到读缓冲(即输入缓冲),而是在协议栈中就处理这个回应了。比如A发送数据报文1后,没有收到ACK1。
(socket是属于应用层,传输层在协议栈中,协议栈是属于内核层的。)
TCP长连接要处理的超时
鉴于要建立一条TCP长连接,上面的超时不用处理。要处理的超时是:长时间没有收到服务器对请求的回复。这种超时得针对具体请求,在发出该请求后,服务器在一定时间有没有回复该请求,或者客户端在一定时间没有收到服务器的回复,从而判断为超时。比如A发出请求报文(数据报文1)后,在一定时间内没有收到B回复A请求的报文(数据报文2),则A就可以判断为超时。