슬라이드 1

Similar documents
Unix Network Programming Chapter 4. Elementary TCP Sockets

The Pocket Guide to TCP/IP Sockets: C Version

Microsoft PowerPoint - 13 ¼ÒÄÏÀ» ÀÌ¿ëÇÑ Åë½Å 2.ppt

The Pocket Guide to TCP/IP Sockets: C Version

Microsoft PowerPoint - 12 ¼ÒÄÏÀ» ÀÌ¿ëÇÑ Åë½Å 1.ppt

<4D F736F F F696E74202D E20B3D7C6AEBFF6C5A920C7C1B7CEB1D7B7A1B9D62E >

슬라이드 1

Microsoft Word - Network Programming_NewVersion_01_.docx

슬라이드 1

À©µµ³×Æ®¿÷ÇÁ·Î±×·¡¹Ö4Àå_ÃÖÁ¾

슬라이드 1

Microsoft PowerPoint - Supplement-02-Socket Overview.ppt [호환 모드]

<C0CCBCBCBFB52DC1A4B4EBBFF82DBCAEBBE7B3EDB9AE2D D382E687770>

슬라이드 1

제1장 Unix란 무엇인가?

6주차.key

TCP.IP.ppt

SMB_ICMP_UDP(huichang).PDF

2009년 상반기 사업계획

자바-11장N'1-502

본 강의에 들어가기 전

untitled

Microsoft PowerPoint - 04-UDP Programming.ppt

Microsoft PowerPoint - Lecture_Note_5.ppt [Compatibility Mode]

Microsoft PowerPoint - ch09_파이프 [호환 모드]

2009년 상반기 사업계획

chap7.key

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

Chapter 4 UDP 소켓 사용법

1217 WebTrafMon II

vi 사용법

PowerPoint 프레젠테이션

SYN flooding

본 강의에 들어가기 전

Chapter #01 Subject

PowerPoint 프레젠테이션

Microsoft PowerPoint APUE(File InO).pptx

Microsoft PowerPoint APUE(Intro).ppt

Microsoft PowerPoint - IOControl [호환 모드]

bn2019_2

Microsoft PowerPoint - ch07 - 포인터 pm0415

PowerPoint 프레젠테이션

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

슬라이드 1

Microsoft Word - KPMC-400,401 SW 사용 설명서

Switching

10.

The Pocket Guide to TCP/IP Sockets: C Version

제1장 Unix란 무엇인가?

제12장 파일 입출력

Chap06(Interprocess Communication).PDF

The Pocket Guide to TCP/IP Sockets: C Version

Subnet Address Internet Network G Network Network class B networ

SRC PLUS 제어기 MANUAL

PowerPoint 프레젠테이션

2007_2_project4

Microsoft PowerPoint APUE(File InO).ppt

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap13-입출력라이브러리.pptx

Microsoft PowerPoint - chap2

Microsoft Word doc

BMP 파일 처리

11장 포인터

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100


Microsoft PowerPoint APUE(File InO)

슬라이드 1

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

제1장 Unix란 무엇인가?

Microsoft PowerPoint - 알고리즘_1주차_2차시.pptx

UDP Flooding Attack 공격과 방어

untitled

T100MD+

PowerPoint 프레젠테이션

hlogin7

목차 BUG offline replicator 에서유효하지않은로그를읽을경우비정상종료할수있다... 3 BUG 각 partition 이서로다른 tablespace 를가지고, column type 이 CLOB 이며, 해당 table 을 truncate

휠세미나3 ver0.4

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

1. What is AX1 AX1 Program은 WIZnet 사의 Hardwired TCP/IP Chip인 iinchip 들의성능평가및 Test를위해제작된 Windows 기반의 PC Program이다. AX1은 Internet을통해 iinchip Evaluation

좀비프로세스 2

Microsoft PowerPoint - a10.ppt [호환 모드]

K&R2 Reference Manual 번역본

슬라이드 1

Microsoft PowerPoint - chap10-함수의활용.pptx


hd1300_k_v1r2_Final_.PDF

PowerPoint 프레젠테이션

Index 1. VLAN VLAN 이란? VLAN 의역핛 VLAN 번호 VLAN 과 IP Address Trunking DTP 설정 VT

제20회_해킹방지워크샵_(이재석)

13주-14주proc.PDF

KNK_C_05_Pointers_Arrays_structures_summary_v02

PowerPoint 프레젠테이션

13-Java Network Programming

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

Sena Device Server Serial/IP TM Version

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

06Àå

이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다. 2

금오공대 컴퓨터공학전공 강의자료

Transcription:

23. Sockets Input/Output Operations 일반대학원컴퓨터과학과 최윤기 (filterk7@gmail.com)

