码迷,mamicode.com
首页 > 其他好文 > 详细

网络编程中的tcp连接若干问题

时间:2020-10-13 16:50:48      阅读:21      评论:0      收藏:0      [点我收藏+]

标签:连接   而且   设计   网络编程   splay   重复   nbsp   维护   盲打   

1.  什么是Berkeley ?

技术图片

 

 

2. 关于IO multiplexing 和 blocking IO 以及 nonblocking IO

在陈硕的 多线程服务器编程一书的204页有如下描述:

IO multiplexing一般不能和blocking IO用在一起,因为 blocking IO中read()/write()/accept()/connect()都可能阻塞当前线程,这样线程就没有办

法其它socket上的事件了。 参见UNP 16.6节中的例子。

 

 

解读:

关于阻塞IO和多路复用,之间在学习epoll的时候确实出现过一种情况:当epoll的触发模式被设置为lt的时候,IO模式必须为非阻塞。

 

下面叙述在UNP 看到的内容:

TIME_WAIT状态

1. 执行主动关闭的那一端经历了这个状态。

2. 迷途的重复分组 或 漫游的重复分组。

3. TIME_WAIT状态存在的两个理由:

     1)可靠的实现TCP全双工连接的终止。

     2) 允许老的重复分节在网络上消失。

     关于1):

           假设四次挥手的时候最后一个ACK丢失,这时服务器由于超时会重新发送它的最终那个FIN,因此客户必须维护状态信息,以允许它重新发送最终的那个ACK,

要是客户端不维护状态信息,它将响应以一个RST,该分节将被服务器解释为一个错误。

     关于2):

           这个之前谢希仁解释过了。  就是等本次连接产生的所有分组在网络链路上完全消失。

 

关于RST报文  https://blog.csdn.net/yusiguyuan/article/details/22885667

出现RST分节的情况可以在三种情况下发生,在连接建立时、在中间发送数据时、在连接关闭时

1.  连接建立时出现RST回应的情况有:发送一个不存在的端口,想一个Listen的套接字或者端口上发送数据分节(不是创建连接的分节)

2.  发送数据时出现RST分节的情况有:数据出现错误、不是按照seq要求来发送数据时

3.  连接终止时发送RST分节的情况有:如果在关闭的时候设置了套接字选项,l_linger,那么在关闭的时候可能会出现RST分节

发送RST报文后的策略:

在TCP协议中RST表示复位,用来异常的关闭连接,在TCP的设计中它是不可或缺的。发送RST包关闭连接时,不必等缓冲区的包都发出去,

直接就丢弃缓存区的包发送RST包。而接收端收到RST包后,也不必发送ACK包来确认。

 

 

网络编程的函数调用过程:

技术图片

 

 

这里说一下connect函数: 参见UNP  P80

1. 如果是TCP套接字, 调用connect函数将激发TCP的三路握手,而且仅在连接建立成功或出错时才返回。  

 

关于套接字选项:linger   参见UNP  P159

 

总结:  当connect发起连接后将激发三次握手,三次握手成功后可调用accept函数接受连接。

 

UNP 16.6节中的例子

 

以后写好难敲啊  不会盲打

 

 

 

 

 

 

网络编程中的tcp连接若干问题

标签:连接   而且   设计   网络编程   splay   重复   nbsp   维护   盲打   

原文地址:https://www.cnblogs.com/xiongxinxzy/p/13797792.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!