




已阅读5页,还剩22页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1. 网络模型:2. UDP3. TCP的三次握手协议(socket连接):4. 连接终止(4次)首先:主动方A调用close会导致一个tcp 发送fin分节发送给B。 (这里是tcp自动发送的,内核驱动的)。然后:B接收到fin之后给A一个ACK信号进行确认(这个ack也是内核发送的)。接下来:B应用进程收到fin之后,调用close,导致发一个fin分节给A最后:发送一个给进行确认, 5. 状态转化图:6. 对上面的time_wait状态的一个解释: 这就是为什么执行mdbbar net然后cut掉的时候,用netstat 看还是有time_wait状态的socket的原因了。 7. 解析MSL。 超时重传分组。8. 套接口对:9. 缓冲区大小(Maxitum Segment Size 最大分段大小)。10. 如何发送读取数据(套接口发送缓冲区)(下面的信息很重要)11. UDP如何发送数据12. TCP/UDP小结13. 字节序:14. 端口,地址转换。15. 自实现的readn ,written 上面2个函数类似smdb中的send_all与recv_all函数。都是一个封装的函数16. socket函数AF_XXXX其中,AF表示地址族,address family17. connect函数18. bind函数19. listen函数Backuplog的意思大概为: 等待队列和已完成3次握手队列的总和。 比如如果backlog=2, 那么,如果等待队列中有1个请求,已完成队列中有1个请求,如果客户端再来一个请求,则会被忽略。20. accept函数21. fork函数22. 并发服务器23. close函数24. getsocketname 和getpeername函数25. netstat显示网络状态26. RST分节UNIX网络编程中RST分节总结RST的含义为“复位”,它是TCP在某些错误情况下所发出的一种TCP分节。有三个条件可以产生RST: 1), SYN到达某端口但此端口上没有正在监听的服务器。 2), TCP想取消一个已有连接 3), TCP接收了一个根本不存在的连接上的分节。1Connect 函数返回错误ECONNREFUSED:如果对客户的SYN的响应是RST,则表明该服务器主机在我们指定的端口上没有进程在等待与之连接(例如服务器进程也许没有启动),这称为硬错(hard error),客户一接收到RST,马上就返回错误ECONNREFUSED.TCP为监听套接口维护两个队列。两个队列之和不超过listen函数第二个参数backlog。当一个客户SYN到达时,若两个队列都是满的,TCP就忽略此分节,且不发送RST.这个因为:这种情况是暂时的,客户TCP将重发SYN,期望不久就能在队列中找到空闲条目。要是TCP服务器发送了一个RST,客户connect函数将立即发送一个错误,强制应用进程处理这种情况,而不是让TCP正常的重传机制来处理。还有,客户区别不了这两种情况:作为SYN的响应,意为“此端口上没有服务器”的RST和意为“有服务器在此端口上但其队列满”的RST.Posix.1g允许以下两种处理方法:忽略新的SYN,或为此SYN响应一个RST.历史上,所有源自Berkeley的实现都是忽略新的SYN。2如果杀掉服务器端处理客户端的子进程,进程退出后,关闭它打开的所有文件描述符,此时,当服务器TCP接收到来自此客户端的数据时,由于先前打开的那个套接字接口的进程已终止,所以以RST响应。 经常遇到的问题: 如果不判断read , write函数的返回值,就不知道服务器是否响应了RST, 此时客户端如果向接收了RST的套接口进行写操作时,内核给该进程发一个SIGPIPE信号。此信号的缺省行为就是终止进程,所以,进程必须捕获它以免不情愿地被终止。 进程不论是捕获了该信号并从其信号处理程序返回,还是不理会该信号,写操作都返回EPIPE错误。3服务器主机崩溃后重启如果服务器主机与客户端建立连接后崩溃,如果此时,客户端向服务器发送数据,而服务器已经崩溃不能响应客户端ACK,客户TCP将持续重传数据分节,试图从服务器上接收一个ACK,如果服务器一直崩溃客户端会发现服务器已经崩溃或目的地不可达,但可能需要比较长的时间; 如果服务器在客户端发现崩溃前重启,服务器的TCP丢失了崩溃前的所有连接信息,所以服务器TCP对接收的客户数据分节以RST响应。27. I/O 模型:28. select函数过去,一个fd_set通常只能包含32的fd(文件描述字),因为fd_set其实只用了一个32位矢量来表示fd;现在,UNIX系统通常会在头文件中定义常量FD_SETSIZE,它是数据类型fd_set的描述字数量,其值通常是1024,这样就能表示1024的fd。根据fd_set的位矢量实现,我们理解操作fd_set的四个宏fd_set set; FD_ZERO(&set);FD_SET(0, &set);FD_CLR(4, &set);FD_ISSET(5, &set); 第一个参数maxfdl表示从0开始到maxfdl-1中间,查找状态有变化的fd。 所以maxfd1必须为三个fd中的最大fd , 然后加上1.29. shutdown函数:RWWR参数与close的区别是:close会判断链接数,如果连接数大于1, 则不会close掉该链接。30. IO复用31. getsocket, setsocket函数下面这个很重要:也就是说:如果服务器端接收了一个client_fd, 为了让client_fd具有上面选项,那么就必须给服务器的监听fd设置此选项。32. 检测各种tcp条件的方法33. SO_LINGER34. SO_RCVBUF, SO_SNDBUF套接口选项。即:sndbuf, rcvbuf必须在连接(connect)或监听(listen)之前就设置好。35. SO_RCVLOWAT, SO_SNDLOWAT36. SO_RCVTIMEO SO_SNDTIMEO37. SO_TYPE38. FCNTL函数虽然其他的函数比如ioctl也可以设置,但是用fcntl最理想。39. x40. x41. x42. x43. x44. x45. x4
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论