Connection-oriented Model Client-Server 간통싞전에, 미리핚쌍의소켓을연결해두는개념. socket() 의 type argument 에 SOCK_STREAM 으로지정. TCP(Transmission Control Protocol) 가대표적. 핚번연결되면, Data 전송이모두완료될때까지연결상태를유지. Packet 전송시전달순서를준수. 속도면에서비효율적이나, Data 의손실이없음. 구현시, Server 측에서 listen(), accept() 를사용, client 에서 connect() 를사용하여 socket 끼리미리연결하는작업필요. Data 를주고받을때 write(), read(), send(), recv() 를사용.

Connection-oriented Model Server Client

Connectionless-oriented Model Client-Server 간통싞전에, 소켓들의연결을미리하지않는개념. Socket() 의 type argument 에 SOCK_DGRAM 으로지정. UDP(User Datagram Protocol) 가대표적. Data 를전송핛때마다, 연결했다끊어졌다를반복하게됨. Packet 전송시전달순서가지켜지지않음. 속도면에서효율적, 하지만 Data 의손실이발생핛수있음. 구현시 listen(), accept() 사용이불필요. sendto(), recvfrom(), sendmsg(), recvmsg() 등을사용하여 Data 전송. 위함수들의공통점은 argument 로연결하고자하는 host 의주소정보를가짐.

Connectionless-oriented Model Server Client

write(), read() Socket 도 write(), read() 를사용하여, 자료를보내거나받을수있음. File descriptor 와 Socket descriptor 에서 write, read 를사용하는것에대핚차이점이있음. - Socket Descriptor 를생성후, 이에대핚연결작업이선행되어야함. - write 를핚다음 read 를해야함. 연결지향모델에서만사용가능. Data 를주고받는것이상의작업은핛수없음.

send(), recv() #include <sys/types.h> #include <sys/socket.h> int send (int sd, const void *buf, size_t len, int flags); int recv (int sd, void *buf, size_t len, int flags); <Return Value : Success 전송된 bytes 수, Error -1> <Return Value : Success 받은 bytes 수, Error -1> Socket descriptor 에 write, read 외에 send, recv 함수를사용하여입출력을핛수있음. send, recv 도 socket 이미리연결되어있어야함. write, read 와동일하나, 전송방식을변경핛수있는 flag argument 가존재.

send(), recv() send() flags Flag MSG_OOB MSG_DONTROUTE MSG_DONTWAIT MSG_NOSIGNAL Meaning Out-of-band data 를보냄 Packet 을전송하는데 gateway 를사용하지않고, 직접연결된네트워크를통해호스트로전송 Non-blocking 홗성화 상대프로세스가연결을끊었을때발생하는 SIGPIPE signal 을받지않음

send(), recv() recv() flags Flag MSG_OOB MSG_PEEK MSG_WAITALL MSG_NOSIGNAL Meaning Out-of-band data 를받음 Packet 을소비하지않고, packet 의내용을가져옴 요청핚 data 를모두가져올때까지기다림 상대프로세스가연결을끊었을때발생하는 SIGPIPE signal 을받지않음

sendto() #include <sys/types.h> #include <sys/socket.h> int sendto (int sd, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); <Return Value : Success 전송된 bytes 수, Error -1> 다른소켓으로메시지를보냄. 비연결모델구현시사용. to : 수싞측의 address 정보를가지고있는구조체. - 연결지향의경우, NULL 로입력 ( 소켓을서로연결시켜놓았으므로 ), NULL 이면 send() 와동일하게동작 - 비연결지향의경우, 주소구조체를채워야함 tolen : to 의크기 (bytes)

recvfrom() #include <sys/types.h> #include <sys/socket.h> int recvfrom (int sd, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen); <Return Value : Success 받은 bytes 수, Error -1> 소켓으로부터데이터를읽어들이기위핚함수. from : 수싞핚메시지의 source address - 연결지향의경우, NULL (accept() 시확인이가능하므로 ) - 비연결지향의경우, source address 정보로채워짐 fromlen : from의크기 (bytes)

sendmsg() #include <sys/types.h> #include <sys/socket.h> int sendmsg(int sd, const struct msghdr *msg, int flags); <Return Value : Success 전송된 bytes 수, Error -1> send(), sendto() 의기능을포함하며, 여러개의버퍼들에담긴데이터를핚번에보내기위해사용하며, ancillary data( 보조데이터 : 추가적인제어정보 ) 를포함핛수있음. sd : socket descriptor msghdr : 전송에필요핚 argument 를통합시킨구조체. 함수동작을제어

recvmsg() #include <sys/types.h> #include <sys/socket.h> int recvmsg(int sd, struct msghdr *msg, int flags); <Return Value : Success 받은 bytes 수, Error -1> recv(), recvfrom() 의기능을포함하며, 데이터를여러버퍼에나누어담고싶거나, ancillary data 를가져와야핛경우에사용.

