对网络连接的理解
一、连接有两类,一类是实连接,例如打固定电话,在线路上固定占用了一个通道,这个通道在通话期间是一直存在的;另一类是虚连接,TCP的连接就是这种,客户端连接到服务器端后,连接虽然建立了,但是实际上物理上并不是真正存在这样的通道。他们之间的连接是靠之间的数据包的往来确立的。所以,对于两台机器之间网络断掉,相互是不可能知道的,并没有什么东西能通知双方,而只能是通过事后发送数据包才能出现了问题,具体什么问题还需要进行判断。一般tcp连接都需要使用一些技术手段来维持,有两种方法:一是利用tcp协议本身,设置SO_KEEPALIVE;二是应用层增加链路检测包。
二、要明白应用进程和内核之间的区别,我们写一般的sokect程序,应用程序只是调用系统提供的函数接口,真正的实现都是内核来完成的,由于网络的特殊性,socket函数有着自己的一些特性,其收发函数都只是本机之间的操作,并不真正涉及到网络。例如send发送函数,返回成功只是表示我们把数据给了内核的发送缓冲区,并不是已经从网卡发送出去了,至于是否发送成功,send函数本身是不可能获得的;接收函数类似,只是表示从内核接收缓冲区拷贝到应用进程成功。
二、要明白应用进程和内核之间的区别,我们写一般的sokect程序,应用程序只是调用系统提供的函数接口,真正的实现都是内核来完成的,由于网络的特殊性,socket函数有着自己的一些特性,其收发函数都只是本机之间的操作,并不真正涉及到网络。例如send发送函数,返回成功只是表示我们把数据给了内核的发送缓冲区,并不是已经从网卡发送出去了,至于是否发送成功,send函数本身是不可能获得的;接收函数类似,只是表示从内核接收缓冲区拷贝到应用进程成功。