Resumen de conocimientos de programación de redes

1. Resumen de conocimientos sobre programación de redes

Java es un lenguaje en Internet que proporciona soporte para aplicaciones de red desde el nivel del lenguaje, y los programadores pueden desarrollar fácilmente aplicaciones de red comunes.

La biblioteca de clases de red proporcionada por Java puede realizar una conexión de red sencilla Los detalles subyacentes de la red están ocultos en el sistema de instalación nativo de Java y controlados por la JVM. Y Java implementa una biblioteca de red multiplataforma, y ​​los programadores se enfrentan a un entorno de programación de red unificado.

Red de computadoras:

Conecte computadoras distribuidas en diferentes áreas geográficas con equipos externos especializados utilizando líneas de comunicación para formar un potente sistema de red a gran escala, de modo que numerosas computadoras puedan transferirse fácilmente información entre sí, compartir hardware, software, información de datos y otros recursos.
El propósito de la programación en red: realizar
directa o indirectamente el intercambio de datos y la comunicación con otras computadoras a través de protocolos de red.
Hay dos problemas principales en la programación de redes:
cómo ubicar con precisión uno o más hosts en la red; ubicar aplicaciones específicas en el
host  cómo transmitir datos de manera confiable y eficiente después de encontrar el host

Telecomunicación

Direcciones de las partes de la comunicación
a) IP
b) Número de puerto
Ciertas reglas (es decir: protocolo de comunicación de red. Hay dos conjuntos de modelos de referencia)
c) Modelo de referencia OSI: el modelo es demasiado ideal para ser ampliamente promocionado en Internet
d) TCP / Modelo de referencia IP (o protocolo TCP / IP): el estándar internacional de facto.

IP
Dirección IP Dirección
IP: InetAddress
identifica de forma única la computadora (entidad de comunicación) en Internet.
Dirección de bucle de retorno local (hostAddress): 127.0.0.1 Nombre de host (nombre de host):
método de clasificación de direcciones IP de host local 1: IPV4 e IPV6

IPV4: 4 bytes, 4 0-255. Aproximadamente 4,2 mil millones, 3 mil millones están en América del Norte, 400 millones en Asia. Se agotó a principios de 2011. Expresado en notación decimal con puntos, como 192.168.0.1

IPV6: 128 bits (16 bytes), escritos como 8 enteros sin signo, cada entero está representado por cuatro dígitos hexadecimales y los números están separados por dos puntos (:), como: 3ffe: 3201: 1401: 1280: c8ff: fe4d: db39: 1984

Método 2 de clasificación de direcciones IP: dirección de red pública (utilizada por la World Wide Web) y dirección privada (utilizada por la red de área local). La dirección privada comienza con 192.168.0.0–192.168.255.255, que es específicamente para uso interno de la organización.
Características: no es fácil de recordar

Número de
puerto El número de puerto identifica el proceso (programa) que se está ejecutando en la computadora

Los diferentes procesos tienen diferentes números de puerto, que
se definen como un número entero de 16 bits 0 ~ 65535.

Clasificación de
puerto :  Puerto reconocido: 0 ~ 1023. Ocupado por comunicación de servicio predefinida (por ejemplo: HTTP ocupa el puerto 80, FTP ocupa el puerto 21, Telnet ocupa el puerto 23)
Puerto registrado: 1024 ~ 49151. Asignado a un proceso o aplicación de usuario. (Por ejemplo: Tomcat ocupa el puerto 8080, MySQL ocupa el puerto 3306, Oracle ocupa el puerto 1521, etc.).
Puerto dinámico / privado: 49152 ~ 65535.
La combinación del número de puerto y la dirección IP da como resultado un conector de red: conector.

Modelo de referencia de siete capas OSI

La capa de aplicación proporciona una variedad de servicios de aplicación: correo electrónico (MHS), transferencia de archivos (FTAM), terminal virtual (VT), intercambio electrónico de datos (EDI) y otros
protocolos importantes: FTP (21), SMTP (25), DNS. HTTP (80)

