LINK 계층 [피지컬 영역]LAN, WAN, MAN과 같은 네트워크 표준과 관련된 프로토콜을 정의하는 영역. 물리적인 연결IP 계층 [네트워크 영역]경로 선택.목적지에 데이터를 보내기 위해 중간에 어떠한 경로를 거쳐갈 것인가 해결.데이터의 전송 순서나 오류 발생에 대해서 전혀 관심을 두지 않음.TCP/UDP 계층 [트랜스포트 영역]데이터를 전송하는 방법을 정의.신뢰적인 데이터 전달 프로토콜의 구축. ==> RDTGo-Back-NSelective repeat어플리케이션 계층 [어플리케이션 영역]데이터 전송에 관련된 약속(규칙) 확립.소켓 프로그래밍.
Port: IP 주소 정보만을 가지고는 수신한 데이터 패킷을 메신저 프로그램에 전달할 것인지, 아니면 스트리밍 동영상 재생 프로그램에 전달해 줄 것인지 구분하지 못한다. 이를 구분하기 위한 것이 바로 Port이다. 32비트 IP주소로는 네트워크상에 존재하는 호스트를 구분하게 되고, 16비트 Port 정보로는 호스트 내에서 실행되고 있는 프로그램을 구분하게 된다. 이는 동일 호스트 내에서의 논리적인 할당일 뿐이다. 즉, 프로세서간 통신 또는 어떠한 프로세서에 데이터 패킷을 전달할 것인지에 결정하는데 사용된다. TCP 소켓과 UDP소켓은 Port를 서로 공유하지 않으므로 중복되어도 상관 없다. 주소 정보 구조체12345678typedef struct sockaddr_in { ADDRESS_FAMILY sin..
1int socket(int domain, int type, int protocol);cs 12345SOCKET WSAAPI socket( _In_ int af, _In_ int type, _In_ int protocol);csdomain : 생성할 소켓이 통신을 학 위해 사용할 프로토콜 체계 설정. 프로토콜 체계 정의 PF_INET IPv4 인터넷 프로토콜 PF_INET6 IPv6 인터넷 프로토콜 PF_LOCAL Local통신을 위한 UNIX 프로토콜 PF_PACKET Low level socket을 위한 인터페이스 PF_IPX IPX 노벨 프로토콜 PF_LOCAL >> 유닉스 계열의 시스템에서 시스템 내부의 프로세스들끼리 통신을 하기 위한 용도로도 사용 될 수 있음.type : 소켓이 데이터를 전송하..
파일 디스크립터 : 시스템이 만들어 놓은 것을 가리키기 좋게 하기 위해 시스템이우리들에게 건네주는 숫자에 지나지 않는다.--> 디스크립터란 용어 대신에 핸들이라는 표현도 함께 사용된다. 리눅스 [디스크립터] / 윈도우즈 [핸들] 윈도우즈와 리눅스의 입/출력 함수리눅스는 소켓이나 파일이나 모두 파일로 간주하기 때문에, 시스템 입/출력 함수은 write()와 read()함수를 사용해서 어디로든지 데이터를 전송하고 수신할 수 있다. 따라서, 소켓이든 파일이든 생성을 하면 파일 디스크립터가 리턴된다. 윈도우즈는 BSD 계열 유닉스 소켓을 참고로 하여 설계되었다. 따라서 BSD소켓과의 호환성을 위해 _read(), _write() 함수를 제공하고 있으나 거의 사용되지 않고, 또한 적절하지도 않다. 윈도우즈는 소켓..
12345char hostname[255];PHOSTENT hostinfo = NULL; if (gethostname(hostname, sizeof(hostname)) == 0) if ((hostinfo = gethostbyname(hostname)) != NULL) printf("server address -> %s\n", inet_ntoa(*(struct in_addr*)*hostinfo->h_addr_list));cs
NBO [Network - byte - Ordering]: sockaddr_in 구조체 변수에 값을 대입할 경우에는 NBO 순서로 값을 병경한 다음에 대입해야 한다.NBO는 시스템이 내부적으로 데이터를 표현하는 방법을 의미한다. 크게 두가지 방법으로 나뉘는데 Big-Endian과 Little-Endian으로 나뉜다. Big-Endian: 상위 바이트의 값이 메모리상에 먼저 표시되는 방법(번지수가 작은 위치에) Little-Endian: 하위 비트의 값이 메모리상에 먼저 표시되는 방법. 시스템이 내부적으로 데이터를 처리하는데 있어서 Big-Endian 또는 Little-Endian을 쓰느냐는 시스템의 CPU에 따라 달라진다. 따라서 서로 다른 CPU를 장착하고 있는 호스트들이 데이터를 주고 받을 경우 문제..
안드로이드 Socket 네트워크 사용 방법: 안드로이드 4.0 이상부터는 Thread를 사용해야만 통신이 가능하다. java Thread 또는 AsyncTask 둘중 하나를 사용해야 한다. 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556public class MainActivity extends AppCompatActivity implements Runnable{ Socket sock; DataOutputStream output; DataInputStream input; int PORT = 1040; String IP = "xxx.xxx.xxx.xxx"; Thread ..
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104#include #include #include #pragma comment(lib, "WS2_32.lib")#include "resource.h" #define WM_NETWORK (WM_USER + 1) HWND hDlgMain; SOCKET Socket;sockaddr_in Address; char ListStr[256]; BOOL CALL..
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102#include #include #include #pragma comment(lib, "WS2_32.lib")#include "resource.h" #define WM_NETWORK (WM_USER + 1) HWND hDlgMain; SOCKET Socket, ClntSocket;sockaddr_in Address, ClntAddress; char List..