基于tcp/ip协议的网络编程的一点感悟 ---关于ip和port作为通讯一端的唯一标识的认识

来源:互联网 发布:proxifier linux 编辑:程序博客网 时间:2024/05/26 02:51

      对于基于tcp的应用程序来说,无论是客户端,还是服务器端,唯一标识对端id的是socket pair {本地ip:本地port, 远端ip:远端port}

,底层的ip协议数据包肯定包含源ip和port,目的ip和port, 当此数据包到达目的地时,目标主机的tcp连接就会匹配此连接的soket pair是否和数据包的socket pair 相同,如果相同,则数据进入tcp流队列,等待应用程序获取,如果应用程序此时堵死在处理程序中,导致数据包没有被取走,那么网络上过来的数据包就不会进入tcp流队列,而是被丢弃,并返回给对端当前可用缓冲为0,从而对端也堵死在那里,就像一条水管,如果一端被堵死,那么另一端的水就进不来,如果此端很顺畅,那么水在管道中流的也很顺畅,所以此协议被成为流协议。

      对于基于udp的应用程序也是一样,无论是组播,还是广播,如果ip数据包到达目的端,udp收包函数匹配socket pair {本地ip:本地port, 远端ip:远端port},不如不相同,则丢弃,并从ip队列中删除,如此客户端一直往对端仍数据,而不管对端缓冲队列是否已经满,服务器端缓冲队列如果已满,则直接丢弃后来的数据。所以成为数据报协议。

      同时也终于明白了如下内容的意义:

 第一列代表协议类型, 第二列代表socket pair 的本地ip和port,第三列代表socket pair 的远端ip和port,第四列代表当前连接的状态。

原创粉丝点击