소켓을 작성
1%의 네트워크 원리 (07) - TCP/IP의 데이터를 전기 신호로 만들어 보냄 1
- 소켓을 작성
- 서버에 접속
- 데이터 송·수신
- 서버에서 연결을 끊어 소켓을 말소
- IP와 이더넷의 패킷 송·수신 동작
- UDP 프로토콜을 이용한 송·수신 동작
01 소켓을 작성
1 프로토콜 스택의 내부 구성
- 애플리케이션- 네트워크 애플리케이션 (웹 브라우저, 웹 서버, 메일 서버 등 프로그램)- Socket 라이브러리- 리졸버
 
 
- Socket 라이브러리
 
- 네트워크 애플리케이션 (웹 브라우저, 웹 서버, 메일 서버 등 프로그램)
- OS- 프로토콜 스택- TCP(커넥션 사용), UDP(커넥션 사용 x)
- IP: 패킷 운반, 경로 결정- ICMP
- ARP
 
 
 
- 프로토콜 스택
- 드라이버 소프트웨어- LAN 드라이버: LAN 어댑터 제어
 
- 하드웨어- LAN 어댑터: 케이블에 대해 실제 신호를 송·수신 동작
 
TCP(Transmission Control Protocol)
- 브라우저나 메일 등의 일반적인 애플리케이션이 사용해 데이터를 송·수신
UDP(Uer Datagram Protocol)
- DNS 서버에 대한 조회 등에서 짧은 제어용 데이터를 송·수신
IP(Internet Protocol)
- IP 프로토콜을 사용해 패킷을 송·수신
ICMP(Internet Control Message Protocol)
- 패킷을 운반할 때 발생하는 오류를 통지하거나 제어용 메시지를 통지할 때 사용
ARP(Address Resolution Protocol)
- IP 주소에 대응하는 이더넷의 MAC 주소를 조사할 때 사용
패킷
- 네트워크에서 데이터는 수십~수천 바이트 정도의 작은 덩어리로 분할되어 운반됨
- 이렇게 분할된 데이터의 덩어리
MAC 주소
- IEEE에서 표준화된 LAN 방식의 기기는 모두 같은 형식의 주소 사용
- 이 주소를 MAC 주소라 함
2 소켓의 실체는 통신 제어용 제어 정보
프로토콜 스택
- 내부에 제어 정보를 기록하는 메모리 영역을 가짐
- 여기에 통신 동작을 제어하기 위한 제어 정보를 기록
- 이 제어 정보가 소켓의 실체. 혹은 제어 정보를 기록한 메모리 영역이 소켓의 실체
- 프로토콜 스택은 소켓에 기록된 제어 정보를 참조해 동작
- 윈도우에서 netstat명령어로 소켓 확인 가능
1
2
3
4
5
Proto      Local Address      Foreign Address      State        PID
TCP        0.0.0.0:135        0.0.0.0:0            LISTENING    1200
TCP        118.42.2.212:2477  222.233.53.144:80    ESTABLISHED  1720
UDP        0.0.0.0:445        *:*                               4
- PID: 해당 소켓을 사용하고 있는 프로그램의 PID
- State: 통신 상태- LISTENING: 상대의 접속을 기다리는 상태
- ESTABLISHED: 접속 동작이 끝나고 데이터가 통신중인지 나타냄
 
- Foreign Address: 통신 상대측(원격측)의 IP 주소, 포트 번호- 0.0.0.0:0: 아직 통신 시작하지 않음. 특정 IP 주소나 포트와 연결되지 않았음
- *:*: UDP는 소켓을 상대측의 주소나 포트와 연결하지 않음. 상대측은- *:*가 됨
 
- Local Address: netstat 명령을 실행한 기계 자체(로컬측)의 IP 주소, 포트 번호- 여러 개의 LAN 어댑터가 장착되었다면 여러 개의 IP 주소 존재
 
- Proto: 프로토콜의 종류. TCP, UDP
- 한 행이 하나의 소켓을 나타냄
- 소켓 생성은 새로운 한 행의 제어 정보를 추가하는 것
PID(Proccess ID)
- 각 프로그램을 식별하기 위해 OS가 할당하는 번호
3 Socket을 호출했을 때의 동작
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
          프로토콜 스택                 애플리케이션(브라우저)
          IP 담당     UDP 담당
DNS     <-------------- 송신 <-------   <메모리 영역> = gethostbyname(...);
서버    --------------> 수신 ------->
                      TCP 담당
웹                    소켓 작성 <-----  <디스크립터> = socket(...);
서버                            ----->
        <-------------- 접속 <--------  connect(...);
        -------------->      -------->
        <-------------- 송신 <--------  write(...);
                             -------->
        --------------> 수신 <--------  <수신 데이터 길이> = read(...);
                             -------->
        <------------ 연결 끊기 <-----  close(<디스크립터>);
        ------------>
                      소켓 말소 ----->
소켓 작성
- 소켓 한 개 분량의 메모리 확보
- 초기 상태 기록
디스크립터
- 프로토콜 스택 내부의 다수의 소켓 중 어느 것을 가리키는지 나타내는 정보
참고
성공과 실패를 결정하는 1%의 네트워크 원리
