2014-07-15 14 views
0

Oui, j'ai déjà essayé de trouver des informations à ce sujet.Différence entre les types de socket

La documentation socket Python a cette liste de ce que je crois sont des protocoles:

SO_* 
socket.SOMAXCONN 
MSG_* 
SOL_* 
IPPROTO_* 
IPPORT_* 
INADDR_* 
IP_* 
IPV6_* 
EAI_* 
AI_* 
NI_* 
TCP_* 

Que font-ils exactement? Disons que j'ai utilisé

s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_IP) 

Qu'est-ce que cela fait? Je comprends que c'est un socket brut, mais est-ce que IPPROTO_IP signifie que je dois tout construire? (c'est-à-dire l'en-tête IP jusqu'au TCP vers les données?)

La documentation Python indique que je peux trouver des informations sur ce qui précède dans la documentation Unix sur les sockets, mais je n'ai pas pu trouver le document. Quelqu'un sait où c'est?

+0

Oui, IPPROTO_IP signifie IP brut, et vous ne le voulez probablement pas. (Bien que vous n'ayez pas besoin de construire l'en-tête IP, seulement l'en-tête TCP.) Pour ce qui est de la documentation, essayez http://linux.die.net/man/7/socket. – Sneftel

+0

Merci, très apprécié. Donc, juste pour être sûr, si j'ai utilisé (IPPROTO_IP) cela signifie que tout protocole vers le haut de IP doit être construit par moi? Donc, si j'utilisais TCP, je construirais des têtes TCP, UDP, etc ...? – user3842825

+0

Droite. De plus, pour TCP, vous devrez implémenter votre propre handshaking, accusés de réception, retransmission, etc. – Sneftel

Répondre

2

Il y a beaucoup de pages de manuel Linux décris socket:

En général, nous utilisons ces arguments pour socket:

  1. famille Adresse: AF_INET pour la famille d'adresse de domaine internet, AF_UNIX pour la famille d'adresse de domaine UNIX.

  2. Type de socket: SOCK_STREAM pour TCP, SOCK_DGRAM pour UDP. Bien sûr, vous pouvez utiliser SOCK_RAW pour accéder directement au protocole IP. Protocole: lors de l'utilisation de TCP ou UDP, laissez 0 à 0; lorsque vous utilisez RAW, vous pouvez spécifier le protocole à 0, IPPROTO_TCP pour les sockets TCP, IPPROTO_UDP pour les sockets UDP.

Et, SO_ signifie "option de socket", SOL_ signifie "niveau d'option socket", qui sont utilisés pour définir les options de socket par setsockopt (également mentionné dans SOCKET).

En fait, vous pouvez trouver plus de pages au bas de ces pages dans la section SEE ALSO. Notez que la page de 2 ou 3 est une fonction concrète d'appel système ou de bibliothèque, les pages 7 sont ce dont vous avez besoin.

Questions connexes