소켓 학습 네트워크 기본 준비


이 섹션 소개:

Java 소켓을 전혀 배우지 않은 초보자를 배려하거나 Android 개발에 관련된 네트워크 프로토콜과 관련된 개념을 살펴보기 위해, 결국 인터뷰 도중 면접관은 나에게 네트워크 프로토콜에 몇 개의 레이어가 있는지 물었습니다. 그렇다면 IP 프로토콜은 어느 계층에 있습니까? 소켓이 도대체 뭔가요? 어떤 종류? TCP와 UDP 프로토콜은 어느 계층에 있습니까? 무슨 차이가 있는 걸까요... 뭐, 이거... 그래서 이 절의 개념 이론을 익히는 것도 여전히 유용합니다. 필요한! 그럼 더 이상 고민하지 말고 이 섹션을 시작하겠습니다~


1. OSI 7계층 네트워크 모델에 대한 간략한 분석

물론, 어떤 계층이 있는지 아는 한 우리는 네트워크 엔지니어링 전문가는 아닙니다. 그리고 그것이 무엇을 위해 사용되는지입니다!

OSI 7계층 네트워크 모델(아래에서 위로):

  • 물리적 계층(Physical): 장치 간 데이터 통신을 위한 전송 매체 및 상호 연결 장비를 제공하여 안정적인 데이터 전송을 제공합니다. 환경. 네트워크 카드, 네트워크 케이블, 허브, 리피터, 모뎀등과 같은 네트워크 전송의 물리적 미디어 부분으로 이해될 수 있습니다! 이 레이어에서는 데이터가 정리되지 않고 원시 비트 스트림 또는 전기 전압으로만 처리됩니다. 이 레이어의 단위는 비트 비트
  • 데이터 링크 레이어(Datalink)로 이해될 수 있습니다. 데이터 채널의 주요 기능은 신뢰할 수 없는 물리적 라인에서 수행하는 방법입니다. 안정적인 데이터 전송, 계층 수정 기능에는 물리적 주소 지정, 데이터 프레이밍, 흐름 제어, 데이터 오류 감지 및 재전송 등이 포함됩니다! 또한, 이 데이터 링크는 을 의미합니다. 물리 계층은 단말 장치 간 데이터 통신을 위한 전송 매체와 연결을 제공해야 합니다. 미디어는 장기적으로 연결에는 수명이 있습니다. 연결 수명 동안 송신측과 수신측은 한 번 이상 데이터 통신을 수행할 수 있습니다. 모든 커뮤니케이션은 커뮤니케이션 접점을 구축하고 커뮤니케이션 접점을 해체하는 두 가지 과정을 거쳐야 합니다! 이로써 데이터 송수신 관계가 성립되었습니다~ 이 계층의 장치에는 네트워크 카드, 네트워크 브리지, 네트워크 스위치가 포함됩니다. 또한 이 계층의 단위는 다음과 같습니다. Frame
  • 네트워크 계층(네트워크): 주요 기능은 네트워크 주소를 변환하는 것입니다. 해당 물리적 ​​주소에 데이터를 보내는 방법을 결정합니다. 발신자는 수신자에게 경로를 지정합니다(소위 라우팅 및 경로 찾기). 하나의 터미널이 여러 터미널과 통신해야 할 수도 있습니다. 임의의 두 단말 장치의 데이터를 연결하는 문제! 간단히 말하면, 네트워크 연결을 설정하고 상위 레이어에 서비스를 제공하는 것입니다! 이 계층의 장치에는 다음이 포함됩니다. 라우팅! 이 레이어의 단위는 데이터 패킷이며, IP 프로토콜은 이 레이어에 있습니다!
  • 전송 계층(Transport): 통신 부분의 최상위 계층을 향하여 상위 애플리케이션 계층에 통신 서비스를 제공하며, 사용자 기능 중 가장 낮은 수준입니다. 세션 계층 데이터를 수신하고, 필요한 경우 데이터를 분할하고, 이 데이터를 네트워크에 전달합니다. 레이어를 구성하고 이러한 데이터 세그먼트가 반대쪽 끝에 효과적으로 도달하는지 확인하세요! 따라서 이 레이어의 단위는 데이터 세그먼트이며 이 레이어에는 매우 중요한 두 가지가 있습니다. 프로토콜은 TCP 전송 제어 프로토콜UDP 사용자 데이터그램 프로토콜입니다. 이 프로토콜도 이 장의 핵심 부분입니다!
  • 세션 계층(Session): 네트워크의 두 노드 간의 통신을 설정, 유지 및 종료하는 역할을 담당합니다. 통신 링크를 구축하고, 세션 중에 통신 링크를 열어두고, 두 노드 간의 대화를 동기화하고, 통신 중단 여부와 통신 중단 시기를 결정합니다. 다시 보낼 곳을 결정하십시오. 즉, 다른 컴퓨터의 사용자 간의 세션 설정 및 관리입니다!
  • Presentation: 애플리케이션 계층의 명령과 데이터를 해석하고 해당 구문을 다양한 항목에 할당합니다. 의미를 부여하고 특정 형식으로 세션 계층에 전송됩니다.주요 기능은 "인코딩과 같은 사용자 정보 표현 문제를 처리하는 것입니다. 데이터 형식 변환, 암호화 및 복호화, 압축 및 압축 풀기 등
  • 애플리케이션 계층(애플리케이션): 사용자 애플리케이션에 네트워크 서비스를 제공하는 OSI 참조 모델의 최상위 계층입니다. 다른 6개 계층의 작업을 기반으로 네트워크 내 애플리케이션과 네트워크 운영 체제 간의 연결을 완료하고, 사용자 간의 연결을 설정 및 종료하며, 네트워크 사용자가 요구하는 다양한 네트워크 서비스 및 애플리케이션을 완료하는 역할을 담당합니다. 관리 및 서비스. 또한 이 계층은 다양한 애플리케이션 간의 작업을 조정하는 역할도 담당합니다. 응용 프로그램 계층에서 사용자에게 제공하는 서비스 및 프로토콜에는 파일 서비스, 디렉토리 서비스, 파일 전송 서비스(FTP), 원격 로그인 서비스(Telnet), 이메일 서비스(E-mail), 인쇄 서비스, 보안 서비스, 네트워크 관리 서비스가 포함됩니다. , 데이터베이스 서비스 등

