Session 18_Networking and Sockets. 다운받기

Download Report

Transcript Session 18_Networking and Sockets. 다운받기

Session 18
Networking and Sockets
Networking Layers
Application Layer
• ftp, telnet, etc.
Transport Layer
• TCP, UDP, etc.
Network Layer
• IPV4, IPV6, etc.
Datalink Layer
• Ethernet, Token Ring, etc.
• Device Driver
Networking Layers
• Application layer
– Network application과 Application layer protocol이 존재한다.
– HTTP(웹 문서 요청과 전송을 위해 제공), SMTP(전자 메일 전송을 제공), FTP(두
종단 시스템 간의 파일 전송 제공)등의 프로토콜을 포함한다.
– 한 종단 시스템에 있는 application이 다른 종단 시스템에 있는 application과 정
보 패킷을 교환하는 데 Application layer protocol을 이용한다.
• Transport Layer
– Client와 server간에 application layer 메시지를 전송하는 서비스를 제공한다.
– TCP와 UDP라는 transport protocol이 보통 사용된다.
•
•
TCP - transmission Control protocol
UDP – user datagram protocol
Networking Layers
• Network layer
– 한 host에서 다른 host로 datagram을 routing하는 책임을 진다.
– 대부분이 보통 사용하는 protocol로서 IPV4, IPV6가 있다.
• Datalink layer
– Hardware part
– Device type과 network card를 위한 actual device driver를 포함한다.
•
•
Ethernet, Token Ring
Device driver
What are Sockets?
• 일반적인 프로세스 간 통신(Inter-Process Communication)은 동일
한 컴퓨터 상에서 수행하는 여러 프로세스 사이에 데이터를 전달하
기 위한 서비스이다.
• Socket은 네트워크 상에 연결된 서로 다른 시스템 상에서 수행되는
프로세스 사이에 데이터 전달이 가능한 IPC이다.
함수 socket
#include <sys/types.h>
#include <sys/socket.h>
int socket(int domain, int type, int protocol);
• 함수 socket은 통신하기 위한 끝점(endpoint)인 socket descriptor를
생성한다.
– Socket descriptor는 file descriptor와 동일하게 많은 file 입출력 함수에서 사용
가능하다.
• Return 값: 성공 시 socket descriptor, error 시-1.
Domains
Domain
설명
AF_INET
IPv4 인터넷 도메인
AF_INET6
IPv6 인터넷 도메인
AF_UNIX
UNIX 도메인
AF_UNSPEC
지정되지 않음
• Domain 인수는 통신의 도메인을 지정하는 것으로 도메인은 주소형
식을 비롯한 통신의 기본 속성들을 결정한다.
• 도메인 상수들의 접두어인 AF_는 “address family”의 약자로 각 도메
인마다 고유한 주소 형식이 쓰이기 때문에 이런 이름이 붙게 되었다.
Types
Type
설명
SOCK_STREAM
순차적, 신뢰성, 양방향, 연결 지향적 byte stream
SOCK_DGRAM
고정 길이의 연결 없는 비신뢰성 메시지
SOCK_SEQPACKET
고정 길이, 순차적, 신뢰성, 연결 지향적 메시지
SOCK_RAW
IP에 대한 datagram interface
• Type인수는 소켓의 종류를 의미한다.
Types
• SOCK_DGRAM
–
–
–
–
Datagram interface에서는 통신의 두 종점 사이에 논리적인 연결 불필요
상대방 프로세스가 사용하는 소켓의 주소를 지정해서 메시지 전송
결과적으로 연결 없는 서비스 제공
편지 보내기(하나의 datagram은 자기 완결적인 메시지)
• SOCK_STREAM
– Byte stream에서는 소켓 통신의 양 종점이 자료를 주고받으려면 먼저 한 쪽의 소
켓과 다른 쪽의 소켓을 연결해야 함 => 연결 지향적
– Byte stream이기 때문에 응용프로그램이 메시지의 경계를 인식할 수 없다.
•
프로세스가 소켓에서 자료를 읽을 때에 자료를 전송한 프로세스가 기록한 것과 동일 한 개수의 바이
트들을 얻지는 못할 수도 있다.(write수와 read수가 다를 수 있다.)
– 전화 걸기(연결이 된 후부터 양방향 통신 가능)
Types
• SOCK_SEQPACKET
– SOCK_STREAM 소켓과 비슷하나 byte stream 서비스가 아니라 메시지 기반 서
비스를 제공한다.
– 결과적으로 항상 기록된 것과 동일한 양의 자료를 읽게 된다.
• SOCK_STREAM
– 네트워크 계층과 직접 연결되는 interface를 제공한다.
– 응용프로그램이 protocol header들을 직접 구축해야 한다.
– 시스템의 보안 메커니즘을 우회하는 packet들을 생성할 수 있기 때문에 super
user 권한이 필요하다.
Protocols
• Protocol 인수로는 프로토콜을 지정한다.
• 0을 주면 default protocol을 사용한다.(보통 0을 준다.)
– AF_INET domain의 SOCK_STREAM type을 사용하면 TCP(Transmission Control
Protocol) protocol이 사용됨
– AF_INET domain의 SOCK_DGRAM type을 사용하면 UCP(User Datagram
Protocol) protocol이 사용됨
Byte Ordering
• Big-endian
Big-endian
– 주소가 가장 높은 byte가
LSB(least significant byte, 최하위
바이트) 자리에 놓인다.
n n+1 n+2 n+3
• Little-endian
– 주소가 가장 낮은 byte가 LSB자리
에 놓인다.
운영체제
프로세서 아키
텍처
Byte Ordering
FreeBSD 5.2.1
Intel Pentium
Little-endian
Linux 2.4.22
Intel Pentium
Little-endian
Mac OS X 10.3 PowerPC
Big-endian
Solaris 9
Big-endian
Sun SPARC
MSB
LSB
Little-endian
n+3 n+2 n+1 n
MSB
LSB
32비트 정수의 byte 순서
Byte ordering 변환
#include <arpa/inet.h>
uint32_t
uint16_t
uint32_t
uint16_t
htonl(uint32_t hostlong);
htons(uint16_t hostshort);
ntohl(uint32_t netlong);
ntohs(uint16_t netshort);
• 위 함수는 host processor와 network 사이의 byte ordering을 변환
한다.
–
–
–
–
host = “host” byte 순서
net = “network” byte 순서
long = 32bits
short = 16bits
• Return 값 : 변환된 값