네트워크 프로그래밍, UDP, TCP-미완성

2020. 3. 19. 10:41카테고리 없음

반응형

 

 

포트 : 가상적인 통신 선로  0~65535 까지 있다 

 

ip + 포트 번호 = InetAddress 라는 자료형으로 관리 (자바) 

데이터를 받는 쪽은 포트를 열고 대기 -> 프로그램이 os 으로 부터 포트를 점유 

 데이터를 보내는 쪽은 상대방의 IP+ port 를 목적지로 해서 테이터를 전달 

 

데이터를 송수신 하기위한 정보의 집합 => socket 소켓이라고 한당. 

 

TCP : transmission control protocol 전송 제어 프로토콜 

신뢰성있게 통신하기 위하여 먼저 서로간에 연결을 설정한 후에 데이터를 보내고 받는 방식 

 

UDP : user datagram protocol 사용자 데이터그램프로토콜  

너무 단순해서 서비스의 신뢰성이 낮다 데이터그램 도착 순서가 바뀌거나 중복되거나 심지어 통보없이 누락시키기도 한다. 

주소만 적어서 보내는거 순서 알 수 없다

ex) 카톡, 이메일 같은 것들  

udp와 tcp 를 구별 할수만 있으면 된다. 

 

 

 

 

 

 

 

 

 

 

 

 

 

tcp 통신하기 

 

서버 

-ServerSocket을 생성

ServerSocket을 연결 용청을 대기한 상태 

serverSocket.accept();

 

 

-클라이언트로 부터 연결 요청이 들어오면 

연결 요청대기를 하던 메소드에서 

Socket 객체를 하나 반환 해준다. 

 

 

 

클라이언트

-서버정보를 담아서 (ip, port)  Socket 객체를 생성(서버로 연결 요청) 

 

 

TCPServer// Client.txt

 

1. server 는 프로그램이 실행되면 연결요청이 들어오기를 기다림 ....port : 5001

2. client 는 프로그램이 실행되면 사용자로 부터 ip 주소를 입력받음 

+ 해당 주소는 5001 포트 번호로 tcp 연결요청을 보냄

 3. server 는  client 가 연결되면  " 이름을 입력하세요  : " 라고 메세지 전송

4.  client 가 연결이 성공하면 서버가 보낸 메세지를 모니터에 출력 후에 사용자로 부터 문자열 입력을 대기함 

-> 사용자가 이름을 입력하면 입력받은 이름을 server 에 전달 

5. 그다음 부터 사용자로부터 계속해서 메세지 입력 받고, 입력 받을때마다 서버에게 전달함. 

6. server 는 client 가 보낸 이름을 변수에 저장하고 계속해서 client가 보내는 메세지를 수신, 모니터에 출력함 

( ex)  구민상님이 보낸 메세지:  하이?) 

7. client 가 보낸 메세지가 quit 일 경우 프로그램 종료 

8. 위에 다 되면 쓰레드 구현 

 

 

 

네트워크를 얘기할때 빼놓지않고 얘기하는 것이 서버(Server)와 클라이언트(Client) 개념일 것이다.

 

한쪽은 서버(Server)로 한쪽은 클라이언트(Client)로 지칭하는데 정보를 제공하는 컴퓨터나 응용프로그램은 서버라고 하고 정보가 필요해서 요청하는 컴퓨터나 응용프로그램은 클라이언트가 되는 것이다. 

 

바로 이런 서버와 클라이언트가 서로 정보를 주고 받을수 있게끔 다시 말해서 통신할수 있도록 만들어주는 선로나 연결망이 필요한데 이를 네트워크라 한다.

 

여러분이 인터넷에서 어디를 가든 반대쪽 관련 서버에서 응답을 해줘야 쓸수 있는 것이고 컴퓨터가 서로 올바른 메세지를 주고 받기 위해서 규칙을 정해놓았는데 이런 규칙으로 만든 통신 규약을 프로토콜(Protocol)이라고 한다.

