본문 바로가기

Network

OSI 하위 3계층 (물리, 데이터 링크, 네트워크) 1계층 : 물리 계층 (physical Layer) 하는일 : 위 계층으로부터 받은 데이터를 통신매체에 따른 신호로 변경하여 전송한다. (ex. 광케이블 -> 빛) 장비 : 케이블, 허브, 리피터(증폭/재생) 2계층 : 데이터 링크 계층(Data-Link Layer) 하는일 : 서로 다른 네트워크들의 차이를 흡수한다. 물리 계층으로부터 송수신되는 데이터의 오류를 수정하며 흐름을 관리한다. 네트워킹 방식 : 1. 이더넷(Ethernet) : 버스형 토폴로지에서 쓰이며 CSMA/CD 방식으로 통신한다. 네트워크를 살펴서 아무도 통신을 하고 있지 않으면 데이터를 전송하고 수신 여부를 확인한다. 만약, 다른 컴퓨터의 데이터와 충돌(Collision)이 발생해 데이터가 수신되지 않으면 랜덤한 시간을 기다린 후 재.. 더보기
OSI 7계층(Layer)과 TCP/IP 4계층 OSI 7계층 TCP/IP 4계층 7. 애플리케이션 계층 : 애플리케이션 서비스가 진행되는 계층이다. HTTP, SMTP, 등과 같은 애플리케이션 프로토콜이 실행된다. 6. 프레젠테이션 계층 : 분산되어 온 데이터를 재조합하여 표현하거나 데이터를 보내기 좋게 조각낸다. 5. 세션계층 : 연결세션에서 에러를 복구하거나 데이터를 교환하며 연결을 유지한다 4. 트랜스포트 계층 : 데이터를 상대에게 보낸다. TCP, UDP 프로토콜이 있다. TCP : 데이터의 신뢰성을 중시한다.(상대가 데이터의 수신이 안됬거나 잘못된 데이터가 갔을경우 재전송한다) UDP : 데이터의 전송속도를 중시한다.(상대의 수신여부는 고려하지 않는다) 스트리밍 서비스 등에 사용 3. 네트워크 계층 : 프로토콜 IP 어떤 경로를 통해 상대에.. 더보기
C로짠 Client Windows Socket 소스 C로짠 Client Windows Socket 소스입니다. #include #include #include #pragma comment(lib, "ws2_32.lib") #define IP "127.0.0.1" #define PORT 80 int main() { WSADATA wsaData; SOCKET client; SOCKADDR_IN serveraddr; char buf[1024]; WSAStartup(0x0202, &wsaData); printf("WSAStartup : %d\n", WSAGetLastError()); client = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); printf("socket : %d\n", WSAGetLastError()); serve.. 더보기
Java 로 짠 Raw Socket 소스 웹서버에게 요청을 웹브라우저가 아닌 프로그램으로 해야될 경우가 있습니다. 그럴때 사용하는 프로그램에 대한 소스입니다. (Raw Socket) import java.net.*; import java.io.*; class raw_socket { public static void main(String[] args) { try { // Construct data String data = URLEncoder.encode("key1", "UTF-8") + "=" + URLEncoder.encode("value1", "UTF-8"); data += "&" + URLEncoder.encode("key2", "UTF-8") + "=" + URLEncoder.encode("value2", "UTF-8"); // Creat.. 더보기
내 도메인(domain) 주소 가지기 도메인 : 숫자로 된 IP 주소를 기억하고 알기 쉽게 영문으로 표기한 주소이다. 사용자가 도메인 주소를 요청하면 등록된 DNS 서버에서 해당 도메인 주소와 매핑된 IP 주소로 바꿔준다. 도메인 설정하기 : http://www.dyndns.com/ 위의 홈페이지에서 회원가입을 한다. (Sign up -> free Sign up) 위의 정보들을 입력한 후 Add To Cart 를 눌러 등록한다. (아래 부분은 사용할 서비스를 선택하는 것이다) 이후부터의 도메인 설정방법은 다음과 같은 경우에 따라 다르다. 1. 고정 IP 사용자(일반 사용자) 2. 고정 IP 사용자(공유기 사용자) 3. 유동 IP 사용자 1. 고정 IP 사용자(일반 사용자) : 끝.... 2. 고정 IP 사용자(공유기 사용자) : 시작 -> .. 더보기
리눅스 소켓 예제소스 Server.c #include #include #include #include #include #define SERV_TCP_PORT 1111 // 개방할 포트 #define SERV_ADDR "111.111.111.111" // 서버 IP main() { int s1,s2,x; struct sockaddr_in serv_addr, cli_addr; char buf[20]; size_t xx; printf("Hi, I am the server\n"); bzero((char *)&serv_addr, sizeof(serv_addr)); serv_addr.sin_family=AF_INET; serv_addr.sin_addr.s_addr=inet_addr(SERV_ADDR); serv_addr.sin_port.. 더보기
포트포워딩(Port Forwarding) 개념 : 포트 포워딩이란 특정 포트(Port)를 개방해주어 통신이 가능하게 해주는것입니다. 애초에 모든 포트를 개방했다면 포트 포워딩이 필요하지 않겠죠. 하지만 이럴 경우 보안상의 많은 위협에 노출이 될 수 있습니다. 따라서 대부분 방화벽을 사용합니다. 허용된 포트만 개방하여 통신하는 것이죠. 어떤 에플리케이션을 사용할 시에 그 에플리케이션에서 사용하는 포트를 개방해야 합니다. (에플리케이션 설치시에 자동으로 사용할 포트를 열기도 합니다) 설정 : 1. 공유기를 사용하지 않을 경우 : 이 경우에는 윈도우 방화벽에서만 설정해주면 OK 입니다. 'Windows 방화벽 -> 예외 -> 프로그램 추가' 에서 해당 프로그램을 클릭하시면 그 프로그램이 사용하는 포트를 개방하게 됩니다. (간혹 이렇게 해서 안되는 경.. 더보기