주소체계 & 데이터 정렬
IPv4 기준의 4바이트 IP주소는 네트워크 주소와 호스트 주소로 나뉨
라우터&스위치 : 외부로부터 수신된 데이터를 호스트에 전달하고, 호스트가 전달하는 데이터를 외부로 송신해주는 물리적 장치
(스위치 : 라우터보다 기능적으로 작은 것)
- 클래스 A의 첫 번째 비트는 항상 0으로 시작
- 클래스 B의 첫 두 비트는 항상 10으로 시작
- 클래스 C의 첫 세 비트는 항상 110으로 시작
IP는 데이터를 NIC(네트워크 인터페이스 카드)을 통해 컴퓨터 내부로 전송하는데 사용
운영체제는 PORT 번호를 활용하여 컴퓨터 내부로 전송된 데이터를 소켓에 적절히 분배하는 작업을 함
*PROT번호는 하나의 운영체제 내에서 동일한 PORT번호를 둘 이상의 소켓에 할당할 수 없음.
but TCP소켓과 UDP소켓은 PORT번호를 공유하지 않기 때문에 중복되어도 상관없음.
<구조체 sockaddr_in의 멤버>
IPv4의 주소정보를 담기 위해 정의된 구조체
1. sin_family : 주소체계 ex) AF_INET(IPv4)
2. sin_port : 16비트 TCP/UDP PORT번호
네트워크 바이트 순서로 저장
3. sin_addr : 32비트 IP주소
네트워크 바이트 순서로 저장
4. sin_zero[8] : 0으로 두면됨 (사용x)
<바이트 순서 & 네트워크 바이트 순서>
(cpu에 따라 다르게 저장)
빅 에디안 : 상위 바이트의 값을 작은 번지수에 저장하는 방식
리틀 에디안 : 상위 바이트의 값을 큰 번지수에 저장하는 방식
호스트 바이트 순서 : cpu별 데이터 저장방식을 의미
네크워크 바이트 순서 : 통일된 데이터 송수신 기준
*네트워크 에서는 빅 에디안 방식으로 통일함
<바이트 순서의 변환>
- unsigned short htons (unsigned short)
- unsigned short ntohs (unsigned short)
- unsigned long htonl (unsigned long)
- unsigned long ntohl (unsigned long)
s = PORT번호의 변환에 사용
l = IP주소의 변환에 사용
//이러한 변환은 자동으로 된다고 한다... 다행이 아닐 수 없다 ㅠㅠ
이거 다 하나씩 변환할 생각하면 ...;; 끔찍.
<문자열 정보를 네트워크 바이트 순서의 정수로 변환>
사람이 보기편한게 문자열 형식의 123.123.123.12
소켓에 넣어줄려면 정수 형식이 필요함
따라서 변환해 주는 함수가 필요
- in_addr_t inet_addr(const char * string);
성공 시 빅 에디안으로 변환된 32비트 정수 값 반환
(IP주소 초기화)
*INADDR_ARY = 현재 실행중인 컴퓨터의 IP를 소켓에 부여할 때 사용되는 것
- int inet_aton(const char * string, struct in_addr * addr);
string : 변환할 IP주소 정보를 담고 있는 문자열의 주소 값 전달
addr : 변환된 정보를 저장할 in_addr 구조체 변수의 주소 값 전달
(PORT번호 초기화)
- char * inet_ntoa(struct in_addr adr);
inet_aton 함수의 반대기능 = 정수형 IP주소 번보를 문자열의 형태로 변환
루프백 주소 (127.0.01) = 클라이언트를 실행하는 컴퓨터의 IP주소를 의미
사용하는 이유 : 서버와 클라이언트를 한 대의 컴퓨터에서 실행시켰기 때문
참고 문서 : 윤성우의 열혈 tcp/ip 소켓 프로그래밍
//서울가는 버스에서 강의듣고 하는데 덜컹덜컹 거린다 ㅠㅠ
'CS > 네트워크' 카테고리의 다른 글
[윤성우의 열혈 TCP/IP 소켓 프로그래밍] TCP 기반 서버/클라이언트 (윈도우) (0) | 2019.02.07 |
---|---|
[윤성우의 열혈 TCP/IP 소켓 프로그래밍] TCP 기반 서버/클라이언트 1 (0) | 2019.02.05 |
[윤성우의 열혈 TCP/IP 소켓 프로그래밍] 프로토콜 (0) | 2019.02.02 |
[윤성우의 열혈 TCP/IP 소켓 프로그래밍] Chapter 01 내용 확인문제 (0) | 2019.01.31 |
[윤성우의 열혈 TCP/IP 소켓 프로그래밍] 네트워크 프로그래밍 & 소켓 (0) | 2019.01.12 |
댓글