인터넷에서는 이를 IP(Internet Protocol)라는 이름의 프로토콜을 사용한다.

 

클라이언트쪽 프로그램에서 서버쪽 프로그램으로 정보를 요청하면 이를 수락하고 관련 정보를 제공하는등의 네트워크 서비스가 이루어지는데 이는 인터넷 소프트웨어 스택(Internet Software Stack)의 일부분인 트랜스포트 레이어(Transport Layer)를 통해 이루어진다.

 

우리는 이를 TCP/IP(Transport Control Protocol/Internet Protocol)라고 부른다. Internet Software Stack의 일부분이니 엄밀히 표현하면 TCP/IP stack이 되겠다. 이런 네트워크 서비스를 가능케 해주는 트랜스포트 레이어는 두가지 프로토콜로 나뉜다. 하나는 TCP(Transport Control Protocol)고 다른 하나는 UDP(User Datagram Protocol)다. 

 

 

TCP는 연결지향 프로토콜(Connection-Oriented Protocol)로 두 컴퓨터간의 데이터 흐름의 신뢰성을 보장한다. 즉 클라이언트와 연결이 되었다면 통신은 물론이고 데이터 교환시 손실없이 주고받을수 있다는 것을 보장하는 것이다. TCP는 파일이나 데이터를 네트워크에서 여러개의 작은 조각으로 나누어서 보내거나 반대로 이를 재조립하는 기능을 한다. 네트워크에서 이렇게 파일이나 데이터를 여러개로 쪼개는 것을 패킷(packet)이라 한다. 관련 서비스 프로그램의 예로는 ftp나 telnet을 들수 있겠다.

 

 

UDP는 데이터의 독립적인 패킷을 보내는 프로토콜인데 한 컴퓨터에서 다른 컴퓨터로 데이터를 주고받을때 TCP와는 다르게 연결성도 없고 신뢰성도 없는 한마디로 데이터 교환시 손실여부를 보장할수 없는 패킷을 말하는데 이를 데이터그램(datagrams)이라 부른다. 관련 서비스 프로그램의 예로는 Clock server나 Ping을 들수 있다. 자바는 TCP(Socket 클래스)와 UDP(DatagramSocket 클래스)를 모두 지원한다. 

 

TCP와 UDP 프로토콜 모두 컴퓨터의 특정 프로세스를 통해 전송되는 데이터는 포트(Port)를 이용한다. 포트는 16비트 정수로 표현되며 값은 0에서 65535까지 지정가능하다. 대표적으로 알려져있는 포트 넘버는 1024까지 예약되어 사용되고 있으며 구체적인 예로 ftp는 포트넘버로 21/tcp을 telnet은 포트넘버로 23/tcp을 그리고 http는 포트넘버 80/tcp,udp으로 사용된다. 따라서 우리가 포트넘버를 설정할 일이 있을때는 이미 예약되어 사용되고 있는 1024까지의 포트넘버는 충돌방지를 위해 사용하지 말자.

 

포트와 응용 프로그램들을 연결시켜주는게 아까 말했던 소켓(socket)이다. 

프로그래밍 관점에서 소켓을 간단히 설명하자면 클라이언트의 소켓(Socket)과 서버의 소켓(Socket)이 있는데 중간에 이를 연결시켜주는 서버소켓(ServerSocket)이 있다. 서버소켓이 하는 일은 클라이언트가 접속하기를 기다리고 접속을 시도하면 서버의 소켓을 만들어서 클라이언트의 소켓과 연결해주고 다시 계속해서 다른 클라이언트가 접속하기를 기다리고 접속 시도를 하면 위와같이 연결해주는 일을 반복한다. 

 

자바에서 이렇게 Socket 클래스를 이용해서 프로그래밍하는 것을  TCP 프로그래밍이라고 한다.

 

 

반응형