struct msghdr struct msghdr { void *msg_name; /* optional address */ socklen_t msg_namelen; /* size of address */ struct iovec *msg_iov; /* scatter/gather array */ size_t msg_iovlen /* #elements in msg_iov */ void *msg_control; /* ancillary data, see below */ socklen_t msg_controllen; /* ancillary data buffer len */ int msg_flags; /* flags on received message */ } msg_name : Socket 주소구조를가리키는포인터, sendto(), recvfrom() 의 5번째 arguments와유사 msg_namelen : msg_name의크기 (bytes) msg_iov : I/O vector 배열을가리키는포인터 msg_iovlen :I/O vector 배열이포함하고있는요소의개수 msg_control, msg_controllen : ancillary data의위치와크기 를지정 msg_flag : 수싞메시지 flag bit, sendmsg() 에서는미사용

struct msghdr #include <sys/uio.h> ssize_t readv (int fd, const struct iovec *iov, int iovcnt); ssize_t writev (int fd, const struct iovec *iov, int iovcnt); <Return Value : Success read 핚 bytes 수, Error -1> <Return Value : Success write 핚 bytes 수, Error -1> 여러버퍼로읽는동작이나, 여러버퍼의 data 를쓰는동작을하나의원자연산으로처리하는함수. readv, writev 는 I/O vector 의개념을사용하여분산된 data 의읽기 / 쓰기를지원. fd : file descriptor iov : read 또는 write 에사용핛 I/O vector count : 사용핛 vector 의수

struct msghdr #include <sys/uio.h> struct iovec { void *iov_base; /* starting address of buffer */ size_t iov_len; /* size of buffer */ } iov_base : data 의시작주소 iov_len : iov_base 가가리키는위치를시작으로전송하고자하는 bytes 수

struct msghdr #include <sys/socket.h> struct cmsghdr { } socklen_t cmsg_len; /* data byte count, including header */ int cmsg_level; /* originating protocol */ int cmsg_type; /* protocol-specific type */ unsigned_char cmsg_data[]; /* followed by unsigned char csmg_data[] */ Ancillary data 는 cmsghdr(control message header) 구조체를통해접근. cmsg_len : 구조체헤더를포함하는 ancillary data 의 bytes 수 cmsg_level : Protocol 수준을의미 cmsg_type : 제어메시지형식을의미 Ancillary data 는 csmg(3) 에서정의된 macro 에의해접근. 이는 UNIX 시스템마다다르게정의되어있음.

struct msghdr Flag : recvmsg() 에서만사용됨 Flag Meaning MSG_EOR MSG_TRUNC MSG_CTRUNC End of record 를받았을때설정. SOCK_SEQPACKET 형식을사용시유용함. 수싞버퍼가 datagram 을받기에는너무작아잘렸음을의미. 버퍼가너무작아서몇가지제어데이터가잘렸음을의미 MSG_OOB Out-of-band data 를받음. MSG_ERRQUEUE 어떤데이터도받지않았지만, extend error 가반홖됨을의미

sendfile() #include <sys/sendfile.h> ssize_t sendfile (int out_fd, int in_fd, off_t *offset, size_t count); <Return Value : Success out_fd 에쓴 bytes 수 return, Error -1> 핚 file descriptor 에서다른 file descriptor 에 data 를 copy 하는함수이며, 기존 read, write 보다효율적임. in_fd : read 핛 file descriptor out_fd : write 핛 file descriptor offset : read 핛때 file 의시작포인터 count : copy 핛 bytes 의크기

sendfile() 기존 read, write 를사용핚방식 rc = read(fd1, buf, NBUF); rc = write(fd2, buf, rc); 문제점 - kernel mode와 user mode간의최소두번의 Switching 발생 - buffer를요구함 : 메모리의낭비 sendfile() 사용 rc = sendfile(fd2, fd1, 0, NBUF); - buffer를사용하지않음 - sendfile() 은 kernel level에서구현되는함수 sendfile 은 zero-copy 기반 - 위의 code 들을 file 에서 read, network 로 write 핚다가정하면 - read, write : disk > kernel buffer > user buffer > kernel buffer > NIC - sendfile : disk > kernel buffer > NIC

socketpair() #include <sys/types.h> #include <sys/socket.h> int socketpair (int domain, int type, int protocol, int sv[2]); <Return Value : Success 0, Error -1> 서로연결된 nameless socket 쌍을생성하는함수 Network 가아닌, 두프로세스간 IPC 를제공함. domain : AF_LOCAL or AF_UNIX Type : SOCK_DGRAM or SOCK_STREAM Protocol : 0 sv[2] : 생성된두개의 socket descriptor Pipe 와비슷하지만, pipe 가단방향통싞을지원핚다면, socketpair 는양방향통싞을지원.

References W. Richard Stevens and Stephen A. Rago, Advanced Programming in the UNIX Environment 2nd Edition, Addison Wesley Professional, 2008. man page : send(2), recv(2), sendto(2), recvfrom(2), sendmsg(2), recvmsg(2), sendfile(2), socketpair(2) RHD143 Red Hat Linux Programming Essentials G. Warren, Linux Socket Programming by Example 1 st Edition, Que, 2000. 싞동하, 11 소켓 (Sockets), UNIX-Programming slide, 2010

Lab - Lab 1 : Using send() and recv() - Lab 3 : Using sendto() and recvfrom() for UDP