네트워크 관련 글 순서(참조 영상 기준)
애플리케이션 계층
- 네트워크 애플리케이션의 원리
- DNS
- TCP를 이용한 Socket 프로그래밍
전송계층
- 전송 계층 서비스의 원리
- rdt 원리
- 연결 지향 전송: TCP
- TCP 흐름 제어(3-way handshake, 4-way handshake)
- TCP 혼잡 제어
네트워크 계층
- 네트워크 계층 서비스
- Network Address Translation(NAT), DHCP
- 라우팅 알고리즘(Link State, Distance Vector)
- 계층적 경로 변경(AS)
링크 계층
- 다중 엑세스 프로토콜
- LANs(근거리 통신망)
무선 및 모바일 네트워크
- 무선 네트워크
웹 요청 시 일어나는일
네트워크 보안
- 대칭키 & 공개키,RSA 암호화
- Secure e-mail, SSL, MAC
- IPSec(ESP), Firewall(방화벽)
Socket이란
네트워크 통신을 할 수 있게 도와주는 구조체.
운영체제에서 제공해주는 인터페이스. 결론적으로 데이터를 주고 받을 수 있게 해준다.
보통 TCP/IP 계층에서 동작하는 소켓을 주로 사용한다. 1
이를 TCP 소켓 또는 TCP/IP 소켓이라고 부른다.
OSI 7계층 참조: 2022.01.05 - [CS/NetWork] - OSI 7계층
서버와 클라이언트의 통신
이 소켓을 통해 서버와 클라이언트 측의 통신이 이루어지며, 아래와 같은 방식으로 이루어진다.
서버
- socket(): 소켓 생성
- bind(): 주소 바인딩(IP주소 및 포트번호)
- listen(): 접속대기
- accept(): 클라이언트 연결
- send()/recv(): 데이터 전달 및 받기
- close(): 자원 해제
클라이언트
- socket()
- connect(): 서버에 접속 요청
- send()/recv()
- close()
TCP Socket(Socket Stream) 구현(Java 코드)
Java의 Server Socket API를 통해 구현
인텔리제이 프로젝트 내 클래스로 구현
cmd창에서 ipconfig로 현재 본인 서버의 ip주소 확인
여기선 임의로 127.0.0.1로 하겠음 포트는 5050
- 서버 구현 코드
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String arg[])
{
Socket socket = null; //Client와 통신하기 위한 Socket
ServerSocket server_socket = null; // 서버 생성을 위한 ServerSocket
BufferedReader in = null; //Client로부터 데이터를 읽어들이기 위한 입력스트림
PrintWriter out = null; //Client로 데이터를 내보내기 위한 출력 스트림
try{
server_socket = new ServerSocket(5050);
}catch(IOException e)
{
System.out.println("해당 포트가 열려있습니다.");
}
try {
System.out.println("서버 오픈!!");
socket = server_socket.accept(); //서버 생성 , Client 접속 대기
in = new BufferedReader(new InputStreamReader(socket.getInputStream())); //입력스트림 생성
out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()))); //출력스트림 생성
String str = null;
str = in.readLine(); //Client로부터 데이터를 읽어옴
System.out.println("Client로 부터 온 메세지 : " + str);
out.write(str);
out.flush();
socket.close();
}catch(IOException e){}
}
}
- 클라이언트 구현 코드
import java.io.*;
import java.net.InetAddress;
import java.net.Socket;
public class Client {
public static void main(String[] arg) {
Socket socket = null; //Server와 통신하기 위한 Socket
BufferedReader in = null; //Server로부터 데이터를 읽어들이기 위한 입력스트림
BufferedReader in2 = null; //키보드로부터 읽어들이기 위한 입력스트림
PrintWriter out = null; //서버로 내보내기 위한 출력 스트림
InetAddress ia = null;
try {
ia = InetAddress.getByName("127.0.0.1"); //서버로 접속
socket = new Socket(ia,5050);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
in2 = new BufferedReader(new InputStreamReader(System.in));
out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())));
System.out.println(socket.toString());
}catch(IOException e) {
}
try {
System.out.print("서버로 보낼 메세지 : ");
String data = in2.readLine(); //키보드로부터 입력
out.println(data); //서버로 데이터 전송
out.flush();
String str2 = in.readLine(); //서버로부터 되돌아오는 데이터 읽어들임
System.out.println("서버로부터 되돌아온 메세지 : " + str2);
socket.close();
}catch(IOException e) {
}
}
}
통신결과
클라이언트 콘솔
Socket[addr=/127.0.0.1,port=5050,localport=9692]
서버로 보낼 메세지 : 화이팅
서버로부터 되돌아온 메세지 : 화이팅
Process finished with exit code 0
서버 콘솔
서버 오픈!!
Client로 부터 온 메세지 : 화이팅
Process finished with exit code 0
참조
KOCW 네트워크 강의 - 한양대 2018 1학기 이석복 교수님
- OSI 7 Layer 중 4번째 계층 [본문으로]
'CS > NetWork' 카테고리의 다른 글
[네트워크] RDT 원리 (1.0, 2.0, 2.1, 2.2, 3.0) (2) | 2022.01.14 |
---|---|
[네트워크] 전송 계층 서비스의 원리(TCP,UDP) (0) | 2022.01.13 |
DNS(Domain Name System) 뜻,구조 (1) | 2022.01.11 |
[네트워크] 애플리케이션 계층 및 구조(HTTP 프로토콜) (0) | 2022.01.11 |
OSI 7계층 (0) | 2022.01.05 |
댓글