새소식

인기 검색어

TL

20/11/23 TL. 네트워크통신(자바). TELNET, FTP, SNMP. IR.

  • -

오늘 할 일

강의 수강 - 컴네(이론), 기학(실습), 컴프2(이론)

과제 - 기학

+컴개

내일 할 일

강의 수강 - 컴네(실습), 컴프2(실습), 컴그(이론)

과제 - 컴프2


포트 : 컴퓨터 안에서 여러 개의 네트워크 응용 프로그램이 수행될 수 있으므로, 프로그램을 구분하는 가상의 통신 선로. 16비트로 구성돼 있다. 0부터 65535의 범위를 가지며, 미리 일정한 범위의 포트 번호는 미리 할당돼 있다. ex) http는 80번 포트를 사용.


웹브라우저, ftp서버 , db 서버 등이 동시에 실행되고 있으므로 이를 구분하기 위해 포트 번호가 사용됨. 즉, 각각의 클라이언트에서 ip 주소와 포트를 통해 서비스를 제공 받음.

 

DNS : 숫자 대신 기호를 사용하는 주소. ex) google.com

DNS 서버 : google.com의 ip주소를 반환해 주는 서버

URL : 인터넷 상의 자원을 나타내는 약속. ex) 172.217.31.238

InetAddress : IP 주소를 제공하는 클래스. 로컬의 IP 주소를 얻어옴

java.net.InetAddress

-> 도메인 이름을 DNS에서 검색한 후 IP 주소를 가져오는 기능 제공.
-> getLocalHost 메소드를 통해 로컬 컴퓨터의 객체 생성해 getHostAddress로 IP 주소 확인할 수 있음.
-> getAllByName 메소드를 사용해 INetAddress의 객체 생성해 해당 서버의 IP 주소를 구할 수 있음.

java.net으로 다양한 네트워크 기능 제공.


TCP -> URL, URLConnection, Socket, ServerSocket
UDP -> DatagramPacket, DatagramSocket, MulticastSocket

 

URL은 인터넷을 통해 웹 페이지를 웹브라우저의 주소로 제공하는 주소. 일반적으로 프로토콜 식별자를 포함한 절대 경로로 표현. 컴퓨터 상의 자원 위치 지정하는 경우 상대 경로로 지정하기도 함.

 

//www.yahoo.co.kr/index.html:80
kr/까지가 호스트 이름. index.html이 파일 이름. :80이 포트번호

 

웹 페이지를 위한 프로토콜 식별자는 http고, 정해진 포트번호는 80인데, 생략하는 경우가 일반적.

 

URL 객체 생성하고 openConnection 메소드 호출해 URL에 대한 서버에 접속할 수 있음. 일단 연결하면 URL Connection 객체 통해 서버 데이터에 접근 가능.

 

서버 소켓 객체 생성 (준비상태) -> accept 메소드 호출 (클라이언트 접속 요청) -> 스트림 객체 생성(스트림 전송용) -> 데이터 읽고 쓰기(데이터 전송) -> 연결 종료

 

서버에서 소켓 서버 생성자로 서버 소켓 객체 생성하는데, 포트 번호 이용해 생성함. queueLength는 서버에 연결되는 클라이언트의 최대 갯수

 

accept 메소드에서 클라이언트와 연결되면 새로운 socket 객체 반환해 통신할 수 있게 함.

 

서버에서 클라이언트와 데이터를 주고받기 위해 입출력 스트림 객체 생성. 서버 : OutputStream으로 데이터 전송. 클라이언트 : InputStream으로 읽기. read와 write로 데이터 읽고 씀. 연결해제할 땐 close.


port 20 : FTP Data 21 : FTP Control 22 : TELNET 25 : SMTP

Telnet : 가상 터미널 서비스.(원격)

그런데, OS마다 양식이 다르므로, 만국공통어 같은 NVT(network virtual terminal)가 존재.

8비트가 0인 ASCII character set : Data character. 표준 정해져 있다.모든 OS가 똑같이 사용.

8비트가 1인 ASCII character set : Control character. 표준 정해져있지 않다. 자체적인 숫자를 사용.

 

agent : 대리자 프로그램. ex) chrome은 메일을 작성하고 전송하기 직전까지 도와줌.

user agent, message transfer agent, message access agent.

시나리오

1. sender와 receiver가 같은 system에 존재.

-> user agent 2개 필요

2. sender와 receiver가 다른 system에 존재.

-> user agent 2개와 MTA 1쌍(클라이언트, 서버)이 필요.

3. sender가 system과 분리, receiver는 system에 붙어 있음.

-> UA 2개, MTA 2쌍 필요.

4. sender와 receiver 둘 다 system에 분리.

-> receiver가 message access agents(MAA)를 필요.

-> MTA 2쌍, MAA 1쌍 필요.

-> receiver의 컴퓨터가 켜지면 MAA server에 새로운 메세지가 있는지 물어보고 있으면 전달받음. 즉 service를 받을 사람이 요청. client는 항상 개시하는 사람인 것을 기억. 가장 일반적인 형태.

만약, server에서 물어본다면? client가 켜져있는지 등을 항상 체크해야 하므로 비효율적.

 

MIME : Multipurpose Internet Mail Extensions. data를 전송하기 위해, non-ASCII data를 7-bit ASCII로 바꾸거나, 송신하기 위해  7-bit NVT ASCII를 Non-ASCII data로 바꾼다. ex) Base-64의 경우, 6개씩 잘라서 앞 2개는 00으로 채워넣어서 프레임을 늘린다.

 

