首页 > 系统相关 >Linux网络编程: socket(链路层)

Linux网络编程: socket(链路层)

时间:2023-07-08 15:33:12浏览次数:53  
标签:protocol socket AF SOCK Linux 接字 连接 链路层

Linux网络编程: socket(链路层)

socket是什么

在Linux中的网络编程是通过socket接口来进行的。其实socket接口也是一种特殊的I/O(在《深入理解计算机系统》这本书中的IO部分也有提到网络也是一种特殊的IO),它也是一种文件描述符。socket也有一个类似于打开文件的函数调用,该函数返回一个整型的socket描述符,随后的建立连接、数据传输等操作都是通过socket来实现的。

socket的类型
  1. 流式socket(SOCK_STREAM)流式套接字使用的是TCP协议,由于TCP协议建立在三次握手的基础上,所以这种类型能够提供可靠的、面向连接的通信流,能够保证数据传输的正确性和顺序性
  2. 数据报socket(SOCK_DGRAM)数据报套接字使用的是UDP协议,由于UDP将数据扔出去之后就不管的桀骜特性,所以该类型定义了一种无连接的服务,数据通过相互独立的报文进行传输,是无序的,并且不保证是可靠、无差错的
  3. 原始socket原始套接字(如SOCK_RAW)允许对底层协议如IP或ICMP(在网络层,而TCP和UDP都在传输层)进行直接访问,功能比较强大但是使用不便,主要用于一些协议的开发
#include <sys/types.h>
#include <sys/socket.h>
int socket(int domain, int type, int protocol);


Socket函数中的三个参数其实就是把抽象的socket具体化的条件,domain参数决定了图中所示的第二层通信域,type决定了第三层的通信模式,protocol决定了第四层真正的通信协议。

可供选择的domain

Name Purpose
AF_UNIX, AF_LOCAL Local communication
AF_INET IPv4 Internet protocols
AF_INET6 IPv6 Internet protocols
AF_IPX IPX - Novell protocols
AF_NETLINK Kernel user interface device
AF_X25 ITU-T X.25 / ISO-8208 protocol
AF_AX25 Amateur radio AX.25 protocol
AF_ATMPVC Access to raw ATM PVCs
AF_APPLETALK AppleTalk
AF_PACKET Low level packet interface
AF_ALG Interface to kernel crypto API

可供选择的type

Name Purpose
SOCK_STREAM 提供排序、可靠、双向、基于连接的字节流。可能支持带外数据传输机制。
SOCK_DGRAM 支持数据报(固定最大长度的无连接、不可靠消息)
SOCK_SEQPACKET 为固定最大长度的数据报提供有序、可靠、基于双向连接的数据传输路径;使用者需要在每次输入系统调用时读取整个数据包
SOCK_RAW 提供原始网络协议访问
SOCK_RDM 提供可靠的数据报层,不保证排序
SOCK_PACKET 已过时,不应在新程序中使用
... ...

protocol
用于制定某个协议的特定类型,即type类型中的某个类型。通常某协议中只有一种特定类型,这样protocol参数仅能设置为0;但是有些协议有多种特定的类型,就需要设置这个参数来选择特定的类型。

  1. SOCK_STREAM的套接字表示一个双向的字节流,与管道类似。流式的套接字在进行数据收发之前必须已经连接,连接使用 connect() 函数进行。一旦连接,可以使用read()或者write()函数进行数据的传输。流式通信方式保证数据不会丢失或者重复接收,当数据在一段时间内任然没有接受完毕,可以认为这个连接已经死掉。
  2. SOCK_DGRAM和SOCK_RAW 这个两种套接字可以使用函数 sendto() 来发送数据,使用recvfrom()函数接受数据,recvfrom()接受来自制定IP地址的发送方的数据。
  3. SOCK_PACKET是一种专用的数据包,它直接从设备驱动接受数据。
  4. ...

关于socket的更多信息可以在Linux下使用man socket查看

参考文献:
https://www.cnblogs.com/zhangshenghui/p/6097492.html
https://blog.csdn.net/liuxingen/article/details/44995467

标签:protocol,socket,AF,SOCK,Linux,接字,连接,链路层
From: https://www.cnblogs.com/await0/p/17536656.html

