我们在编写网络通信程序的时候,不论作为服务端还是客户端,常常需要确保实时检测与对方的连接状态,调用select函数监控文件描述符(套接字)的连接状态是最普遍的方法,但是当遇到对方断电或者网络线路突然断开的情况,select函数将接收不到来自对方的断开消息,所以维护着这一连接的文件描述符(套接字)已经没有存在的意义,这个时候往该文件描述符(套接字)内写内容依然不会返回错误,read也会堵塞着并不返回错误。因此也无法断定该套接字是否还处于连接状态,我们可以通过开启TCP的keepAlive选项来让TCP连接自身维护自己的连接状态,详见《Linux下回收异常断开的TCP连接》,但是倘若要及时检测网络连通性,不得不频繁地发心跳包,势必会影响通信带宽,不是很理想。 阅读全文
分章分类 : 网络
一、OSI七层协议体系结构(从底层到上层排序):
1、物理层:将数据转换成电子信号并通过物理介质传输,形如邮局的搬运工人,例如ISO2110,IEEE802,IEEE802.2协议。
2、数据链路层:决定网络介质访问的方式,形如邮局的打包工人,例如SLIP,CSLIP,PPP,ARP,RARP,MTU协议。
3、网络层:为数据包选择路由,形如邮局的排序工人,例如IP,ICMP,RIP,OSPF,BGP,IGMP协议。
4、传输层:提供端对端连接,形如邮局的邮递员,例如TCP,UDP协议;
5、会话层:允许用户使用简单易记的名称建立连接,形如公司中收寄信、拆信封与装信封的秘书;
6、表示层:协商数据交换格式,形如公司中替老板写信写简报的助理;
7、应用层:应用程序与网络之间的接口,形如公司的老板,例如TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 协议。 阅读全文
为了查看本地访问远程IP所经过的路径,我们可以通过跟踪路由来实现,最常用的用命恐怕要属Windows下的tracert跟Linux下的traceroute了。直观的ping命令可以判断出本地与远程目标地址之间的访问速度,当我们ping不通的时候,可以使用tracert或者traceroute命令来找出通信断在哪一个路由节点。 阅读全文