Capa de presentación: proporcione un lenguaje común para la comunicación para facilitar la interacción, ya que las diferentes estructuras del sistema informático utilizan diferentes representaciones de datos, por ejemplo: los hosts de IBM utilizan codificación EBCDIC y la mayoría de las PC utilizan codificación ASCII.
Otras funciones como cifrado de datos, compresión de datos

Capa de sesión: proporciona servicios que permiten que las aplicaciones establezcan y mantengan sesiones y que permitan sincronizar las sesiones.

Capa de transporte: cuando dos computadoras comunican datos a través de la red, es un nivel de un extremo a otro y tiene un efecto de almacenamiento en búfer.
Protocolo: TCP / UDP

Capa de red: IP, transferencia de datos en forma de mensajes IP

Capa de enlace de datos: puede entenderse como un canal de datos,
la dirección MAC representa unicidad

Capa física: proporciona una ruta para que el equipo de segmento de datos transmita datos. La ruta de datos puede ser un medio físico o una conexión de varios medios físicos.

TCP / IP

Hay dos protocolos muy importantes en el protocolo de la capa de transporte:
Protocolo de control de transmisión (TCP) y
Protocolo de datagramas de usuario (UDP).
TCP / IP lleva el nombre de sus dos protocolos principales: Protocolo de control de transmisión (TCP) y Protocolo de interconexión de Internet (IP) .De hecho, es un conjunto de protocolos, que incluye múltiples protocolos con diferentes funciones y relacionados entre sí.
 El protocolo IP (Protocolo de Internet) es el protocolo principal de la capa de red, que admite la comunicación de datos entre redes.
 El modelo de protocolo TCP / IP forma una estructura de sistema de cuatro capas eficiente desde una perspectiva más práctica, a saber, la capa de enlace físico, la capa de IP, la capa de transporte y la capa de aplicación.

Las clases bajo java / net bajo rt.jar son para programación de red

Arquitectura de red: B / S y C / S
B / S: navegador / servidor basado en navegador, como la versión web Taobao
C / S: cliente / servidor basado en cliente, como teléfono móvil o aplicación en Taobao

TCP:

La retransmisión es posible sin pérdida de paquetes. Si se pierde, se grabará y retransmitirá, pero no se repetirá.
Fiable, ordenado y el orden no será incorrecto. Por ejemplo, si se le envía 123, 2 es perdido y retransmitido, entonces puede recibir It is 132, pero lo que ve debe ser un
enlace orientado a 123. Si la conexión falla, los datos no se enviarán. El
protocolo de enlace de tres vías puede garantizar la seguridad de los datos. asegúrese de que la interacción sea
equivalente a una llamada telefónica. Si falla la conexión , los datos no se comunican. Pasado

Enchufe

El uso de sockets para desarrollar aplicaciones de red ha sido ampliamente adoptado durante mucho tiempo, por lo que se ha convertido en un estándar de facto.
Solo la dirección IP y el número de puerto identificados de forma única en la red se pueden combinar para formar un conector de identificación identificable de forma única.
Ambos extremos de la comunicación deben tener un Socket, que es el punto final de la comunicación entre las dos máquinas.

La comunicación de red es en realidad la comunicación entre sockets.
Socket permite que el programa trate la conexión de red como un flujo y los datos se transmiten entre los dos Sockets a través de IO.
Generalmente, la aplicación que inicia la comunicación es el cliente y el que espera la solicitud de comunicación es el servidor.
Clasificación de sockets:
socket de flujo: use TCP para proporcionar servicios de flujo de bytes confiables. Socket de datagrama: use UDP para brindar un servicio de datagramas de "mejor esfuerzo"

Método común

Constructor de uso común de la clase
Socket : public Socket (dirección InetAddress, puerto int) crea un socket de flujo y lo conecta al número de puerto especificado de la dirección IP especificada.
Public Socket (String host, int port) crea un socket de flujo y lo conecta al número de puerto especificado en el host especificado.
 Métodos comunes de la clase Socket:
