科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道Linux系统下广播程序制作介绍(上) (2)

Linux系统下广播程序制作介绍(上) (2)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

在一个IP(Internet Protocol)网络中,每一台计算机都有一个32位的IP地址。每台计算机的IP地址都是唯一的。WWW是一个范围十分大,并且不断增长的IP网络,所以网络上的每台计算机都必须有一个唯一的IP地址。

作者:meiyuan 来源:赛迪网技术社区 2007年10月22日

关键字: 操作系统 制作 广播 Linux

  • 评论
  • 分享微博
  • 分享邮件
 

Linux的BSD 套接口支持下面的几种套接口类型:

1. 流式(stream)

这些套接口提供了可靠的双向顺序数据流连接。它们可以保证数据传输中的完整性、正确性和单一性。INET寻址族中的TCP协议支持这种类型的套接口。

数据流套接口是可靠的双向连接的通信数据流。如果你在套接口中以“ 1, 2”的顺序放入两个数据,它们在另一端也会以“1, 2”的顺序到达。它们也可以被认为是无错误的传输。

经常使用的telnet应用程序就是使用数据流套接口的一个例子。使用HTTP的WWW浏览器也使用数据流套接口来读取网页。事实上,如果你使用telnet 登录到一个WWW站点的8 0端口,然后键入“GET 网页名”,你将可以得到这个HTML页。数据流套接口使用TCP得到这种高质量的数据传输。数据报套接口使用UDP,所以数据报的顺序是没有保障的。数据报是按一种应答的方式进行数据传输的。

2. 数据报(Datagram)

这种类型的套接口也可以像流式套接口一样提供双向的数据传输,但它们不能保证传输的数据一定能够到达目的节点。即使数据能够到达,也无法保证数据以正确的顺序到达以及数据的单一性、正确性。U D P协议支持这种类型的套接口。

3. 原始(Raw)

这种类型的套接口允许进程直接存取下层的协议。

4. 可靠递送消息(Reliable Delivered Messages)

这种套接口和数据报套接口一样,只能保证数据的到达。

5. 顺序数据包(Sequenced Packets)

这种套接口和流式套接口相同,除了数据包的大小是固定的。

6. 数据包(Packet)

这不是标准的BSD 套接口类型,而是Linux 中的一种扩展。它允许进程直接存取设备层的数据包。

基本套接口选项

SO_KEEPALIVE

检测对方主机是否崩溃,避免(服务器)永远阻塞于TCP连接的输入。 设置该选项后,如果2小时内在此套接口的任一方向都没有数据交换,TCP就自动给对方 发一个保持存活探测分节(keepalive probe)。这是一个对方必须响应的TCP分节.它会导致以下三种情况:

对方接收一切正常:以期望的ACK响应。2小时后,TCP将发出另一个探测分节。

对方已崩溃且已重新启动:以RST响应。套接口的待处理错误被置为ECONNRESET,套接 口本身则被关闭。 对方无任何响应:源自berkeley的TCP发送另外8个探测分节,相隔75秒一个,试图得到 一个响应。在发出第一个探测分节11分钟15秒后若仍无响应就放弃。套接口的待处理错 误被置为ETIMEOUT,套接口本身则被关闭。如ICMP错误是“host unreachable(主机不 可达)”,说明对方主机并没有崩溃,但是不可达,这种情况下待处理错误被置为EHOSTUNREACH。

SO_RCVBUF和SO_SNDBUF 每个套接口都有一个发送缓冲区和一个接收缓冲区。 接收缓冲区被TCP和UDP用来将接收到的数据一直保存到由应用进程来读。 TCP:TCP通告另一端的窗口大小。 TCP套接口接收缓冲区不可能溢出,因为对方不允许发出超过所通告窗口大小的数据。 这就是TCP的流量控制,如果对方无视窗口大小而发出了超过宙口大小的数据,则接 收方TCP将丢弃它。 UDP:当接收到的数据报装不进套接口接收缓冲区时,此数据报就被丢弃。UDP是没有 流量控制的;快的发送者可以很容易地就淹没慢的接收者,导致接收方的UDP丢弃数据报。

SO_LINGER

指定函数CLOSE对面相连接的协议如何操作——当由数据残留在套接口发送缓冲区时的处理 LINGER结构

struct linger { int l_onoff; 
// 0=off, nonzero=on int l_linger; //linger time in seconds };

SO_RCVLOWAT 和SO_SNDLOWAT

每个套接口都有一个接收低潮限度和一个发送低潮限度。它们是函数select使用的, 接收低潮限度是让select返回“可读”而在套接口接收缓冲区中必须有的数据总量。 ——对于一个TCP或UDP套接口,此值缺省为1。发送低潮限度是让select返回“可写” 而在套接口发送缓冲区中必须有的可用空间。对于TCP套接口,此值常缺省为2048。 对于UDP使用低潮限度, 由于其发送缓冲区中可用空间的字节数是从不变化的,只要 UDP套接口发送缓冲区大小大于套接口的低潮限度,这样的UDP套接口就总是可写的。 UDP没有发送缓冲区,只有发送缓冲区的大小

SO_BROADCAST套接口选项

这个选项能够让我们使能或者禁止套接口的发送广播能力。只能在数据报模式下使用广播,并且还必须是支持广播消息的以太网等网络上。如果是点对点的链路上就无法办到这一点。

因为使能广播的功能必须显式执行。因此可以避免一些UDP程序无意中把广播地址当作目的地址进行发送。但是Linux在处理广播地址的时候,不是由用户来识别的,在用户空间所看到的地址格式是没有差别的。一直到内核才会识别出广播地址出来,并加以相应的处理。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章