위에서 OSI 7계층 네트워크 모델을 간략하게 설명했습니다. 아래에 요약해 보겠습니다.

OSI는 7계층 모델에서 몇 개의 계층만 포함하는 이상적인 모델입니다. 각 레이어에는 특수 기능이 제공됩니다. 네트워크 기능 관점에서 본 네트워크 기능:

  • 다음 4개 계층(물리 계층, 데이터 링크 계층, 네트워크 계층 및 전송 계층)은 주로 데이터 전송 및 교환 기능을 제공합니다. 즉, 네 번째 계층은 주로 노드 간 통신에 관한 것이며, 상위 3개 계층(세션 계층, 프레젠테이션 계층, 애플리케이션 계층) 전체에서 가장 중요한 부분입니다. 주로 사용자와 애플리케이션 간의 정보 및 데이터 처리 기능을 제공합니다.
  • 즉, 하위 4계층은 주로 통신 서브넷의 기능을 완성하고, 상위 3계층은 주로 자원 서브넷의 기능을 완성합니다.
——위 내용은 다음에서 참조됩니다.

OSI 7계층 모델 자세한 설명

2.TCP/IP 4계층 모델


TCP/IP는 일련의 프로토콜과 동의어입니다. 이는 또한 많은 프로토콜을 포함하며 TCP/IP 프로토콜 제품군을 구성합니다. TCP/IP 프로토콜 클러스터는 4개 계층으로 나누어진다. IP는 프로토콜 클러스터의 두 번째 계층(OSI의 세 번째 계층에 해당)에 위치하고, TCP는 프로토콜 클러스터의 세 번째 계층에 위치한다. (OSI의 네 번째 계층에 해당) TCP/IP 통신 프로토콜은 4계층 계층 구조를 채택합니다. 각 계층은 다음 계층을 호출하여 제공합니다. 귀하의 요구를 충족시키는 네트워크. 이 4개 레이어는 다음과 같습니다. 1.jpg

  • 애플리케이션 레이어: SMTP(Simple Email Transfer), FTP(파일 전송 프로토콜), 네트워크 원격 액세스 프로토콜(Telnet) 등
  • 전송 계층: 이 계층에서는 TCP(전송 제어 프로토콜)와 같은 노드 간 데이터 전송 서비스를 제공합니다. UDP(User Datagram Protocol) 등, TCP와 UDP는 데이터 패킷에 전송 데이터를 추가하여 다음 계층으로 전송하며, 이 계층은 데이터를 전송하고 데이터가 전달 및 수신되었는지 확인하는 역할을 담당합니다.
  • 네트워크 상호 연결 계층: 모든 데이터 패킷이 목적지에 도달할 수 있도록 기본적인 데이터 패킷 전송 기능을 제공하는 역할을 담당합니다. IP(인터넷 프로토콜)와 같은 호스트(그러나 올바르게 수신되었는지 여부는 확인하지 않음).
  • Host to Network Layer: 실제 네트워크 미디어 관리, 실제 네트워크 사용 방법 정의 (이더넷, 직렬 회선 등)을 사용하여 데이터를 전송합니다.

