网络编程笔记

网络编程笔记

ID:41037587

大小:1.88 MB

页数:27页

时间:2019-08-14

网络编程笔记_第1页
网络编程笔记_第2页
网络编程笔记_第3页
网络编程笔记_第4页
网络编程笔记_第5页
资源描述:

《网络编程笔记》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、1.网络模型:2.UDP3.TCP的三次握手协议(socket连接):1.连接终止(4次)首先:主动方A调用close会导致一个tcp发送fin分节发送给B。(这里是tcp自动发送的,内核驱动的)。然后:B接收到fin之后给A一个ACK信号进行确认(这个ack也是内核发送的)。接下来:B应用进程收到fin之后,调用close,导致发一个fin分节给A最后:A发送一个ACk给B进行确认,1.状态转化图:1.对上面的time_wait状态的一个解释:这就是为什么执行mdbbar–net然后cut掉的时候,用netstat看还是有time_wait状态的sock

2、et的原因了。1.解析MSL。超时重传分组。2.套接口对:3.缓冲区大小(MaxitumSegmentSize最大分段大小)。1.如何发送读取数据(套接口发送缓冲区)(下面的信息很重要)1.UDP如何发送数据2.TCP/UDP小结1.字节序:2.端口,地址转换。1.自实现的readn,written上面2个函数类似smdb中的send_all与recv_all函数。都是一个封装的函数2.socket函数AF_XXXX其中,AF表示地址族,addressfamily1.connect函数2.bind函数1.listen函数Backuplog的意思大概为:等待

3、队列和已完成3次握手队列的总和。比如如果backlog=2,那么,如果等待队列中有1个请求,已完成队列中有1个请求,如果客户端再来一个请求,则会被忽略。1.accept函数2.fork函数1.并发服务器2.close函数1.getsocketname和getpeername函数2.netstat显示网络状态1.RST分节UNIX网络编程中RST分节总结RST的含义为“复位”,它是TCP在某些错误情况下所发出的一种TCP分节。有三个条件可以产生RST:    1),SYN到达某端口但此端口上没有正在监听的服务器。    2),TCP想取消一个已有连接    

4、3),TCP接收了一个根本不存在的连接上的分节。1.  Connect函数返回错误ECONNREFUSED:如果对客户的SYN的响应是RST,则表明该服务器主机在我们指定的端口上没有进程在等待与之连接(例如服务器进程也许没有启动),这称为硬错(harderror),客户一接收到RST,马上就返回错误ECONNREFUSED.TCP为监听套接口维护两个队列。两个队列之和不超过listen函数第二个参数backlog。当一个客户SYN到达时,若两个队列都是满的,TCP就忽略此分节,且不发送RST.这个因为:这种情况是暂时的,客户TCP将重发SYN,期望不久就能

5、在队列中找到空闲条目。要是TCP服务器发送了一个RST,客户connect函数将立即发送一个错误,强制应用进程处理这种情况,而不是让TCP正常的重传机制来处理。还有,客户区别不了这两种情况:作为SYN的响应,意为“此端口上没有服务器”的RST和意为“有服务器在此端口上但其队列满”的RST.Posix.1g允许以下两种处理方法:忽略新的SYN,或为此SYN响应一个RST.历史上,所有源自Berkeley的实现都是忽略新的SYN。2.如果杀掉服务器端处理客户端的子进程,进程退出后,关闭它打开的所有文件描述符,此时,当服务器TCP接收到来自此客户端的数据时,由于

6、先前打开的那个套接字接口的进程已终止,所以以RST响应。    经常遇到的问题:          如果不判断read,write函数的返回值,就不知道服务器是否响应了RST,此时客户端如果向接收了RST的套接口进行写操作时,内核给该进程发一个SIGPIPE信号。此信号的缺省行为就是终止进程,所以,进程必须捕获它以免不情愿地被终止。          进程不论是捕获了该信号并从其信号处理程序返回,还是不理会该信号,写操作都返回EPIPE错误。3.  服务器主机崩溃后重启如果服务器主机与客户端建立连接后崩溃,如果此时,客户端向服务器发送数据,而服务器已经崩溃

7、不能响应客户端ACK,客户TCP将持续重传数据分节,试图从服务器上接收一个ACK,如果服务器一直崩溃客户端会发现服务器已经崩溃或目的地不可达,但可能需要比较长的时间;如果服务器在客户端发现崩溃前重启,服务器的TCP丢失了崩溃前的所有连接信息,所以服务器TCP对接收的客户数据分节以RST响应。1.I/O模型:2.select函数过去,一个fd_set通常只能包含<32的fd(文件描述字),因为fd_set其实只用了一个32位矢量来表示fd;现在,UNIX系统通常会在头文件中定义常量FD_SETSIZE,它是数据类型fd_set的描

8、述字数量,其值通常是1024,这样就能表示<1024的fd。根据f

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。