Network Programming

C/S( Client / Server ) Programming(통신 프로그램)
java.net 패키지에서 관련 클래스들을 제공
network : 서로 다른 컴퓨터를 연결하기 위한 데이터 통신망.(데이터, 파일, 프로그램 전송하는데 사용.)

  • NIC ( Network Interface Card ) : LAN card
    RJ-45를 사용하여 UTP Cable을 사용하여 연결.( 전송하는 데이터의 양에 따라 두께가 달라진다. CAT1. CAT.8)

    NIC – 컴퓨터에서 네트워크를 사용하기 위해 장착하는 카드.
    (MAC주소가 할당 ( 제조사에서 할당 – 유일 – Hub에서 식별 )
    IP 주소 할당( 사용자가 할당 – 네트워크에서 컴퓨터를 식별하기 위한 주소)

  • Hub – 여러 개의 컴퓨터를 연결하고, 연결된 컴퓨터의 MAC주소로 컴퓨터를 찾기 위한 장비

  • Router – 여러 개의 Hub를 관리하고, 목적지 컴퓨터의 최단거리를 테이블로 저장하고 관리하는 일

  • Protocol – 데이터를 송,수신하기 위한 전송규약.


OSI7 Layer Reterence Model

개방형 시스템에서 데이터를 주고 받는 것을 이해하기 쉽도록 정의한 7가지 계층.(실제 네트워크 구성은 TCP/IP 4계층 모델을 사용)
상위계층은 하위계층으로 PDU(Protocol Data Unit)를 내려주고, 서비스를 요청(Service Request) 한다.

응용계층
표현계층
세션계층
전송계층
네트워크계층
데이터 링크계층
물리계층

응용계층 (Application Layer)

사용자가 네트워크에 접속하기 위해 사용하는 프로그램(http, ftp, telnet, ssh)

표현계층 (Presentation Layer)

사용자가 입력한 값이 어떻게 변화되어 컴퓨터에 보여질 지 설정하는 계층

세션계층 (Session Layer)

가상연결(호 단위 연결)

전송계층 (Transport Layer)

실제연결(Protocol 사용 - TCP/UDP)

네트워크계층 (Network Layer)

경로찾기, packet시작점에서 최종 목적지까지 성공적으로 전달될 수 있도록 경로를 설정.

데이터를 오류없이 전송하기 위해 전송선로(media)에 Link해줄지를 설정하는 일.

물리계층 (Physical Layer)

데이터를 물리적인 매체에 실제 매핑하여 보냄.(비트의 흐름 제어)


데이터 전송 시 장애 원인(Transmission Impairment)

Packet 통신 : 데이터를 보내기 위해 정보를 싣는 단위.
TCP : 패킷이 1byte로 고정.
UDP : 패킷의 크기를 개발자가 설정할 수 있다.

  • 주요 장애원인 3가지
    외부에서 발생하는 큰 충격(천동).
    데이터를 전송하는 회선에서 열이 발생하는 경우.
    혼선.

패킷은 일반적으로 헤더, 데이터, 트레일러로 구성. 통신에 사용되는 프로토콜에 따라 다름.
header - 패킷제어 정보를 가진다.
data - 실제 전송하는 정보가 포함.(예, 이메일의 본문 내용)
trailer - 패킷의 끝에 추가되는 부분으로 패킷이 올바르게 전송되었는지 오류 검사 정보를 포함.

TCP 프로토콜은 데이터를 네트워크 상황에 따라 가변적인 segment로 분할되어 전송한다.
MTU(Maximum Transmission Unit)는 데이터 링크에서 전송할 수 있는 최대 크기. 인터넷에서는 최소 68byte 최대 1500byte로 설정된다.(Jumbo 프레임 최대 9000byte 가능.)


Java에서 OSI7 Layer의 상위 4계층에 해당하는 코딩을 함.(쉽다)

응용계층 : Aplication 개발(JFC - Swing)
표현계층 : charset( encoding, decoding )
세션계층 : 가상연결관리
전송계층 : 프로토콜을 선택 (TCP, UDP) - Socket

  • TCP(Transmission Control Protocol)
    전화.
    신뢰성통신.
    패킷의 크기가 고정되어있다.(1Packet은 1byte)
    오류 검출가능.

  • UDP( User Datagram Protcol )
    우편.
    비신뢰성 통신.
    패킷의 크기를 개발자가 변경할 수 있다.
    오류 검출 불가능.


java.io 패키지에서 관련 클래스를 제공

TCP를 구현한 클래스 : ServerSocket, Socket => 서버와 클라이언트의 역할이 명확하게 구분
UDP를 구현한 클래스 : DatagramSocket, DatagramPacket => 서버와 클라이언트의 역할이 명확하지 않다.

문법

1. 서버생성 - 포트를 사용하여 서버를 연다.
ServerSocket server = new ServerSocket(포트);

2. 접속자 소켓을 받는다. - 접속자가 있을 때 동작.
Socket socket = server.accept();

클라이언트 - 서버의 주소와 포트
1. 소켓 생성 - 서버에 연결 시도
Socket client = new Socket("서버의 주소", 포트);

* 서버
1. 서버 소켓 열기
ServerSocket server = new ServerSocket ( 60000 );

*클라이언트
2. 소켓 생성 - 자신컴퓨터의 임의의 포트를 열고, 지정한 서버의 주소와 포트를 사용하여 연결을 수행.
Socket client = new Socket( "192.168.10.XX", 60000 );

3. 접속된 소켓을 받는다.
Socket client = server.accept();


  • socket은 연결만 수행하고, 데이터를 주고 받는 것은 stream을 사용한다.
  • Com A
1. 서버소켓을 생성
ServerSocket server = new ServerSocket( 60000 );

3. 접속자 소켓을 받는다.
Socket client = server.accept();

4. 소켓에서 출력스트림을 얻는다.
DataOutputStream dos = new DataOutputStream(client.getOutputStream());

5. 스트림에 메시지 쓰기
dos.writeUTF("메시지");

6. 스트림의 내용을 목적지로 분출
dos.flush();

7. 연결 끊기
dos.close();
client.close();
server.close();
  • Com B
2. 소켓을 생성( 서버로 접속을 시도 )
Socket client = new Socket( "서버ip", 60000);

4-1. 소켓에서 스트림 얻기.
DataInputStream dis = new DataInputStream( client.getInputStream() );

7. 스트림에 메시지 읽기
String str = dis.readUTF();

8. 연결끊기
dis.close();
client.close();

0개의 댓글