3.TCP/UDP의 차이점에 대한 설명

좋아요, 처음 두 가지는 OSI 7계층 모델과 TCP/IP 4계층 모델의 개념을 대중화하는 것입니다. 이야기는 다음은 소켓 개발과 관련된 몇 가지 개념적 용어입니다!

1) IP 주소

2.png

2) 포트

1. 다양한 응용 프로그램을 구별하는 데 사용됩니다.

2. 포트 번호의 범위는 0-65535이며, 그 중 0-1023은 시스템이 아닙니다. 포트를 예약하고 프로그램에서 사용하지 마십시오!

3. IP 주소와 포트 번호는 소켓을 구성합니다. 소켓은 네트워크 실행 프로그램 간의 양방향 통신 링크의 끝점입니다. TCP와 UDP의 기본입니다!

4. 일반적으로 사용되는 프로토콜에서 사용하는 포트: HTTP: 80, FTP: 21, TELNET: 23

3.png

3) TCP 프로토콜과 UDP 프로토콜 비교:

TCP 프로토콜 프로세스에 대한 자세한 설명 :

우선, TCP/IP는 많은 프로토콜을 포함하는 프로토콜 모음입니다. UDP는 그 중 하나일 뿐입니다. TCP/IP 프로토콜이라고 명명된 이유는 TCP와 IP 프로토콜은 매우 중요한 두 가지 프로토콜이므로 이름이 붙여졌습니다.

TCP 프로토콜과 UDP 프로토콜의 차이점을 설명하겠습니다.

TCP(Transmission Control Protocol, Transmission Control Protocol)는 연결 지향 프로토콜, 즉 데이터를 보내고 받을 때 , 둘 다 상대방과 안정적인 링크를 구축해야 합니다. 이는 TCP의 3방향 핸드셰이크 및 TCP의 4방향 웨이브에 대한 인터뷰에서도 자주 묻는 질문입니다. 세 번의 악수: TCP 연결을 설정할 때 클라이언트와 서버는 연결 설정을 확인하기 위해 총 3개의 패킷을 보내야 합니다. 소켓 프로그래밍에서 이 프로세스는 연결을 실행하는 클라이언트에 의해 트리거됩니다. 구체적인 흐름도는 다음과 같습니다.

