Download presentation
Presentation is loading. Please wait.
1
6. 네트워킹 (Networking)과 인터넷 (Internet)
유닉스는 재미있다. 유닉스는 사용하기는 쉽지만 배우기는 어렵다. 유닉스의 모든 것을 배우는 것은 불가능하다. 필요한 것과 재미있을 것 같다고 생각되는 부분에 관심을 쏟는 것이 좋다. 유닉스는 세련되고 영리한 사람들을 위한 도구의 집합이다. 유닉스는 문화(文化; culture)이다.
2
소개 일반 네트워크 용어 네트워크 구축 방법 네트워크 상에서 다른 사람들과 대화 방법 네트워크 상에서 다른 컴퓨터의 사용 방법
Unix/Linux
3
네트워크 구축 Serial port 끼리의 연결 Ethernet Bridge Router Gateway 가장 단순한 연결
대표적인 LAN 구성방식, 기계마다 주소 지정 필요 각 컴퓨터 - 고유의 주소, 이더넷 카드 장착 동일한 단일 동축 케이블에 연결 메시지 전송시 - 헤더에 주소 적재 collision 발생시 - random waiting으로 처리 Bridge 적은 수의 Ethernet 네트워크 구역을 직렬로(serial) 연결할 때 Repeater Router Ethernet 네트워크 구역 다 수를 상호(mutual) 연결할 때 Gateway 고용량의 Router로서, LAN에서 WAN으로의 확장 기준 라우터 기능 + 브리지 기능 + 다른 형식 또는 프로토콜로 변환 기능, (예) AppleTalk 라우터 Unix/Linux
4
The Simplest LAN: Serial Port Connection
serial connection Unix/Linux
5
Ethernet Ethernet cable Ethernet card Unix/Linux
6
Bridge Bridge Ethernet cable Ethernet cable Unix/Linux
7
Router Router Ethernet cable Ethernet cable Ethernet cable
Unix/Linux
8
Gateways Gateway Gateway Corporate Lan Corporate Lan Corporate Lan
Unix/Linux
9
인터넷(Internet) TCP/IP UDP/IP SRI-NIC, NIC, interNIC (KRNIC)
TCP (Transport Control Protocol) : packet 전송 IP (Internet Protocol) : stream 전송 연결형 소켓 (connection oriented protocol) 등기우편 소스 노드 주소와 목적 노드 주소 지정 수신여부 확인(ACKnoledge), ACK 못 받으면 재전송 UDP/IP UDP (User Datagram Control Protocol) : packet 전송 비연결형 소켓 (connectionless protocol) 일반우편 SRI-NIC, NIC, interNIC (KRNIC) SRI (Stanford Research Institute) NIC (Network Information Center) 인터넷 상의 LAN에 호스트의 고유 주소 할당 인터넷 Backbone에 어떻게 연결 되는지만 담당 (내부적인 관리는 무관) Unix/Linux
10
인터넷 주소 IP Address vs. Symbolic Address vs. Physical Hardware Address
8 bit 4 fields = 32 bits (예) Class A, B, C, D Domain Name = Symbolic Address (예) csblade.incheon.ac.kr Symbolic Address com (회사), edu (교육기관), gov( 정부), org( 비영리기관), mil (군용), XX (2자리 국가코드) Physical Hardware Address: 이더네트 주소 (Linux) $ ifconfig –a 또는 (Unix) $ arp -a 6-octet 수치 콜론으로 분리된 16진수 (예) 20:81:0a:10:c4:93 (처음 두 octet은 제 작사 코드) Unix/Linux
11
OSI 7 Layers & Internet protocol suite
Application Layer 6 Presentation Layer 5 Session Layer 4 Transport Layer 3 Network Layer 2 Data Link Layer 1 Physical Application TCP UDP IPv4, IPv6 Device Driver and Hardware Application sockets XTI Transport Network Link OSI 7 Layers Model Internet protocol suite OSI : Open System Interconnection XTI : X/Open Transport Interface Unix/Linux
12
인터넷에서의 데이터 흐름 Application Transport Transport Network Link 도착주소(IP) 전달
세그먼트 분할+포장+도착주소 중간주소 붙여 포장(도착주소 or라우터주소) 중간주소를 local network 주소로 변환 포장 벗겨 도착주소 확인 후 아니면 다시 포장+새중간주소(옆의 다른 라우터 주소) 메시지 재구성 포장 벗겨 도착주소 확인 맞으면 위로 전달 포장 벗겨 위로 전달 Transport 16-bit quantity 536~1460 =1090 포장 벗겨 위로 전달 Unix/Linux
13
연결형 시스템 호출 TCP/IP read( ) bind( ) listen( ) accept( ) socket( )
연결형 소켓(connection oriented protocol : TCP(Transmission Control Protocol)) 서버(server) 클라이언트(client) 클라이언트로부터 연결이 올 때까지 대기 프로세스에 요청 read( ) bind( ) listen( ) accept( ) socket( ) write( ) connect( ) Data 응답 Data 요청 연결설정 [참고 P535] Unix/Linux
14
비연결형 소켓 시스템 호출 UDP/IP 비연결형 소켓(connectionless protocol : UDP(User Datagram Protocol)) blocks until data received from a client data(request) process request data(reply) 서버(server) socket() bind() 클라이언트(client) recvfrom() socket() bind() sendto() write() read() Unix/Linux
15
인터넷(Internet) Address Mapping Service Routing Service
/etc/hosts Symbolic Address/Host Name/IP Address 간의 변환 Routing Service /etc/defaultrouter GATE (gateway) IP 주소 정의하여 DEST (destination)으로 갈 수 있는 정보 제공 arp (address resolution protocol) ‘누가 의 h/w 주소 아니?’ 방송 해당 컴퓨터가 ‘저예요’ 대답 (Unix) $ /usr/sbin/arp -a (캐시 내용 출력) (Linux) $ /sbin/arp -a 신뢰하는 호스트 개념 [최근 버전에서는 안됨] rlogin, rcp, rsh 시스템: su가 /etc/hosts.equiv에 리스트 기록 (‘remote-호스트’ 형식) 사용자: $HOME/.rhosts에 신뢰하는 호스트 또는 호스트-사용자 쌍 Unix/Linux
16
인터넷(Internet) Port Service
password 없이 다른 호스트의 셸을 얻는 두 가지 방법 (둘 중 한가지만 하면 됨) 원격 호스트들의 home directory 상의 .rhosts 화일 안에 이들 호스트들의 symbolic name들을 명시함 (remote command 실행 가능)… (Solaris9에서 안됨, 권장 않음) 시스템 관리자가 /etc/hosts.equiv안에 globally equivalent computer들의 symbolic name들을 나열함 (password 없이 login가능 / remote command 실행 가 능) Port Service 인터넷 호스트들간이 통신은 주소(번호)가 주어진 포트를 통하여 이루어짐 /etc/services 화일은 표준 포트(일반 사용자 용)의 목록을 보여줌 Unix/Linux
17
사용자 users ( /usr/ucb/users ) : local host 상의 사용자 표시
rusers (/usr/bin/rusers ) : remote host 상의 사용자 표시 (Unix Only) who : 더 많은 사용자 표시 users와 비슷하며 추가적인 정보가 제공 (형) who [ whoFile ] [ am i ] whoFile의 사례: /var/adm/wtmpx (예) who (예) who am i (예) [Unix] who /var/adm/wtmpx (strings /var/adm/wtmpx | more) cf. last (예) [Linux] who /var/log/wtmp (strings /var/log/wtmp | more) cf. last last : /var/log/wtmp 파일이나, -f 옵션에서 지정한 파일을 통해서 사용자의 로그인, 로그아웃 시간을 보여준다 /var/log/wtmp 파일 없을 때는 $ touch /var/log/wtmp Unix/Linux
18
사용자 w whois : 인터넷 정보 who와 거의 비슷하나 명시된 사용자가 실행 하고 있는 동작도 보여줌
(형) w userId * (예) w mysung whois : 인터넷 정보 주요 인터넷 위치에 관한 정보를 얻음 (형) whois [ -h hostName ] id hostName은 whois 서비스를 실행하고 있는 호스트이고 id는 찾고자 하는 인터넷 식별자임 (예) whois -h whois.krnic.net (KRNIC registry) KRNIC: Korea Network Information Center (예) whois -h whois.ripe.net seoul (European registry) Unix/Linux
19
사용자 hostname [name-of-host] finger 자신의 local host이름을 알아냄
슈퍼유저는 name-of-host 매개변수를 입력하여 local host의 이름을 바꿀 수 있음 finger 여러 출처에서 모은 사용자들에 관한 정보를 표시 (형) finger userId * - /etc/passwd - $HOME/.plan - $HOME/.project (예) finger (예) finger mysung (예) finger Unix/Linux
20
사용자들과 통신 mesg write wall talk 사용자들간의 통신을 가능(y) 또는 불가능(n)하게 함
(예) $ mesg y write 한 줄 씩 통신할 때 사용 (형) write userId [ tty ] 다수의 터미날 사용할 때 tty 명시 처음 통신자가 자신의 위치를 알려주는 것이 예의임(write 명령 초기화) 동기화용 상호 규약을 정하는 것이 편리 (예: -o- over, -oo- over and out) 끝낼 때, ^D 사용 wall local host상의 모든 사람들에게 메시지 전송(Broadcasting) (형) wall [ fileName ] talk [Solaris 10] $ inetadm -e talk 로 enable (root만) ] 분리된 화면 인터페이스를 통해 인터넷 상 (같은 호스트 또는 원격호스트)의 다른 사람과 대화(chatting) 화면 다시 그리기: ^L 종료: ^C (예) talk [Linux] $ /sbin/chkconfig --add talk 로 enable (root만) core 15 이상 지원 않음 Unix/Linux
21
전자우편: Mail mail : 전자 우편 메시지 전송 (형) mail -H [ -f fileName ] userID *
userID가 없으면, 전자우편을 읽는 것으로 간주함 (/user/spool/mail/<userID>에서) f 옵션으로 사용자의 전자우편 보관장소를 지정할 수 있음 H 옵션으로 사용자의 전자우편 보관장소로부터 제목들을 볼 수 있음 전자우편 시작하기 화일 ($HOME/.mailrc) $MAILRC에 이 화일경로가 명시됨 사용자의 요구를 맞추어 구성할 수 있음 특히 유용한 기능 전자우편 그룹 형성 group name userID + (Linux) group music mysung stu guest # in ".mailrc" $ mail music < letter ( 자기 자신한테는 오지 않음) (Solaris) 시스템 관리자가 그룹 형성 /etc/mail/aliases에 그룹 등록하고 $ newaliases 실행 $ cat /etc/mail/aliases music: mysung, stu, guest … Unix/Linux
22
Mail 명령 모드 ? 도움말 copy [mesgList] [fileName] 메시지 복사, "saved"라는 표시 없음
? 도움말 copy [mesgList] [fileName] 메시지 복사, "saved"라는 표시 없음 delete [mesgList] 메시지 삭제 file [fileName] 우편함 fileName으로부터 우편 읽기 header [message] message를 포함하는 메시지 제목 보이기 mail [userId]+ 전자우편 전송 print [mesgList] more를 이용하여 메시지를 보여줌 quit mail 빠져 나옴 reply [mesgList] 메시지의 송신자에게 응답함 save [mesgList] [fileName] 메시지 저장, fileName (default: mbox) mesgList (전자우편 메시지 집합) . 현재 메시지 nn 번호가 nn인 메시지 ^ 지워지지 않은 메시지 중에서 첫 번째 $ 마지막 메시지 * 모든 메시지 nn-mm 번호가 nn부터 mm사이의 메시지 user 사용자 user로부터 온 메시지 Unix/Linux
23
Mail mail 보내기 (예) $ mail stu Subject: ……… ^D
(예) $ mail stu < letter mail 받기 (예) $ mail (예) $ mail -f mbox (예) $ mail -H Linux에서 mail group 만들기 (예) $ vi .mailrc group mygg mysung stu guest (예) $ mail mygg … (예) $ mail mygg < letter Unix/Linux
24
분산 자료 rcp(remote copy) uucp (Unix-to-Unix CoPy)
/etc/hosts.equiv안에 등록된 globally equivalent computer들의 복사 (형) rcp -pr fileName + directory p 복사 하면서도 마지막 수정시간, 접근시간, 허가권을 보존 r recursively copy (예) rcp file1 unix1:file2 # 원격지 mysung의 같은 홈 디렉토리로 복사 (예) rcp file2 # 원격지 mysung의 stu 홈 디렉토리에 있는 file1을 복사해옴 uucp (Unix-to-Unix CoPy) 초기 USENET 시절 직렬선, 다이얼업 네트워킹에 사용 (이더넷 네트워킹은 IP 프로토콜 이용) unix 호스트들간의 화일 복사, rcp와 비슷 uucp sourcefile destfile 유사한 명령: cu (call Unix), tip (full-duplex terminal connection) 명령 이용 Unix/Linux
25
분산 자료 ftp ftp 프로토콜을 지원하는 다양한 호스트들간의 화일 복사
원격지 호스트의 .netrc를 탐색하여 anonymous ftp인지를 검사함(만일 anonymous ftp가 아니면, 계정과 패스워드를 물어봄) ^C 화일 전송 중지 (단, ftp는 지속됨) ftp의 명령 등 !command local host 상에서 명령 command 수행 append localFile remoteFile 지역화일을 원격지화일 끝에 추가 bell 모든 화일이 전송된 다음 벨이 울림 bye 원격지 호스트 연결 폐쇄 후, ftp 종료 cd remoteDir 원격지 호스트의 경로 바꾸기 close 원격지 호스트 연결 폐쇄 delete remoteFile 원격지 호스트로부터 화일 삭제 get remoteFile [ localFile ] 원격지 화일을 지역 화일로 복사 help [ command ] 도움말 표시 lcd localDir 지역 호스트의 경로 바꾸기 ls remoteDir 사용중인 원격지 호스트의 호일 목록 보기 mkdir remoteDir 사용중인 원격지 호스트에 디렉토리 만들기 open hostNane [ port ] 호스트 연결 시도 put localFile [ remoteFile ] 지역 화일을 원격지 화일로 복사 pwd 현재 작업 중인 원격지 호스트의 디렉토리 표시 quit bye와 같음 rename remoteFrom remoteTo 원격 화일 이름의 재정의 rmdir remoteDir 사용중인 원격지 호스트에 디렉토리 지우기 Unix/Linux
26
분산 처리 rsh rlogin /usr/sbin/in.rlogind 실행 안 해도 암호치고 로그인
원격 unix 호스트로의 login (형) rlogin -ec [ -l userId ] hostName (예) $ rlogin -l mysung (또는 multi.incheon.ac.kr) 신뢰하는 원격 호스트가 아니면 password 검사 escape sequence (~: tilde) -e 옵션으로 이 문자를 바꿀 수 있음 ~. 원격 호스트로부터 연결 즉시 폐쇄, ^D(종료)와 동일 ~susp 원격 login을 일시 중시, fg로 재개함 ~dsusp ~susp과 동일 단, 원격 로그인 세션으로부터의 출력을 지역 터미널로 에코함 rsh 원격 unix 호스트 상에서의 shell 실행 (단 하나의 명령 실행 시 유용) (형) rsh [ -l userId ] hostName [ command ] 중지 (^D) (예) $ rsh -ㅣ mysung Unix/Linux
27
분산 처리 telnet telnet 서버를 보유하고 있는 모든 원격 호스트로의 접근 및 명령어 수행 지원
(형) telnet [ host [ port ] ] escape 명령 (^]) : 명령 모드로 들어감 명령 모드 - ? telnet의 명령어 요약 출력 - close 연결 폐쇄 - open host [port] 호스트 연결 - quit telnet을 중단 - z telnet을 일시 중단 종료: ^] quit (Ctrl-] 후 quit) (예) $ telnet csmail.incheon.ac.kr 7 # 보통 7번 포트는 ping-port임(자신의 터미날로 echo) (예) $ telnet # 보통 13번 포트는 현재 시간을 보여주고 종료함 (예) $ telnet Unix/Linux
28
네트워크 파일 시스템 : NFS Sun Microsystems에서 유닉스 네트워크를 위해 개발한 Network File System (BSD 계열) 단일 네트워크 화일 계층 구조로의 마운팅 기능 제공 여러 개의 지역 화일 시스템을 RPC (Remote Procedure Call) 다른 기계로의 분산 처리 의뢰 XDR (External Data Representation) 호스트 중심의 데이터 표현 방식 지원 (confer) AFS AFS is based on a distributed file system originally developed at the Information Technology Center at Carnegie-Mellon University that was called the "Andrew File System". Unix/Linux
29
NFS NFS(Network File System) NFS와 자동 마운팅(Automounting)
계정이 없는 다른 호스트의 디스크에 있는 파일 접근 서버 호스트에서 클라이언트 호스트로 파일 시스템 설치 NFS와 자동 마운팅(Automounting) /etc/vfstab에 이용할 모든 파일 시스템을 등록하면 과부하로 파일 서버 및 파일 서버 이용하는 모든 호스트의 성능 저하 자동 마운팅으로 기계 의존성 줄임 부팅시 vfstab의 파일시스템만 설치됨 automount map에 등록된 자동 설치 가능한 파일 시스템들은 주문형(on demand) 마운팅 접근하기만 하면 자동 설치되었다가 일정시간 (디폴트 5분) 사용되지 않으면 조용히 해제됨 Solaris의 automount autofs 설치 (/etc/rc2.d/S74autofs 스크립트) automount map은 /etc/auto_master 또는 /etc/auto_home에 automountd 디몬은 /usr/lib/autofs/automountd Unix/Linux
30
NFS NFS 관리 be exported(or be shared) = 파일 시스템이 원격 마운팅(remote mounting)으로 이용 가능하게 되었다는 뜻 서버 호스트 Linux 및 SunOS 등 BSD 계열: /etc/exports (예) /usr -access = natasha:rocky, root=natasha Solaris: /etc/dfs/dfstab에 share명령 삽입하고 재부팅 또는 셸 명령으로 share 실행하고 /usr/lib/nfs/nfsd와 /usr/lib/nfs/mountd 실행 (예) share -F nfs -o ro=csblade:mysung /multishare (rw가 디폴트) 클라이언트 호스트 Linux 및 SunOS 등 BSD 계열: /etc/fstab (예) boris:/export/exec/sun4 /usr nfs r0 0 0 $ mount –t nfs multi:/tmp /mnt Solaris: /etc/vfstab에 mount 정보 기록하고 재부팅 (예) multi:/usr/FTP/pub multi:/multishare /multi nfs yes 또는 셸 명령으로 mount 실행 (예) $ mount -F nfs multi:/multishare /multi dfstab 편집, share, vfstab 편집, mount, umount는 root만 diskless workstation 저렴 network traffic 증가 Unix/Linux
31
NFS 레드햇 기반의 리눅스 배포판을 사용하는 경우 NFS서버가 이미 설치되어 있다. # rpm -qa | grep nfs
nfs-utils-lib system-config-nfs nfs-utils rc2-4.FC5.2 설치되어 있지 않은 경우 을 다운로드하여 설치한다. # rpm –ivh nfs-utils rc2-4.FC5.2.i386.rpm # rpm –ivh portmap i386.rpm 부팅과 동시에 실행될 수 있도록 xinetd 환경을 설정해 준다. # ntsysv –level 345 ntpd와 portmap을 체크 후 확인을 선택한다. Unix/Linux
32
(참고) Linux NFS NFS 서버 쪽 /etc/exports 파일 설정
형식 : share-directory client1(options,,,) client2(options,,,) share-directory : 공유할 디렉토리명 client : 공유 디렉토리에 접근할수 있도록 허용된 호스트들 options : 접근 권한설정 options ro : 클라이언트는 공유 디렉토리에 대해 읽기만 가능하다. rw : 클라이언트는 공유 디렉토리에 대해 읽기/쓰기가 가능하다. no_root_squash : 클라이언트의 root는 서버의 root와 같은 권한을 갖지 않는다. no_subtree_check : 공유된 디렉토리 내에 있는 서브 디렉토리들을 공유에서 제외 시키는 경우 설정 /etc/exports 파일 설정 예 # vi /etc/exports /home/user01 *.incheon.ac.kr(ro) /export/ftp/pub / (ro) / banana(rw),kiwi(rw,no_root_squash) Unix/Linux
33
(참고) Linux NFS 서버쪽 방화벽이 가동되고 있다면 공유가 되지 않는다. 따라서 방화벽을 꺼준다
# /sbin/service iptables stop 또는 # /etc/init.d/iptables stop 서버쪽 portmap과 nfs서비스를 가동한다. * nfs서비스는 portmap 서비스에 의존하여 가동되기 때문에 portmap 서비스를 먼저 가동해야 한다 # /sbin/service portmap start 또는 # /etc/init.d/portmap start Starting portmapper: [ OK ] # /sbin/service nfs start 또는 # /etc/init.d/nfs start Starting NFS services: [ OK ] Starting NFS quotas: [ OK ] Starting NFS daemon: [ OK ] Starting NFS mountd: [ OK ] Unix/Linux
34
(참고) Linux NFS NFS 클라이언트 설정
# /etc/init.d/nfslock start or # /sbin/service nfslock start # mount –t nfs Server IP Address:Server directory pass mount directory pass mount 예 # mount -t nfs :/multishare /mnt 마운트 실행시 사용할수 있는 옵션들 -o timeo=10 : NFS 서버와 연결이 끊어진 경우 timeo에서 지정한시간(1/10초단위) 기다렸다가 경고 메시지를 발생 -o rsize=1024 wsize=1024 : 읽고/쓰기 버퍼의 크기를 설정한다 (1024KB=1M) -o soft : remote mount를 실행할 때 성공하지 못하면 timeo 까지만 retry 후 에러 메시지를 발생하고 종료 -o hard : remote mount가 성공할 때 까지 무한시 재시도한다 (디폴트값이다) -o bg : 첫번째 마운트 시도가 실패인 경우 백그라운드로 계속 마운트를 재시도한다 시스템 부팅시 자동으로 서버의 파일시스템을 마운트 하도록 설정할 경우 # vi /etc/fstab Server IP Address:Server directory pass mount directory pass nfs defaults NFS-서버:/export/myshare /mnt nfs defaults Unix/Linux
35
네트워크 디몬과 네트워크 서비스 daemon=demon [발음확인] : 부팅시 시작되어 단일 태스크를 영원히 수행하는 백그라운드 프로세스 (Linux) xinetd ( /sbin/xinetd ) : master daemon $ /sbin/chkconfig [ --list ] # /sbin/chkconfig --add echo (root만 수정 가능) (Unix) inetd (eye-net-dee) : master daemon [Solaris 9] /etc/inetd.conf 안의 서비스 요청 받으면 해당 daemon의 사본 실행시키고 일이 끝나면 사멸시킴 ftp `stream tcp nowait root /usr/sbin/in.ftpd in.ftpd telnet stream tcp nowait root /usr/sbin/in.telnetd in.telnetd shell stream tcp nowait root /usr/sbin/in.rshd in.rshd login stream tcp nowait root /usr/sbin/in.rlogind in.rlogind 등 [Solaris 10] smf (Service Management Facility)로 대체, inetadm 으로 서비스 관리 (root만) $ /usr/sbin/inetadm # /usr/sbin/inetadm –e talk 로 enable # /usr/sbin/inetadm –d talk 로 disable Unix/Linux
36
네트워크 디몬과 RPC RPC(Remote Procedure Call) 실행중인 daemon 찾기
한 호스트에서 실행 중인 프로그램에서 다른 호스트의 프로시주어를 호출 inetd에 의해 기동 부팅시 개별적으로 기동되는 RPC 디몬 nfsd : NFS daemon rstatd : NIS 서비스 및 성능 통계 위한 디몬 프로그램 번호 + 포트 번호로 식별 well-known port numbers : /etc/services portmap 디몬: /etc/rpc 읽어 프로그램 번호와 IP 포트 번호 매핑 생성 RPC 요청 portmap 디몬 포트번호 얻음 실행중인 daemon 찾기 ps -ef 해서 PID가 200보다 작은 프로세스들 Unix/Linux
37
네트워크 디버깅 도구 arp: IP 주소를 하드웨어 주소(이더네트 주소)로 사상하는 커널표에 접근하여 주소사상검사와 관리
/sbin/ifconfig (또는 $ ip -s link): 네트워크 인터페이스 구성 (enable/disable) $ ifconfig -a /usr/sbin/ping : 호스트가 살아 있는지 알아보기 (ICMP 프로토콜 이용 바이러스 때문 에 인천대 서비스 불가) $ ping csmail.incheon.ac.kr ( ) 또는 mail.incheon.ac.kr ( ) netstat: 네트워크 상태 알아보기 네트워크 연결상태 $ netstat -a 인터페이스 구성 정보 조사 $ netstat -i 경로배정표 조사 $ netstat -r 네트워크 프로토콜 운용 상의 통계 $ netstat -s arp: IP 주소를 하드웨어 주소(이더네트 주소)로 사상하는 커널표에 접근하여 주소사상검사와 관리 (Linux) $ /sbin/arp -a (Unix) $ /usr/sbin/arp -a (목록) $ arp - d hostname (su가 삭제) $ arp -s hostname (su가 등록) nslookup: 인터넷 네임 서버 DNS (domain name server) 검색 $ /usr/sbin/nslookup eecs.mit.edu $ nslookup Unix/Linux
38
네트워크 디버깅 도구 (Linux) tcpdump : dump traffic on a network (root만 실행가능)
# /usr/sbin/tcpdump -w cap host multi (라이브러리 libpcap 이용) # /usr/sbin/tcpdump -r cap (Unix) snoop : capture and inspect network traffic (root만 실행가능) 네트워크 상의 통신을 감시하다가 사용자가 명시한 조건에 맞는 패킷을 기록하거나 출력 $ man snoop # snoop # snoop csblade # snoop -o cap csblade (cap 파일에 저장) # snoop -i cap -p99, (cap 파일에서 패킷 99~108 내용을 출력) traceroute : IP 패킷이 목적지에 도착하기 위해 방문하는 게이트웨이의 순서 추적 Free s/w ftp://ftp.ee.lbl.gov/traceroute.tar.gz download (또는 anonymous ftp) Install $ tar -xvf tracertoute.tar $ cd traceroute-1.4a12 $ ./configure $ make $ make install $ make install-man Run $ traceroute eecs.mit.edu ( ) eecs.berkeley.edu ( ) mail.incheon.ac.kr ( ) traceroute to eecs.mit.edu ( ), 30 hops max, 60 byte packets ( ) ms ms ms ( ) ms ms ms Unix/Linux
39
시스템 관리 도구 shutdown : 유연한 방법으로 시스템을 종료 (경고 메시지 출력)
# shutdown now +3 minutes [ =disk replacement = ] halt : 경고 메시지 없이 즉시 종료 (shutdown 호출) # halt +3 [message] reboot : 재부팅 (shutdown 호출) # reboot (Linux) top : display Linux task $ top $ top -d 0.5 (Unix) sar (system activity reporter) : 시스템 사용 분석 $ sar -u (CPU 사용율) $ sar -r (메모리 사용량) df : 마운트된 파일 시스템에서 서용중이거나 사용 가능한 디스크 공간 $ df $ df /dev/sdb1 du : summarize disk usage $ du $ du -s useradd / userdel : 사용자 추가 / 삭제 $ /usr/sbin/useradd guest –d /home/guest [ –s /bin/bash ] $ /usr/sbin/userdel -r guest Unix/Linux
40
(실습) Unix/Linux 소켓 통신 프로그램
(실습1) 인터넷 hello 프로그램 netprog의 helloserver.c helloclient.c 소스코드 참조 실행 $ helloserver $ helloclient 서버호스트IP주소 (실습2) 인터넷 talk 프로그램 netprog의 talk_server.c talk_client.c 소스코드 참조 $ talk_server 포트번호 $ talk_client 서버호스트IP주소 포트번호 (실습3) 인터넷 chat 프로그램 하나의 프로세스가 채팅 참가 신청 처리와 클라이언트들의 통신 처리를 다 할 수 있도록 accept() 또는 read()에서 계속 기다리는 동기(synchronous, blocking) 모드 대신 select() 시스템 호출을 이용하여 소켓을 비동기(asynchronous, non-blocking) 모드로 이용 netprog의 chat_server.c chat_client.c 소스 코드 참조 $ chat_server 포트번호 $ chat_client 서버호스트IP주소 포트번호 Unix/Linux
41
소켓 통신 (Socket Communication)
운영체제
42
소켓 (참고) Unix Network Programming (UnixNetProg.ppt) 수업자료
프로세스간 상호 양방향 통신 방식 네트워크를 통한 통신 가능 소켓을 통한 프로세스 통신은 클라이언트-서버 모델(client-server model)에 기초 활용 한 기계에 존재하는 파일을 다른 기계에서 프린트 한 기계에서 다른 기계로 파일을 전송 (참고) Unix Network Programming (UnixNetProg.ppt) 수업자료 유닉스 네트워크 프로그래밍
43
소켓 서버가 명명된 소켓 클라이언트가 명명되지 클라이언트가 연결됨. 소켓 연결과정 서버 클라이 언트 이름 을 생성
완결된 연결 서버가 명명된 소켓 을 생성 클라이언트가 명명되지 않은 소켓을 생성하고, 연결을 요청 클라이언트가 연결됨. 서버는 원래 명명된 소켓을 유지 유닉스 네트워크 프로그래밍
44
유닉스 소켓 통신: helloserver.c
#include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <netdb.h> #define PORTNUM 5059 main(int argc, char *argv[]) { int serverFd, clientFd, clilen, childpid; struct sockaddr_in cli_addr, serv_addr; // Open a TCP socket (an Internet stream socket). if((serverFd = socket(AF_INET, SOCK_STREAM, 0)) < 0){ printf("server: can't open stream socket"); return -1; } // Bind our local address so that the client can send to us. bzero((char *) &serv_addr, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = htonl(INADDR_ANY); serv_addr.sin_port = htons(PORTNUM); if(bind(serverFd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) printf("server: can't bind local address"); printf("Server is binded\n");
45
유닉스 소켓 통신: helloserver.c
listen(serverFd, 5); for( ; ; ){ // Wait for a connection from a client process. // This is an example of a concurrent server. clilen = sizeof(cli_addr); clientFd = accept(serverFd, (struct sockaddr *) &cli_addr, &clilen); printf("Server called\n"); if((childpid = fork()) < 0){ printf("server: fork error"); exit(0); } else if(childpid == 0){ /* child process */ /* printf("serverFd = %d, clientFd = %d\n", serverFd, clientFd); */ /* process the request */ write(clientFd,"Hello!",7); close(clientFd); /* close original socket */ return -1; close(clientFd); /* parent process */
46
유닉스 소켓 통신: helloclient.c
#include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <netdb.h> #define PORTNUM 5059 main(int argc, char *argv[]) { int clientFd; char str[10]; char* hostaddress; struct sockaddr_in serv_addr; struct hostent* hostStruct; struct in_addr* hostNode; if(argv[1] == NULL){ printf("Usage: inetclient hostname(or server IP)\n"); printf(" (Ex) inetclient multi.inchon.ac.kr(or )\n"); exit(1); }
47
유닉스 소켓 통신: helloclient.c
hostStruct = gethostbyname(argv[1]); if(hostStruct == NULL) return(0); hostNode = (struct in_addr*) hostStruct->h_addr; hostaddress = inet_ntoa(*hostNode); printf("host name is %s, host address is %s\n", argv[1], hostaddress); // Fill in the structure "serv_addr" with the address of the // server that we want to connect with. bzero((char *) &serv_addr, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = hostNode->s_addr; serv_addr.sin_port = htons(PORTNUM); // Open a TCP socket (an Internet stream soskcet). if((clientFd = socket(AF_INET, SOCK_STREAM, 0)) < 0) printf("client: can't open stream socket"); // Connect to the server if(connect(clientFd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) printf("client: can't connect to server"); /* printf("clientFd = %d\n", clientFd); */ read(clientFd, str, 10); printf("%s\n", str); close(clientFd); exit(0); }
Similar presentations