Public InputStream getInputStream () devuelve el flujo de entrada de este socket. Se puede usar para recibir mensajes de red
public OutputStream getOutputStream () devuelve el flujo de salida de este conector. Se puede utilizar para enviar mensajes de red.
public InetAddress getInetAddress () La dirección IP remota a la que está conectado este conector; si el conector no está conectado, devuelve un valor nulo.
public InetAddress getLocalAddress () obtiene la dirección local vinculada al socket. Es decir, la dirección IP local
public int getPort () El número de puerto remoto al que está conectado este socket; si el socket aún no está conectado, devuelve 0.
public int getLocalPort () devuelve el puerto local al que está vinculado este socket. Si el socket no se ha vinculado, se devuelve -1. Es decir, el número de puerto del extremo local.
public void close () cierra este enchufe. Una vez cerrado el zócalo, no se puede utilizar en futuras conexiones de red (es decir, no se puede volver a conectar ni volver a enlazar). Necesita crear un nuevo objeto de socket. Cerrar este socket también cerrará InputStream y OutputStream del socket.
public void shutdownInput () Si llama a shutdownInput () en el conector y luego lee el contenido del flujo de entrada del conector, el flujo devolverá EOF (final del archivo). Es decir, no se pueden recibir datos en el flujo de entrada desde este conector.
public void shutdownOutput () deshabilita el flujo de salida de este socket. Para los sockets TCP, se enviará cualquier dato escrito previamente, seguido de la secuencia de terminación de conexión normal de TCP. Si llama a shutdownOutput () en el socket y luego escribe en el flujo de salida del socket, el flujo arrojará una IOException. Es decir, no se pueden enviar datos a través del flujo de salida de este socket.

Servidor

El proceso de trabajo del programa del servidor incluye los siguientes cuatro pasos básicos:
Call ServerSocket (puerto int): Cree un socket del lado del servidor y vincúlelo al puerto especificado. Se usa para monitorear las solicitudes de los clientes.
Call accept (): monitorea la solicitud de conexión, si el cliente solicita una conexión, luego acepta la conexión y devuelve el objeto de conexión de comunicación.
 Llame a getOutputStream () y getInputStream () del objeto de clase Socket: obtenga el flujo de salida y el flujo de entrada, y comience a enviar y recibir datos de red.
Cierre los objetos ServerSocket y Socket: el acceso del cliente ha terminado y el socket de comunicación está cerrado.

El objeto ServerSocket es responsable de esperar la solicitud del cliente para establecer una conexión de socket, similar a un vendedor en una ventana de una oficina postal. En otras palabras, el servidor debe establecer de antemano un objeto ServerSocket esperando la solicitud del cliente para establecer una conexión de socket.
 El llamado "recibir" la solicitud de socket del cliente significa que el método accept () devolverá un objeto Socket

Cliente

El proceso de trabajo del Socket del cliente incluye los siguientes cuatro pasos básicos:
Crear Socket: Construya un objeto de clase Socket de acuerdo con la dirección IP o el número de puerto del servidor especificado. Si el servidor responde, se establece una línea de comunicación del cliente al servidor. Si falla la conexión, se producirá una excepción.
Open el flujo de entrada / salida conectada a la del zócalo: Utilice el método para obtener el flujo de entrada, utilice el método getOutputStream () para obtener el flujo de salida, y realizar la transmisión de datos getInputStream ()
Read / escribir el zócalo de acuerdo con un cierto protocolo: leer a través del flujo de entrada El servidor coloca la información en la línea (pero no puede leer la información puesta en la línea por sí mismo) y escribe la información en el hilo a través del flujo de salida.
Close Socket: desconecta la conexión del cliente al servidor y suelta la línea

 El programa cliente puede usar la clase Socket para crear un objeto, e iniciará automáticamente una conexión con el servidor cuando se cree. El constructor de Socket es:
Socket (String host, int port) lanza UnknownHostException, IOException: inicia una conexión TCP al servidor (el nombre de dominio es el host. El número de puerto es el puerto), si tiene éxito, crea un objeto Socket, de lo contrario lanza una excepción.
Socket (dirección InetAddress, puerto int) arroja IOException: inicia una conexión basada en la dirección IP y el número de puerto representado por el objeto InetAddress.
El proceso de establecer un objeto socketAtClient por parte del cliente es enviar una solicitud de conexión de socket al servidor