相关文章

  • 关于Azure-平台-Redhat-Linux-服务器时间同步的问题解决
    首先说明一下,关于Azure平台中国区,是没有RedhatLinux系统镜像的于是笔者这边是通过在Windows系统 Hyper-V管理器中安装完Redhat8.x操作系统后,最后将系统磁盘转换成转换为VHD格式然后经过一系列操作、最终在Azure平台上形成了自己的并且加固过的RedHatEnterpriseLinuxre......
  • Linux 系统性能优化
    一、影响Linux性能的各种因素1、系统硬件资源(1)CPU如何判断多核CPU与超线程消耗CPU的业务:动态web服务、mail服务(2)内存物理内存与 swap的取舍选择64位Linux操作系统消耗内存的业务:内存数据库(redis/hbase/mongodb)(3)磁盘IORAID技术(RAID0/1/5/01/10......
  • linux nginx文件配置
    在linux系统部署项目时,通常会选择nginx进行项目的部署下面就把我的实际部署配置文件给大家分享下:1:https证书的配置通常是监听443端口,并配置对应的域名证书server{ listen443ssl; server_namewww.youname.com;#改成你的域名ssl_certificate /usr/local/ngin......
  • 实战|如何在Linux 系统上免费托管网站
    动动发财的小手,点个赞吧!Web服务器可用于指代硬件和软件,或者两者一起工作。出于本指南的目的,我们将重点关注软件方面,并了解如何在Linux机器上托管网站。Web服务器是一种通过HTTP/HTTPS协议接收并响应客户端请求的软件程序。其主要目的是显示网站内容,这些内容通常采用文本、......
  • linux
    linux简介不同应用领域的操作系统Linux系统历史linux安装安装方式介绍安装Linux密钥:YG5H2-ANZ0H-M8ERY-TXZZZ-YKRV8。点击新建虚拟机。进入虚拟机,按ctrl+alt退出来。root密码:root网卡设置安装SSH连接工具linux目录结构linux常用命令l......
  • linux系统综合
    拓扑图:推荐步骤:在Centos01和Centos02上安装DNS服务器配置主从复制,,Centos01为主DNSCEntos02为辅助DNS服务器,DNS区域名字位benet.com,添加NS记录指向Centos01和Centos02,添加ftp记录指向Centos03主机IP地址在Centos03配置dhcp,下发网段192.168.100.0/24,下发网关为192.168.100.254,根据拓......
  • Linux权限理解
    一、Linux用户的概念1.普通用户除root用户以外的用户都是普通用户,普通用户的权限受到制约2.超级用户(root)root用户也就是超级用户,不受权限的约束二、不同用户之间的转换1.普通用户切换root用户指令:su如上图所示,普通用户lj的命令行提示符为 $,切换root用户只需要输入指令:su,然......
  • Linux中Postfix反病毒和垃圾邮件(十)
    摘自:http://www.ywnds.com/?p=1817 amavisd-newamavisd-new呼叫器是一个连接MTA和内容检测工具(诸如病毒扫描工具和SpamAssassin)的高性能接口程序,使用perl语言写成。它一般通过SMTP、ESMTP或者LMTP和MTA进行通讯,可以将位于队列的邮件取出来,调用ClamAV对邮件进行病毒扫描,调用Sp......
  • Linux中Postfix邮件认证配置(五)
    摘自:http://www.ywnds.com/?p=1784Postfix+Dovecot+Sasl工作原理1.A用户使用MUA客户端借助smtp协议登陆smtpd服务器,需要先进行用户和密码认证,而SMTPD服务器端支持sasl认证,例如有一个sasl客户端,就会去连接SASL。当SASL接受到验证请求时就会根据验证方式去进行验证,常用的有PAM,pass......
  • Linux中Postfix虚拟用户及虚拟域(六)
    摘自:http://www.ywnds.com/?p=1797 Postfix基于虚拟用户虚拟域的邮件架构 上图是一个几乎完整的邮件系统架构图,这里基于Mysql数据库进行用户认证,不管是Postfix、Dovecot、webmail都需要去Mysql数据库中进行用户认证。1、用户可以基于outlook连接postfix然后通过Courier-au......