随笔-15  评论-10  文章-1  trackbacks-0
1、struct socket表示一个BSD Socket,BSD Socket是一个编程模型,可以看成是一套比较固定的函数接口;
2、struct sock是传输层的struct socket。一个sock在逻辑上应该包含:
      (1)N个链表,用于存储发送数据和接受到的数据;
      (2)代表传输层、网络层和链路层的函数指针集。这里的一个函数指针集对应的应该就是一个编程模型,比如UDP模型或TCP模型。
3、TCP的特点:面向连接,基于流
         TCP 这种方式中,底层应该维护了一个复杂的state machine和N个链表以保证数据的不丢失。由于TCP基于流,所以就存在自动组报问题。比如你的发送缓冲设为2 bytes,你发送了2条1 byte的消息,接受端只收到1条2bytes的消息,于是接受端需要自己解析消息。

4、 UDP的特点:没有连接,基于消息。
       坏处是消息可能丢失,但是接收端不需要自己解析消息。
5、SCTP的特点:面向连接,基于消息




posted on 2007-03-09 01:01 hzb 阅读(1571) 评论(1)  编辑 收藏 引用

评论:
# re: Linux kernel下实现Socket通讯 2007-06-16 00:20 | go-benny
如果系统采用tcp通讯,socket通过3次握手建立起连接后,如果一端主动发起断开连接,tcp会通过4次握手把连接关闭,连接的另一方有个被动关闭连接的行为。但是如果一端是异常断开,比如系统突然kernel panic,此时另外一端为就会认它的连接仍然是正常的(tcp没有心跳的机制),只有等到它尝试发包失败后才知道。如何避免这种情况呢?我目前的解决方式就是人为的加个心跳检测机制,心跳是采用udp的方式实现,后来发现用udp实现心跳也有弊端,比如,当系统磁盘发生io错误导致系统接近死亡边缘的时候,由于cpu和中断都被占着,网络及容易丢包,从而导致误判。  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理