Wanna be Brilliant Full-Stack Developer

JAVA 소켓통신의 개념 #1 본문

Some Memos/Java

JAVA 소켓통신의 개념 #1

Flashpacker 2023. 4. 13. 23:22


포트라는것에 대한 개념이 먼저 잡혀야한다!

포트가 무엇인가?

우리가 이름이 포트면! 그러면 이런것이 있다.

부산에는 A라는 항구가 있고 B라는 항구가 있다고 하면!?

 

이렇게 항구가 있으면 거기에 배가 있는데 목적지가 있는데! 

목적지가 A항구이고 배가 A항구에 가게 되면 이 배가 막 움직이다가 

A라는 항구에 배가 도착하면 애만 저 항구를 이용하는게 아니라 

다른배들도 저 항구를 이용할테니까 배가 막 엉킬 수 있다.

 

다른 배들은 저 안에 들어가지도 못하고 저 밖에서 엉켜있을 수 있다.

그래서 머가 필요하냐면 이 물리적으로는 항구는 A와 B밖에 없지만 

배한테 무엇을 알려줘야하는가? 목적지도 알려줘야하지만 

포트도 알려줘야한다. 몇번 포트인지? 2번포트라고 해보자! 

 

B항구가 크기를 보면 총 7개의 포트가 생길 수 있다.

이 포트는 논리적인 개념이다. 

그래서 B항구에 2번포트에 들어간다! 그러면 다른배한테는 목적지가 다른 포트로

가게 하면 배 들이 다 들어가면 남는 포트가 5번만 있으면 

5번 포트에 들어오라고 말할 수 있다.

포트가 없으면 배들이 남는 공간이 있는지 꽉찼는지 확인을 할 수 없으니 포트를 만든것이다.

목적지에 대한 이 주소를 큰 주소라고 하고 포트는 작은 주소라고 한다.

작은 주소는 내부주소이다. 이게 포트이다.

 

컴퓨터 통신에서도 이런 포트가 필요하다.

왜 필요하는가? 

봐보자! 컴퓨터가 있으면 우리가 컴퓨터에서 하는 게임은 LOL도하고 스타크래프트도 하고 있고

카카오톡도 하고 있고 동시에 여려가지 프로그램이 돌고 있으면? 

스트림 기억하는가? LOL이 연결되어야하는 스트림이 있고 스타크래프트, 카카오톡이 연결되어야하는 스트림이 있는데

외부에서는 스트림 하나의 선밖에 안들어오는데 

양끝 단에 버퍼를 달고 통신을 하는데 이렇게 연결되어 있으면! 

LOL이라는 회사와 통신을 해야하고 어떤 거는 스타크래프트와 어떤건 카카오톡 회사와 통신 해야하는데?

애들 입장에서는 이렇게 선이 한군데로 모여서 갈것이다.

컴퓨터까지 도착을 하면 이 내부에서 데이터를 어떻게 분배해야하는지 모른다.

내부를 모른다. LOL로 가야할지 카카오톡에 가야할지 모른다.

그래서 저기 주소가 B라고 하면 B주소에 2000번 포트로가! 

B주소에 5000번 포트로가! , B 주소에 7000번 포트로가 이렇게 주소를 지정해서 준다.

이렇게 데이터가 2진수로 인코딩 되어서 흘러가게 되면!?

010101010101이렇게 흘러가면? 흘러가서 저기에 도착하면 

이 교차로에서 B주소라고 한다면 교차로에서 LOL, 스타크래프트나 카카오톡에 데이터가 흘러가야하는데

이 내부에는 포트 번호가 있어야한다! 

 

그래서 7000번 포트로 가라고 했으니까 카카오톡과 통신하는것이다. 

LOL 서버, 스타크래프트 서버, 카카오톡 서버! 

이들은 다 프로그램이다. 응용프로그램이라고 한다.

이 응용프로그램이 어떤걸로 통신하는가? 포트로 통신을 한다.

입구가 똑같으니까 입구까지 데이터가 와서 어떤 프로그램에 데이터를 전송할지 정하는것이 포트이다.

포트를 몇개까지 만들 수 있는가? 6만5천5백35번까지 있다.

즉 65536개가 있다는것이고 포트번호를 이중에서 정해져있는 포트가 있는데

0번부터 1023번 포트는 건드릴 수 없고 1024부터 그 이상의 포트들은 내가 어느것이든 정해서

사용할 수 있다.  2의 16승이면 2바이트라는것이다. 

1바이트가 8비트니까 2의 8승! 16비트 만큼 포트가 있다.

양 끝 단에 소켓통신이라는것은 무엇인가?

소켓통신이라는건 양 끝단에 서로 포트를 달고 이 포트끼리 바이트 스트림을 연결해서

데이터를 주고 받는것! 양쪽으로 왔다갔다 하면서 서로 주고 보낼 수 있는것이다.

당연히 포트로 데이터가 달려 올때 가변길이 데이터 통신을 하기 위해서 당연히 각 버퍼가 달려 있다.

포트가 없으면 통신하기게 어렵다.

컴퓨터 하나에 하나의 프로그램만 통신 할 수 있다.

이 포트를 가지고 양 끝단에 포트를 두고 통신하는것을 소켓통신이라고 한다.

이게 통신의 기본이다. 

 

'Some Memos > Java' 카테고리의 다른 글

JAVA 소켓 통신 #3 클라이언트 소켓  (0) 2023.04.25
Java 소켓통신 #2  (0) 2023.04.19
Java BufferedReader란?  (0) 2023.04.13
자바 버퍼(Stream)이란?  (0) 2023.04.06
자바 StringConstantPool 이란?  (0) 2023.04.04