OSI 7 계층은 전산 네트워크에서 통신 프로토콜들의 상호작용을 정의한 7단계의 모델입니다. OSI는 Open Systems Interconnection의 약자이며, 1984년 국제표준화기구(ISO)에서 발표했습니다. OSI 7 계층은 물리 계층, 데이터 링크 계층, 네트워크 계층, 전송 계층, 세션 계층, 표현 계층, 응용 계층으로 구성됩니다.
1. 물리 계층
은 데이터를 전송하는 데 필요한 물리적 장치와 프로토콜을 정의합니다. 물리 계층은 네트워크에서 가장 낮은 계층이며, 전기 신호, 광학 신호, 전자기파와 같은 물리적 매체를 사용하여 데이터를 전송합니다.
2. 데이터 링크 계층
은 데이터를 패킷으로 나누고 전송하는 데 필요한 프로토콜을 정의합니다. 데이터 링크 계층은 데이터 링크 장치와 같은 물리적 장치를 관리하며, 데이터를 신뢰성 있게 전송하는 데 필요한 기능을 제공합니다.
3. 네트워크 계층
은 데이터를 컴퓨터 네트워크로 전송하는 데 필요한 프로토콜을 정의합니다. 네트워크 계층은 데이터를 네트워크 주소로 라우팅하고, 데이터를 신뢰성 있게 전송하는 데 필요한 기능을 제공합니다.
4. 전송 계층
은 데이터를 신뢰성 있게 전송하는 데 필요한 프로토콜을 정의합니다. 전송 계층은 데이터를 패킷으로 나누고, 패킷의 순서를 유지하며, 패킷의 오류를 수정하는 데 필요한 기능을 제공합니다.
5. 세션 계층
은 컴퓨터 간의 세션을 관리하는 데 필요한 프로토콜을 정의합니다. 세션 계층은 컴퓨터 간에 연결을 설정하고, 연결을 종료하며, 데이터를 전송하는 데 필요한 기능을 제공합니다.
6. 표현 계층
은 데이터를 사용자에게 이해하기 쉬운 형식으로 변환하는 데 필요한 프로토콜을 정의합니다. 표현 계층은 데이터를 압축, 암호화, 또는 변환하여 사용자에게 이해하기 쉬운 형식으로 제공합니다.
7. 응용 계층
은 사용자와 응용 프로그램이 네트워크를 통해 데이터를 교환하는 데 필요한 프로토콜을 정의합니다. 응용 계층은 전자 메일, 파일 전송, 웹 브라우징과 같은 사용자와 응용 프로그램이 네트워크를 통해 데이터를 교환하는 데 필요한 기능을 제공합니다.
ChatTCPServer.java
package edu.global.chat;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import edu.global.chat.way.Receiver;
import edu.global.chat.way.Sender;
public class ChatTcpServer {
public static void main(String[] args) {
ServerSocket serverSocket = null;
Socket socket = null;
try {
//Port number
serverSocket = new ServerSocket(7777);
System.out.println("Server is ready.");
socket = serverSocket.accept();
// System.out.println("Connected." + socket.getInetAddress().getHostName());
Sender sender = new Sender(socket);
Receiver receiver = new Receiver(socket);
sender.start();
receiver.start();
} catch (IOException e) {
e.printStackTrace();
}
}
}
ChatTCPClient.java
package edu.global.chat;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import edu.global.chat.way.Receiver;
import edu.global.chat.way.Sender;
public class ChatTcpClient {
public static void main(String[] args) {
String serverIP = "127.0.0.1";
Socket socket = null;
try {
socket = new Socket(serverIP, 7777);
System.out.println("Connected at server.");
Sender sender = new Sender(socket);
Receiver receiver = new Receiver(socket);
sender.start();
receiver.start();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Sender.java
package edu.global.chat.way;
import java.io.DataOutputStream;
import java.net.Socket;
import java.util.Scanner;
public class Sender extends Thread {
private Socket socket;
private DataOutputStream out;
private String name;
public Sender(Socket socket) {
this.socket = socket;
try {
out = new DataOutputStream(socket.getOutputStream());
name = "[" + socket.getInetAddress() + ":" + socket.getPort() +"]";
} catch (Exception e) {
e.getMessage();
}
}
public void run() {
Scanner scanner = new Scanner(System.in);
while(out != null) {
try {
out.writeUTF(name + scanner.nextLine());
} catch (Exception e) {
e.getMessage();
}
}
}
}
Receiver.java
package edu.global.chat.way;
import java.io.DataInputStream;
import java.net.Socket;
public class Receiver extends Thread {
private Socket socket;
private DataInputStream in;
public Receiver(Socket socket) {
this.socket = socket;
try {
in = new DataInputStream(socket.getInputStream());
} catch (Exception e) {
e.getMessage();
}
}
public void run() {
while (in != null) {
try {
System.out.println(in.readUTF());
} catch (Exception e) {
e.getMessage();
}
}
}
}