UDP / IP

UDP:
velocidad rápida,
confiabilidad no garantizada,
posible pérdida de paquetes,
sin conexión,
equivalente a enviar un mensaje de texto, no importa si puede recibirlo o no, se le enviará de todos modos

Las clases DatagramSocket y DatagramPacket implementan programas de red basados ​​en el protocolo UDP.
 Los
datagramas UDP se envían y reciben a través del socket de datagramas DatagramSocket El sistema no garantiza que los datagramas UDP se puedan entregar de manera segura al destino, ni se puede determinar cuándo llegarán.
 El
objeto DatagramPacket encapsula el datagrama UDP. El datagrama contiene la dirección IP y el número de puerto del remitente y la dirección IP y el número de puerto del receptor.

Cada datagrama en el protocolo UDP proporciona información de dirección completa, por lo que no es necesario establecer una conexión entre el remitente y el receptor. Es como enviar un paquete.

Método común

Métodos comunes de la clase DatagramSocket
public DatagramSocket (puerto int) crea un socket de datagrama y lo vincula al puerto especificado en el host local. El socket estará vinculado a una dirección comodín y la dirección IP será elegida por el kernel.

public DatagramSocket (puerto int, InetAddress laddr) crea un socket de datagrama y lo vincula a la dirección local especificada. El puerto local debe estar entre 0 y 65535 (incluidos ambos). Si la dirección IP es 0.0.0.0, el socket se vinculará a una dirección comodín y el kernel elige la dirección IP.

public void close () cierra este conector de datagrama.

public void send (DatagramPacket p) envía paquetes de datagramas desde este conector. La información contenida en DatagramPacket indica: los datos a enviar, su longitud, la dirección IP del host remoto y el número de puerto del host remoto.

public void Receive (DatagramPacket p) recibe paquetes de datagramas desde este conector. Cuando este método regresa, el búfer de DatagramPacket se llena con los datos recibidos. El paquete de datagrama también contiene la dirección IP del remitente y el número de puerto en la máquina del remitente. Este método bloquea hasta que se recibe el datagrama. El campo de longitud del objeto de paquete de datagrama contiene la longitud de la información recibida. Si la información es más larga que la longitud del paquete, la información se truncará.

public InetAddress getLocalAddress () obtiene la dirección local vinculada al socket.

public int getLocalPort () devuelve el número de puerto en el host local al que está vinculado este socket.

public InetAddress getInetAddress () devuelve la dirección de esta conexión de socket. Si el conector no está conectado, se devuelve un valor nulo.

public int getPort () devuelve el puerto de este socket. Si el conector no está conectado, se devuelve -1.
Métodos comunes de la clase DatagramPacket

Public DatagramPacket (byte [] buf, int length) construye DatagramPacket para recibir
paquetes de datos de longitud. El parámetro de longitud debe ser menor o igual que buf.length.

public DatagramPacket (byte [] buf, longitud int, dirección InetAddress, puerto int) construye un paquete de datagrama, que se utiliza para enviar un paquete de longitud al número de puerto especificado en el host especificado. El parámetro de longitud debe ser menor o igual que buf.length.

public InetAddress getAddress () devuelve la dirección IP de una determinada máquina, este datagrama se enviará
o recibirá de esta máquina.

public int getPort () devuelve el número de puerto de un host remoto Este datagrama se enviará o recibirá del host.

public byte [] getData () devuelve el búfer de datos. Los datos recibidos o por enviar comienzan
en el desplazamiento de compensación en el búfer y continúan a lo largo de la longitud.

public int getLength () devuelve la longitud de los datos que se enviarán o recibirán.

Servidor

Proceso:
1. DatagramSocket y DatagramPacket

2. Establecer el remitente y el destinatario

3. Cree el paquete de datos

4. Llame a los métodos de envío y recepción de Socket

5. Cierre el zócalo
 El extremo de envío y el extremo de recepción son dos programas en ejecución independientes

Supongo que te gusta

Origin blog.csdn.net/MIRACLE_Ying/article/details/113531846
Recomendado
Clasificación