4.png

  • 첫 번째 핸드셰이크: 클라이언트는 SYN 플래그를 1로 설정하고 seq=J 값을 무작위로 생성한 후 데이터 패킷을 서버로 보냅니다. 클라이언트는 SYN_SENT 상태로 들어가고 서버의 확인을 기다립니다.
  • 두 번째 핸드셰이크: 데이터 패킷을 수신한 후 서버는 클라이언트가 플래그 비트 SYN=1로 연결 설정을 요청했다는 것을 알고 서버는 플래그 비트를 설정합니다. SYN과 ACK는 모두 1로 설정되고, ack=J+1, seq=K 값이 무작위로 생성되고, 연결 요청을 확인하기 위해 데이터 패킷이 클라이언트로 전송됩니다. , 서버가 SYN_RCVD 상태로 들어갑니다.
  • 세 번째 핸드셰이크: 클라이언트는 확인을 받은 후 ack가 J+1인지, ACK가 1인지 확인합니다. 그것이 정확하면 ACK 플래그를 설정합니다. 1로 설정하고 ack=K+1로 설정하고, 서버는 ack가 K+1인지, ACK가 1인지 확인하여 데이터 패킷을 서버로 보낸다. 연결이 성공적으로 설정되고 클라이언트와 서버가 ESTABLISHED 상태로 들어가고 3방향 핸드셰이크가 완료되면 클라이언트와 서버가 다음 작업을 수행할 수 있습니다. 데이터 전송이 시작됩니다.

네 번 흔들기: TCP 연결 종료는 TCP 연결이 끊어졌을 때 클라이언트와 서버가 연결 끊김을 확인하기 위해 총 4개의 패킷을 보내야 함을 의미합니다. 소켓 프로그래밍에서 이 프로세스는 닫기를 실행하는 클라이언트 또는 서버에 의해 트리거됩니다. 구체적인 흐름도는 다음과 같습니다.

