티스토리 뷰



1. 소켓이란?

  네트워크 노드에는 다양한 형태가 존재한다. 필자가 인터넷 상에 올린 이 글을 읽기 위해 클라이언트는 각자 개인이 보유한 장비를 통해 글에 접근하게 된다. 각각의 장비에서 인터넷에 한 글에 접속을 하게 되는데, 다양한 네트워크 장비와 환경에서도 접속 할 수 있다. 그리고 이 장비들을 각각의 IP 주소를 할당 받은 상태다. 이를 우리는 호스트(Host)라고 부른다. 그리고 호스트 안에 있는 프로세스가 우리가 보고 있는 데이터를 주고 받는 역할을 수행한다.


  소켓은 호스트 내의 프로세스에 접근하기 위해 열어놓은 일종의 문이다. 그렇기 떄문에 서버에서 클라이언트로 데이터를 전달한다면 서버 쪽에도 네트워크로 나가기 위해 문이 있을 것이고, 클라이언트에서도 문이 존재할 것이다. 이 문을 소켓이라 하기때문에, 소켓은 서버 소켓과 클라이언트 소켓으로 나뉘게 된다.


  소켓이라는 용어는 전기 용어에서 파생되었다. 전구를 키기 위해 우리는 플러그가 달린 전선을 이용해 전력을 전구까지 가져가야 한다. 이 때, 전선과 전구를 연결해 전구에 전기를 공급해주는 역할을 하는 것이 바로 소켓이다. 


  데이터가 네트워크 환경을 통해 이동하다 호스트에게 전달 된 다. 전달 받는 데이터의 헤더엔 호스트의 IP주소와 포트 번호가 적혀있을 것이다. 그리고 전달 할 수 있는 데이터의 크기는 한정적이기 때문에 얼마나 데이터가 몇개의 패킷으로 나누어져 올지 예측 할 수 없고 순서도 맞지 않는다. 소켓인 다수의 패킷을 받아 하나의 메세지로 바꿔 전달 해주는 역할을 한다. 


2. 소켓의 역할  

소켓은 앞서 언급한대로 네트워크에서 무작위로 전송된 패킷을 재정립해 클라이언트에서 읽을 수 있는 의미 있는 메세지로 전환하는 기능을 한다. 이외에도 소켓은 여러가지 역할을 수행하게 되는데, 크게 살펴보면 아래의 7가지 기능을 수행한다.


  • 원격 장비에 연결하기 (Connect)
  • 데이터 보내기 (Send)
  • 데이터 받기 (Recv)
  • 포트 지정하기 (Bind)
  • 수신 대기하기 (Listen)
  • 지정된 포트에 대해 원격 장비 연결 받기 (Accept)
  • 연결 닫기 (Close)


그리고 소켓은 아래 다섯가지로 구성 된다.


  • 인터넷 프로토콜 (TCP, UDP, raw IP)
  • 로컬 IP 주소
  • 로컬 포트
  • 원격 IP 주소
  • 원격 포트


  소켓은 네트워크 7계층 중 4번째 계층인 전송 계층 (Transport Layer)에서 작동한다. 즉 소켓은 TCP 계층에서 주로 작동해 크게 TCP 소켓과 UDP 소켓으로 구분된다.


3. 클라이언트 소켓 프로그래밍



  Java에서 클라이언트 소켓은 크게 4단계로 이루어진다.


  1. 소켓 생성

  2. InputStream, OutputStream 생성

  3. 소켓을 통한 송수신 작업

  4. Close



  이를 바탕으로 만든 Java 기본 소켓 생성은 아래와 같이 작성된다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;
 
public class Solution {
    
    public static void main(String[] args) {
    // TODO Auto-generated method stub
 
        String serverIp = "127.0.0.1";
 
        // 소켓 연결
        try(Socket socket = new Socket(serverIp, 8080)){
            
            // 입력 스트림 만들기 
            InputStream in = socket.getInputStream();
            DataInputStream dis = new DataInputStream(in);
            
            // close
            dis.close();
        }catch(IOException e) {
 
        }
            
    }
}
 
cs

  




'Skill > Programming - Network' 카테고리의 다른 글

17. 네트워크 보안 및 보안 소켓  (0) 2019.08.31
16. 서버 소켓  (0) 2019.08.16
14. HTTP 쿠키 (Cookie)  (0) 2019.07.28
13. HTTP 요청  (0) 2019.07.21
12. HTTP 연결  (0) 2019.07.16
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함