SMTP : Simple Mail Transfer Protocol. MTA client와 server를 정의하는 formal protocol. commands와 response를 사용하여 message를 전송함. commands는 14개가 있는데, 앞 8개가 잘 쓰이고, 뒤 6개가 잘 안 쓰임.

 

Mail transfer phases

1. 연결

2. 메일 전송

3. 연결 종료

 

SMTP로 날아온 mail들을

IMAP4 : Internet Mail Access Protocol. 서버에서 이메일을 읽음. 보안성 더 좋음. 더 강력, 더 복잡.

POP3 : 기기로 이메일을 다운로드 함.

 

SMTP 말고 HTTP로도 전송할 수 있다. HTTP는 Web-Based.

 

FTP : File Transfer Protocol. file은 양방향 이동. TCP의 서비스이고, 2개의 TCP connections를 필요로 함. well-known port 21은 control connection에 사용. well-known port 20은 data connection에 사용.

2 system은 다른 파일 이름, text와 data를 다른 방식으로 나타내고, 다른 directory 구조를 가져야 함.

 

connection connection은 FTP session이 끝날 때까지 유지.

data connection은 파일 전송이 closed될 때까지 유지.


a = b OP c(binary op)

arithmetic : ADD, SUB, MUL, DIV, MOD

logic : AND, OR, XOR

comparisons : EQ, NEQ, LT, GT, LEQ, GEQ

a = OP b(unary op)

arithmetic MINUS, logical NEG

a = [b] : load instruction

[a] = b : store instruction

a = addr : symbolic address

 

L : label

jump L : unconditional jump. goto L

cjump condition : conditional jump. if a>3 goto L 

 

Function call

call f(a1, ..., an)

a = call f(a1, ..., an)

 

[[e]] : HIR e에 대한 LIR expression

t = [[e]] : e가 표현식일 때, 결과값을 t에 저장.

 

t=[[e1 OP e2]]

t1 = [[e1]]

t2 = [[e2]]

t = t1 OP t2

 

t = [[v[e]]]

v : array[T] 타입

S : T타입 데이터 하나의 크기

t1 = addr v

t2 = [[e]]

t3 = t2 * S

t4 = t1 + t3

t = [t4]

 

t = [[v.f]]

v : T 타입

S : T 내에서 f의 위치(offset)

t1 = addr V

t2 = t1 + S
t = [t2]

 

struct A {

 int a;

 char c;
}

여기에서 c에 접근할 땐, a의 주소 + a의 크기(offset)으로 c에 접근.

 

t=[[e1 SC-OR e2]]

t=[[e1]]

cjump t Lend

t=[[e2]]

Lend:

 

[[s1; s2; ...; sN]]

[[s1]]

[[s2]]

...

[[sN]]

sequence는 단순 연결.

 

[[v=e]]

v = [[e]]

 

[[v[e1]=e2]]

t1 = addr v

t2 = [[e1]]

t3 = t2 * S

t4 = t1 + t3

t5 = [[e2]]

[t4] = t5

 

[[if(e) then s]]

t1 = [[e]]

t2 = neg t1

cjump t2 Lend

[[s]]

Lend:

 

[[if (e) then s1 else s2]]

t1 = [[e]]

t2 = neg t1

cjump t2 Lelse

Lthen:[[s1]]

jump Lend

Lelse:[[s2]]

Lend:

 

[[while (e) s]]

Lloop:t1 = [[e]]

t2 = neg t1

cjump t2 Lend

[[s]]

jump Lloop

Lend:

 

switch부턴 그냥 ppt 보자.

 

변수를 레지스터와 메모리 중 어디에 저장할지 결정해야 함. 모든 변수를 일단 memory에 저장하고, 가능한 것은 register로 조정함.

 

code : 명령을 저장

static : 프로그램과 life time 공유하는 변수들 집합.

stack : local 변수들

heap : sys call에 의해 동적으로 allocate 되는 공간 ex) malloc, new

 

stack heap은 서로를 바라보며 커짐. 위치 바뀔 수도. 

 

environment : <변수, storage location>

state : <변수, 값>

 

바인딩 : 어떤 environment에서 변수 이름 N이 storage S에 지정되면 N이 S에 바인딩 된다고 함.

 

static allocation : 프로그램 수행 동안 안 변하는 location으로 바인딩 하는 것.

heap allocation : 연속적인 global 영역 일부를 OS로부터 받은 것. 프로그램 수행 중 요청, 반환 해야 함.

 

run-time stack : 한 함수 call마다 하나씩 두는 frame.

activation record(frame) : 함수 수행 위한 execution environment. recursion일 때도 각 call마다 하나씩. local 변수, 인자, 리턴 값, 기타 임시 storage...

f가 호출되면 f의 frame을 stack에 push

f가 return되면 f에 대한 frame을 pop-up

Top frame = 현재 수행중인 함수의 frame.

 

Stack pointer(SP) : frame top을 가리킴

Frame Pointer(FP) : frmae base를 가리킴. base pointer.

변수는 FP(SP)로부터의 offset으로 접근.

'TL' 카테고리의 다른 글

20/11/26 TL.  (0) 2020.11.26
20/11/24 TL.  (0) 2020.11.24
20/11/22 TL. RNN. CNN(img)  (0) 2020.11.22
20/11/17 TL. DNS(Domain Name System)  (0) 2020.11.17
20/11/16 TL.  (0) 2020.11.16
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.