Douille (douille) est un mécanisme de communication, en vertu de ce mécanisme, client / serveur (qui est, pour mener à bien le processus de communication) développement du système peut être effectuée à la fois sur un stand-alone locale, peut également être effectuée à travers le réseau. Ce qui signifie qu'il ne peut pas permettre aux mêmes processus informatiques sur l'ordinateur pour communiquer, mais reliés par un réseau. Pour cette raison, la prise de distinguer clairement le client et la zone du serveur.
Une douille peut être considéré comme point final inter-processus (point final) de communication, le nom de chaque douille est unique (le seul sens va de soi), d'autres procédés peuvent découvrir, connecter et de communiquer. Domaine pour expliquer un protocole de communication de la communication socket, différents domaines de communication ont différents protocoles de communication et adresses des structures de prise, etc., par conséquent, lors de la création d'une prise, pour indiquer qu'un domaine de communication. Plus commun est le socket de domaine Unix (en utilisant le mécanisme de prise pour réaliser une communication inter-processus dans une seule machine) et le domaine de communication Internet.
Le côté client et côté service. Lorsque la nécessité d'une communication entre deux applications SOCKET, entre deux applications doivent d'abord (sur la même machine peut également être situé sur différentes machines) connexion établie SOCKET.
-
La partie à l'origine de la demande de connexion d'appel du côté client: côté client avant que la demande de connexion d'appel, il doit savoir où la partie de service. Il est donc nécessaire de connaître l'adresse IP ou le nom de la machine où le côté service de la machine, si le côté client et côté le service il y a un accord préalable comme cet accord est PORT (numéro de port). En d'autres termes, le côté client peut être une adresse IP ou le nom de la machine de la machine par le côté service et la seule façon de déterminer le numéro de port pour appeler le côté service.
-
Partie accepte la demande de connexion d'appel pour devenir le côté service: Avant d'appeler le côté client et côté service doit être dans un état d'écoute, s'il écoute les besoins du client pour établir une connexion. Lorsqu'il reçoit la demande de connexion, le service ou refuser la connexion peut être établie en fonction de la situation. Lorsqu'un message arrive sur le côté du service à la clientèle du port latéral, il déclenche automatiquement un événement (événement), tant que le côté service de prendre en charge l'événement, peut accepter un message du côté client.
processus de communication Socket: commencer à démarrer le serveur. Serveur initialisé Socket, le port de liaison (bind), écoute le port (écouter), accepter les appels bloqués, en attente pour les connexions client. À ce stade, si vous avez un client ouvre une socket, puis se connecter au serveur (connexion), si la connexion est réussie, puis connecter le client et le serveur est établie. Le client envoie une demande de données, le serveur reçoit la demande et traite la demande et envoie ensuite les données de réponse au client, le client lit les données, et enfin fermer la connexion, les extrémités d'une interaction.
Il y a trois caractéristiques de la prise de détermination d'attribut, ils sont les suivants: domaine (Domain), le type (type), et un protocole (protocole). Socket également utilisé l'adresse comme son nom. Avec le format du champ d'adresse (suite de protocoles également connu, la famille de protocole) diffère. Chaque suite de protocoles et peuvent utiliser une ou plusieurs adresses format d'adresse définie de la famille.
champ Protocole (domaine): également connu sous le nom de famille de protocole (famille). Il existe des protocoles communs AF_INET famille, AF_INET6, AF_LOCAL (également connu AF_UNIX, Unix socket de domaine) et similaires (famille d'adresse AF est courte).
- AF_INET: adresse IPv4 (32 bits) et le numéro de port (16 bits). Il fait référence à l'Internet. Lorsqu'un client utilise une connexion socket à travers le réseau, il utilise une adresse IP et le port de l'ordinateur serveur pour spécifier un service particulier sur une machine en réseau, si la prise d'utilisation en tant que critère d' évaluation de la communication, les applications serveur un port doit être lié avant le début de la communication, le serveur attend pour une connexion client dans le port spécifié. socket AF_INET, sa structure d'adresse décrite par sockaddr_in.
struct sockaddr_in {
__kernel_sa_family_t sin_family; /* Address family */
__be16 sin_port; /* Port number */
struct in_addr sin_addr; /* Internet address */
/* Pad to size of `struct sockaddr'. */
unsigned char __pad[__SOCK_SIZE__ - sizeof(short int) -
sizeof(unsigned short int) - sizeof(struct in_addr)];
};
/* Internet address. */
struct in_addr {
__be32 s_addr;
};
Le AF_INET6 : adresse IPv6 ( 128 bits ) et le numéro de port (16 bits). En plus des différences sur l'adresse, l'autre compatible avec AF_INET. prises de domaine AF_INET6, la structure est décrite par son adresse à sockaddr_in6.
struct sockaddr_in6 {
unsigned short int sin6_family; /* AF_INET6 */
__be16 sin6_port; /* Transport layer port # */
__be32 sin6_flowinfo; /* IPv6 flow information */
struct in6_addr sin6_addr; /* IPv6 address */
__u32 sin6_scope_id; /* scope id (new in RFC2553) */
};
- AF_LOCAL : également connu sous le nom AF_UNIX, représente le système de fichiers UNIX, il est l'entrée / sortie de fichier et son adresse est le nom du fichier. prises de domaine AF_UNIX, son adresse est décrite par des structures sockaddr_un.
struct sockaddr_un {
__kernel_sa_family_t sun_family; /* AF_UNIX */
char sun_path[UNIX_PATH_MAX]; /* pathname */
};
domaine Protocole (domaine) version Linux5.4.6 est définie comme suit:
/* Supported address families. */
#define AF_UNSPEC 0
#define AF_UNIX 1 /* Unix domain sockets */
#define AF_LOCAL 1 /* POSIX name for AF_UNIX */
#define AF_INET 2 /* Internet IP Protocol */
#define AF_AX25 3 /* Amateur Radio AX.25 */
#define AF_IPX 4 /* Novell IPX */
#define AF_APPLETALK 5 /* AppleTalk DDP */
#define AF_NETROM 6 /* Amateur Radio NET/ROM */
#define AF_BRIDGE 7 /* Multiprotocol bridge */
#define AF_ATMPVC 8 /* ATM PVCs */
#define AF_X25 9 /* Reserved for X.25 project */
#define AF_INET6 10 /* IP version 6 */
#define AF_ROSE 11 /* Amateur Radio X.25 PLP */
#define AF_DECnet 12 /* Reserved for DECnet project */
#define AF_NETBEUI 13 /* Reserved for 802.2LLC project*/
#define AF_SECURITY 14 /* Security callback pseudo AF */
#define AF_KEY 15 /* PF_KEY key management API */
#define AF_NETLINK 16
#define AF_ROUTE AF_NETLINK /* Alias to emulate 4.4BSD */
#define AF_PACKET 17 /* Packet family */
#define AF_ASH 18 /* Ash */
#define AF_ECONET 19 /* Acorn Econet */
#define AF_ATMSVC 20 /* ATM SVCs */
#define AF_RDS 21 /* RDS sockets */
#define AF_SNA 22 /* Linux SNA Project (nutters!) */
#define AF_IRDA 23 /* IRDA sockets */
#define AF_PPPOX 24 /* PPPoX sockets */
#define AF_WANPIPE 25 /* Wanpipe API Sockets */
#define AF_LLC 26 /* Linux LLC */
#define AF_IB 27 /* Native InfiniBand address */
#define AF_MPLS 28 /* MPLS */
#define AF_CAN 29 /* Controller Area Network */
#define AF_TIPC 30 /* TIPC sockets */
#define AF_BLUETOOTH 31 /* Bluetooth sockets */
#define AF_IUCV 32 /* IUCV sockets */
#define AF_RXRPC 33 /* RxRPC sockets */
#define AF_ISDN 34 /* mISDN sockets */
#define AF_PHONET 35 /* Phonet sockets */
#define AF_IEEE802154 36 /* IEEE802154 sockets */
#define AF_CAIF 37 /* CAIF sockets */
#define AF_ALG 38 /* Algorithm sockets */
#define AF_NFC 39 /* NFC sockets */
#define AF_VSOCK 40 /* vSockets */
#define AF_KCM 41 /* Kernel Connection Multiplexor*/
#define AF_QIPCRTR 42 /* Qualcomm IPC Router */
#define AF_SMC 43 /* smc sockets: reserve number for
* PF_SMC protocol family that
* reuses AF_INET address family
*/
#define AF_XDP 44 /* XDP sockets */
#define AF_MAX 45 /* For now.. */
Type (type): spécifie le type de support. Généralement les types de socket utilisé, SOCK_STREAM, SOCK_DGRAM, SOCK_RAW etc.
- SOCK_STREAM : sockets de flux (stream) spécifié par type SOCK_STREAM, qui sont connectés en œuvre via TCP / IP dans AF_INET domaine, mais aussi couramment utilisé type socket AF_UNIX. Est un flux ordonné, connexion fiable, prise flux d'octets bidirectionnel fourni, de sorte que la transmission de données peut être garantie pas perdu, en double ou arriver en dehors de l' ordre, mais il a aussi un certain mécanisme de retransmission d'erreur.
- SOCK_DGRAM : prise datagrammes (Datagram) spécifié par type SOCK_DGRAM, il n'a pas besoin d'établir une connexion et maintenir une connexion, ils sont généralement atteints par le protocole UDP / IP dans le AF_INET. Sa longueur des données qui peuvent être transmises est limitée, le paquet de données est transmis en tant que réseau de message distinct, il peut être perdu, copié ou l' arrivée de désordre, UDP n'est pas un protocole fiable, mais sa vitesse relativement élevée, parce qu'il fait toujours , nous devons établir et maintenir une connexion.
- Le SOCK_RAW : support brut (RAW) spécifié par le type SOCK_RAW, différente d'une douille SOCK_STREAM, SOCK_DGRAM, qui met en oeuvre le système de base de. Cependant, ce que les prises premières faire à ce sujet? Tout d'abord, les prises générales ne peuvent pas gérer ICMP, IGMP et d' autres paquets réseau et SOCK_RAW peut, d' autre part, SOCK_RAW peut également gérer les paquets IPv4 spéciaux; En outre, l'utilisation des sockets raw, option de socket peut IP_HDRINCL tête IP construit par l'utilisateur. Outre l' ensemble, le réseau SOCK_RAW peut gérer les paquets normaux peuvent également gérer certains paquets de protocole IP d'exploitation spéciales et la couche de données et au- dessus.
Type (type) version Linux5.4.6 est définie comme suit:
enum sock_type {
SOCK_STREAM = 1,
SOCK_DGRAM = 2,
SOCK_RAW = 3,
SOCK_RDM = 4,
SOCK_SEQPACKET = 5,
SOCK_DCCP = 6,
SOCK_PACKET = 10,
};
Protocole (protocole): protocoles communs ont, IPPROTO_TCP, IPPTOTO_UDP similaires, qui correspondent au protocole TCP, le protocole de transport UDP. ne peut pas être de type combiné librement et protocole, de même que les liens SOCK_SEQPACKET SOCK_STREAM et protocole de type orienté devraient être sélectionnés protocole de liaison tcp si orienté. Lorsque le protocole est 0, il sélectionne automatiquement un type de protocole par défaut correspondant.
- IPPROTO_TCP : protocole de transport TCP.
- SOCK_DGRAM : protocole de transport UDP.
Protocole (protocole) version Linux5.4.6 est définie comme suit:
/* Standard well-defined IP protocols. */
enum {
IPPROTO_IP = 0, /* Dummy protocol for TCP */
#define IPPROTO_IP IPPROTO_IP
IPPROTO_ICMP = 1, /* Internet Control Message Protocol */
#define IPPROTO_ICMP IPPROTO_ICMP
IPPROTO_IGMP = 2, /* Internet Group Management Protocol */
#define IPPROTO_IGMP IPPROTO_IGMP
IPPROTO_IPIP = 4, /* IPIP tunnels (older KA9Q tunnels use 94) */
#define IPPROTO_IPIP IPPROTO_IPIP
IPPROTO_TCP = 6, /* Transmission Control Protocol */
#define IPPROTO_TCP IPPROTO_TCP
IPPROTO_EGP = 8, /* Exterior Gateway Protocol */
#define IPPROTO_EGP IPPROTO_EGP
IPPROTO_PUP = 12, /* PUP protocol */
#define IPPROTO_PUP IPPROTO_PUP
IPPROTO_UDP = 17, /* User Datagram Protocol */
#define IPPROTO_UDP IPPROTO_UDP
IPPROTO_IDP = 22, /* XNS IDP protocol */
#define IPPROTO_IDP IPPROTO_IDP
IPPROTO_TP = 29, /* SO Transport Protocol Class 4 */
#define IPPROTO_TP IPPROTO_TP
IPPROTO_DCCP = 33, /* Datagram Congestion Control Protocol */
#define IPPROTO_DCCP IPPROTO_DCCP
IPPROTO_IPV6 = 41, /* IPv6-in-IPv4 tunnelling */
#define IPPROTO_IPV6 IPPROTO_IPV6
IPPROTO_RSVP = 46, /* RSVP Protocol */
#define IPPROTO_RSVP IPPROTO_RSVP
IPPROTO_GRE = 47, /* Cisco GRE tunnels (rfc 1701,1702) */
#define IPPROTO_GRE IPPROTO_GRE
IPPROTO_ESP = 50, /* Encapsulation Security Payload protocol */
#define IPPROTO_ESP IPPROTO_ESP
IPPROTO_AH = 51, /* Authentication Header protocol */
#define IPPROTO_AH IPPROTO_AH
IPPROTO_MTP = 92, /* Multicast Transport Protocol */
#define IPPROTO_MTP IPPROTO_MTP
IPPROTO_BEETPH = 94, /* IP option pseudo header for BEET */
#define IPPROTO_BEETPH IPPROTO_BEETPH
IPPROTO_ENCAP = 98, /* Encapsulation Header */
#define IPPROTO_ENCAP IPPROTO_ENCAP
IPPROTO_PIM = 103, /* Protocol Independent Multicast */
#define IPPROTO_PIM IPPROTO_PIM
IPPROTO_COMP = 108, /* Compression Header Protocol */
#define IPPROTO_COMP IPPROTO_COMP
IPPROTO_SCTP = 132, /* Stream Control Transport Protocol */
#define IPPROTO_SCTP IPPROTO_SCTP
IPPROTO_UDPLITE = 136, /* UDP-Lite (RFC 3828) */
#define IPPROTO_UDPLITE IPPROTO_UDPLITE
IPPROTO_MPLS = 137, /* MPLS in IP (RFC 4023) */
#define IPPROTO_MPLS IPPROTO_MPLS
IPPROTO_RAW = 255, /* Raw IP packets */
#define IPPROTO_RAW IPPROTO_RAW
IPPROTO_MAX
};