5.png

  • 첫 번째 웨이브: 클라이언트가 클라이언트를 서버 데이터로 닫기 위해 FIN을 보냅니다. 전송, 클라이언트 입력 FIN_WAIT_1 상태
  • 두 번째로 Waving: FIN을 수신한 후 서버가 클라이언트에 ACK를 보내고 확인 시퀀스 번호는 수신된 시퀀스 번호 + 1(SYN과 동일, 하나의 FIN이 하나의 시퀀스 번호를 차지하며, 서버는 CLOSE_WAIT 상태로 진입합니다.
  • 세 번째 물결: 서버가 FIN을 보내 서버에서 클라이언트로의 데이터 전송을 종료하고 서버가 LAST_ACK를 입력합니다. 상태.
  • 네 번째 웨이브: 클라이언트는 FIN을 수신한 후 TIME_WAIT 상태에 진입한 후 서버에 ACK를 보냅니다. 확인 시퀀스 번호는 수신된 시퀀스 번호 + 1입니다. 서버는 CLOSED 상태에 진입하고 4개의 웨이브를 완료합니다. 또한 동료가 능동적인 닫기를 시작하는 경우도 있을 수 있습니다.

6.png

또 다른 일반적인 질문은 다음과 같습니다. 연결을 설정하는 데는 3방향 핸드셰이크가 필요한데 연결을 닫는 데는 4웨이브인 이유는 무엇입니까? 답변: 서버는 LISTEN 상태이기 때문에 연결 요청을 위한 SYN 메시지를 받은 후 ACK와 SYN을 하나의 메시지에 넣습니다. 클라이언트에게 전송되었습니다. 연결을 종료할 때 상대방의 FIN 메시지를 수신하면 상대방이 더 이상 데이터를 보내지 않지만 여전히 전송된다는 의미일 뿐입니다. 데이터를 받을 수 있다면, 상대방에게 데이터를 모두 보내지 않았을 수도 있으니 바로 닫거나, 일부만 보내면 됩니다. 상대방에게 데이터를 보낸 후 상대방에게 FIN 메시지를 보내 지금 연결을 종료하겠다는 동의를 표시합니다. 따라서 일반적으로 자신의 ACK와 FIN이 사용됩니다. 별도로 보내주세요.


UDP 프로토콜에 대한 자세한 설명:

UDP(User Datagram Protocol) 비연결 프로토콜인 User Datagram Protocol, 소스와 단말은 데이터를 전송하기 전에는 통신하지 않습니다. 연결이 설정되고 전송을 원할 때 간단히 애플리케이션에서 데이터를 가져와 가능한 한 빨리 네트워크를 통해 전송합니다. 송신 측에서 UDP가 데이터를 전송하는 속도는 애플리케이션이 데이터를 생성하는 속도, 컴퓨터 성능 및 전송 대역폭에 의해서만 제한됩니다. 제한 사항: 수신 측에서는 UDP가 각 메시지 세그먼트를 대기열에 넣고 애플리케이션이 대기열에서 한 번에 하나의 메시지 세그먼트를 읽습니다. TCP에 비해 링크를 설정할 필요가 없고 구조가 간단하며 정확성을 보장할 수 없으며 패킷 손실이 쉽습니다

——위 내용의 일부를 발췌했습니다:

TCP/IP three- way handshake and four-way wave

TCP와 UDP(전송)의 차이점


4 Java에서 네트워크에 제공되는 몇 가지 주요 범주:

다양한 네트워크 통신 수준을 위해 Java는 네 가지 주요 범주를 제공합니다. 네트워크 기능 카테고리:

  • InetAddress: 네트워크
  • URL에서 하드웨어 리소스를 식별하는 데 사용됩니다. URL
  • Socket 및 ServerSocket을 통해 네트워크에서 데이터를 직접 읽거나 쓸 수 있는 유니폼 리소스 로케이터: 네트워크 통신을 구현하기 위해 TCP 프로토콜을 사용하는 소켓 관련 클래스
  • Datagram: 데이터그램에 데이터를 저장하고 네트워크를 통해 통신하려면 UDP 프로토콜을 사용하세요

이 섹션에서는 처음 두 클래스인 소켓과 데이터그램만 소개하고 TCP와 UDP 장에서 이에 대해 설명합니다!

~InetAddress 사용 예

:

Sample code

:

public class InetAddressTest {
	public static void main(String[] args) throws Exception{
		//获取本机InetAddress的实例:
		InetAddress address = InetAddress.getLocalHost();
		System.out.println("本机名:" + address.getHostName());
		System.out.println("IP地址:" + address.getHostAddress());
		byte[] bytes = address.getAddress();
		System.out.println("字节数组形式的IP地址:" + Arrays.toString(bytes));
		System.out.println("直接输出InetAddress对象:" + address);
	}
}
실행 결과 그래프

:

7.png

~URL

: 이건 말할 필요도 없이 잊어버리면 이전 내용을 볼 수 있습니다. HTTP 프로토콜 설명은 어디에 있나요~

이 섹션 요약:

이 섹션은 모두 개념에 관한 것입니다. 너무 어려워 보일 수도 있지만, 각 레이어를 이해하지 못해도 상관없습니다. 7층 모델이라고 합니다. 뭐, 무슨 용도로 쓰일까요? TCP 3방향 핸드셰이크와 4개의 웨이브가 있습니다. 그게 전부입니다! 물론 이것은 단지 인터뷰 대처하기~ 실제 개발에서 어떻게 이런 어려움을 겪을 수 있겠습니까... 그냥 소켓이죠~ 그럼 다음 섹션부터 학습을 시작하겠습니다 안드로이드의 소켓통신~감사합니다~
🎜