소스 상에서는 AP라던지 BS에 관한 함수를 동작시키지 않는 것일까?
덤프 파일을 만들어 디버스 할 시간이 부족하고 귀찮어서
많은 부분이 프린트를 찍어봤다.
ㅡㅡㅋ
데이터가 들어가는 곳이 한군데도 없었다.
깨끗하게 새로 설치한 시스템에서도.. 오로지 프린트만 찍어봤는데도...
뭐냐.....
복잡하기만 하면 다냐..
기능상.. 웃기다 거참..
그리고 NAV 실험을 하던중..
왜 ACK를 전송할 때 듀레이션 필드에 궂이 0으로 다시 설정하고 보내는 이유가 뭐냐?
누가 듣는다고!!!!
ㅡㅡㅋ 사실 핸들러를 통한 수신된 단말들의 NAV동안의 Idle 상태로 들어가는 구문을 확인하지 못했다.
set하는 곳은 확인했지만....
아직 모르는게 너무 많네.. .쩝..
참고로 sefer 함수에 무언가 정의 되어 있을거라고 예상한다.
'Network > Simulation' 카테고리의 다른 글
모니터링 시스템 구현을 위한 동작 (0) | 2009.02.03 |
---|---|
재전송 수를 구간별로 적용시키기 위해 NS2 WLAN (0) | 2009.02.03 |
필요하면 어디서든 선언해 놓아야 한다... ns2 WLAN (0) | 2009.02.03 |
DIFS제어 방법 ns2 (0) | 2009.02.03 |
NS2에서 802_11의 재전송 수 포기에 따른 카운터를 세고 싶을 때 (0) | 2009.02.03 |
현재 flow를 확인하고 배열상으로 저장한다. 벡터를 사용할려다 실패했다..
ㅡㅡㅋ 거참 프로그래밍 실력 하고는
하긴 필요 없다 생각하고 100개의 구조체 배열을 만들었다.
그리고 모두 0으로 초기화 하고 패킷이 들어오면 식별 번호를 부여했다.
그러면 만사 오케이~ ㅋㅋ
flow 식별 및 첫 기준 데이타 입력
############################################################################
if(addr()==0)
{
if (strcmp(check_name,"ack")==0){
if ( ETHER_ADDR(dh->dh_ta)== 0){
if(flow_num == 0)
{
d_an[0].old_ack_num=seq;
d_an[0].ip_addr=dst1;
d_an[0].port_num=dport;
// printf("\nseq %d dst1 %d dport %d \n",d_an[0].old_ack_num,d_an[0].ip_addr,d_an[0].port_num);
flow_num++;
}
else
{
for(i=0; i<flow_num;i++)
{
if(d_an[i].ip_addr == dst1&&d_an[i].port_num == dport)
{
break;
}
}
// printf("\ni %d flow_num %d\n",i,flow_num);
if(i==flow_num)
{
d_an[flow_num].old_ack_num=seq;
d_an[flow_num].ip_addr=dst1;
d_an[flow_num].port_num=dport;
// printf("\nseq %d dst1 %d dport %d \n",d_an[flow_num].old_ack_num,d_an[flow_num].ip_addr,d_an[flow_num].port_num);
// printf("\ni %d flow_num %d\n",i,flow_num);
flow_num++;
}
}
}
}
}
##########################################################################
해당 flow의 식별 번호가 있을 경우 데이터는 저장 된다.만약을 위해 ip주소와 목적지 주소를 비교하고 포트 번호를 확인 하였다.
##########################################################################
if(addr()==0)
if (strcmp(check_name,"ack")==0)
if ( ETHER_ADDR(dh->dh_ta)== 0){//printf("\ntest2\n");
for(j=0; j<flow_num;j++)
{
if(d_an[j].ip_addr == dst1&&d_an[j].port_num == dport&& flow_num != 0)
{
d_an[j].last_ack_num=seq;
}
}
}
#########################################################################
recvDATA(packet *p) 함수안에 위와 같은 메커니즘을 구현하도록 한다.
#########################################################################
//======================================================================
//fix this
// if(addr()==0) printf("\ntest111111 ch->langth_of_q %d\t",ch->langth_of_q);
int i,j,t;
double up_sum,down_sum;
struct hdr_tcp *dh2 = HDR_TCP(p);
struct hdr_ip *iph =HDR_IP(p);
int src1 = Address::instance().get_nodeaddr(iph->saddr());
int dst1 = Address::instance().get_nodeaddr(iph->daddr());
int sport = Address::instance().get_nodeaddr(iph->sport());
int dport = Address::instance().get_nodeaddr(iph->dport());
int seq=dh2->seqno();
char *check_name = (char *)packet_info.name(ch->ptype());
double now = Scheduler::instance().clock();
if(now<=time_monitor)
if(addr()==0)
if (strcmp(check_name,"ack")==0){
if ( ETHER_ADDR(dh->dh_ra)== 0){
if(flow_num1 == 0)
{
u_an[0].old_ack_num=seq;
u_an[0].ip_addr=dst1;
u_an[0].port_num=dport;
//printf("\nseq %d dst %d dport %d \n",u_an[0].old_ack_num,u_an[0].ip_addr,u_an[0].port_num);
flow_num1++;
}
else
{
for(i=0; i<flow_num1;i++)
{
if(u_an[i].ip_addr == dst1&&u_an[i].port_num == dport)
{
break;
}
}
// printf("\ni %d flow_num1 %d\n",i,flow_num1);
if(i==flow_num1)
{
u_an[flow_num1].old_ack_num=seq;
u_an[flow_num1].ip_addr=dst1;
u_an[flow_num1].port_num=dport;
// printf("\nseq %d dst %d dport %d \n",u_an[flow_num1].old_ack_num,u_an[flow_num1].ip_addr,u_an[flow_num1].port_num);
flow_num1++;
}
}
}
}
//================================================================================================
if(addr()==0)
if (strcmp(check_name,"ack")==0)
if ( ETHER_ADDR(dh->dh_ra)== 0){//printf("\ntest2\n");
for(j=0; j<flow_num;j++)
{
if(u_an[j].ip_addr == dst1&&u_an[j].port_num == dport&& flow_num1 != 0)
{
u_an[j].last_ack_num=seq;
}
}
}
//================================================================================================
##########################################################################
마지막이다. 모니터링 시간이 넘고 체크가 한번도 되지 않았으며 flow 개수가 0이 아닐경우
모니터링의 마지막 동작이 움직인다.
##########################################################################
//======================================================================
if(time_monitor<=now&&R_chek==false&&flow_num !=0)
{
//printf("\nif(time_monitor<=now&&R_chek==false&&flow_num !=0)\n");
// printf("\n\nflow_num %d check_last_ack_time %d\n\n",(flow_num*2),check_last_ack_time);
//double up_d,down_d,f_d;
time_monitor =now;
time_monitor+=200;
check_last_ack_time=0;
up_d=0.0;
down_d=0.0;
f_d=0.0;
for(k=0; k<flow_num;k++)
{
up_d+=(u_an[k].last_ack_num - u_an[k].old_ack_num);
down_d+=(d_an[k].last_ack_num - d_an[k].old_ack_num);
printf("\nuplast %d upold %d dlast %d dold %d \n",u_an[k].last_ack_num,u_an[k].old_ack_num,d_an[k].last_ack_num,d_an[k].old_ack_num);
}
R=down_d/up_d;
time=now;
printf("\n\ntest3 %lf time %lf\n\n",R,time);
// if(check_over<=R) printf("\ntest %lf %lf \n",R,check_over);
// if(R<=check_under) printf("\ntest1 %lf %lf \n",R,check_under);
//R_chek=true;
for(t=0; t<flow_num;t++)
{
d_an[t].old_ack_num=d_an[t].last_ack_num;
u_an[t].old_ack_num=u_an[t].last_ack_num;
}
}
//======================================================================
이 모니터링의 큰 유의 사항은 시뮬레이션 시간과 비교해서 너무 큰 모니터링 시간이 걸리면 안된다는 것인데.. 노드 수가 많을 수록 모든 flow의 수에 대한 데이터를 채우기 어렵다. 원래는 초기화 한수 무한 반복이었는데..
후엔 이전 마지막 값을 초기값으로 다시 저장.. 혹 데이터가 갱신되지 않더라도 오류는 없게 만들었다.
또한 노드가 많고 트래픽이 많을 수록 모니터링의 적응 기간이 길어진다.
동작을 크게 해야할 필요가 있으며..
실험상 1500초를 넘어가면 세그먼트 에러가 뜨는것 같다.
ㅡㅡㅋ
거참...
현재 새로 NS2를 우분투를 새로 설치하여 실행하였으나..
모니터링 실험은 이전 몇번 뿐이었으니...
지금은... 잘 모르겠다.
진실인지..
곧 모니터링을 다시 만들어야 할 것 같으니.. 정확한 실험은 이내 다시 해 봐야 겠다.
'Network > Simulation' 카테고리의 다른 글
NS2의 802_11에 대한 의문점.. (0) | 2009.02.03 |
---|---|
재전송 수를 구간별로 적용시키기 위해 NS2 WLAN (0) | 2009.02.03 |
필요하면 어디서든 선언해 놓아야 한다... ns2 WLAN (0) | 2009.02.03 |
DIFS제어 방법 ns2 (0) | 2009.02.03 |
NS2에서 802_11의 재전송 수 포기에 따른 카운터를 세고 싶을 때 (0) | 2009.02.03 |
각 인터페이스 큐를 찾아보면 해당 인터페이스 큐는 항상 Queue를 참조한다는 것을 알 수 있다.
결국 Queue에 선언해 놓으면 어떤 인터페이스 큐든 적용된다는 것이다.
그리고 직접 인터페이스 큐에 인큐 디큐를 재정의 해 놓지 않는한 대부분 Queue의 인큐 디큐를 사용한다.
만약 현재 패킷이 들어갔을 때의 큐 길이를 보고 싶다면...
독시즌으로 만든 파일에서 hdr_cmn을 따라가라... 그리고 임의의 변수를 선언하고..
패킷이 들어갈때 저장해라
그러면 맥에서 항상 그 당시의 큐 길이를 확인할 수 있다.
재미있는 방법이다.
RED 방식을 조금 적용해 봤다.
//ssrc_=0;
//slrc_=0;
/*
if(addr()==0)
{
if (strcmp(check_name,"tcp")==0){
ssrc_=7;
slrc_=4;
//printf("\nslrc_ %d ssrc_ %d ch->limit_of_q %d\n",slrc_,ssrc_,ch->langth_of_q);
}
/*
if (strcmp(check_name,"ack")==0){
ssrc_=5;
slrc_=2;
//printf("\nslrc_ %d ssrc_ %d ch->limit_of_q %d\n",slrc_,ssrc_,ch->langth_of_q);
}
/*
if( ch->langth_of_q != 0)
{
block_rt=ch->limit_of_q/7;
cur_q=ch->langth_of_q;
if(0<=cur_q&&cur_q<7)
{
if (strcmp(check_name,"ack")==0)
{
ssrc_=0;
slrc_=0;
// printf("\nACK 7 avr_ssrc_ %d avr_slrc_slrc_ %d ch->limit_of_q %d\n",ssrc_,slrc_,cur_q);
}
if(strcmp(check_name,"tcp")==0)
{
ssrc_=0;
slrc_=0;
// printf("\nTCP 7 avr_ssrc_ %d avr_slrc_slrc_ %d ch->limit_of_q %d\n",ssrc_,slrc_,cur_q);
}
}
else if(7<=cur_q&&cur_q<14)
{
if (strcmp(check_name,"ack")==0)
{
ssrc_=3;
slrc_=2;
// printf("\nACK 14 avr_ssrc_ %d avr_slrc_slrc_ %d ch->limit_of_q %d\n",ssrc_,slrc_,cur_q);
}
if(strcmp(check_name,"tcp")==0)
{
ssrc_=0;
slrc_=0;
// printf("\nTCP 14 avr_ssrc_ %d avr_slrc_slrc_ %d ch->limit_of_q %d\n",ssrc_,slrc_,cur_q);
}
}
if(14<=cur_q&&cur_q<21)
{
if (strcmp(check_name,"ack")==0)
{
ssrc_=6;
slrc_=3;
// printf("\nACK 21 avr_ssrc_ %d avr_slrc_slrc_ %d ch->limit_of_q %d\n",ssrc_,slrc_,cur_q);
}
if(strcmp(check_name,"tcp")==0)
{
ssrc_=0;
slrc_=0;
// printf("\nTCP 21 avr_ssrc_ %d avr_slrc_slrc_ %d ch->limit_of_q %d\n",ssrc_,slrc_,cur_q);
}
}
else if(21<=cur_q&&cur_q<28)
{
if (strcmp(check_name,"ack")==0)
{
ssrc_=7;
slrc_=4;
// printf("\nACK 28 avr_ssrc_ %d avr_slrc_slrc_ %d ch->limit_of_q %d\n",ssrc_,slrc_,cur_q);
}
if(strcmp(check_name,"tcp")==0)
{
ssrc_=0;
slrc_=0;
// printf("\nTCP 28 avr_ssrc_ %d avr_slrc_slrc_ %d ch->limit_of_q %d\n",ssrc_,slrc_,cur_q);
}
}
else if(28<=cur_q&&cur_q<35)
{
if (strcmp(check_name,"ack")==0)
{
ssrc_=7;
slrc_=4;
// printf("\nACK 35 avr_ssrc_ %d avr_slrc_slrc_ %d ch->limit_of_q %d\n",ssrc_,slrc_,cur_q);
}
if(strcmp(check_name,"tcp")==0)
{
ssrc_=2;
slrc_=1;
// printf("\nTCP 35 avr_ssrc_ %d avr_slrc_slrc_ %d ch->limit_of_q %d\n",ssrc_,slrc_,cur_q);
}
}
else if(35<=cur_q&&cur_q<42)
{
if (strcmp(check_name,"ack")==0)
{
ssrc_=7;
slrc_=4;
// printf("\nACK 42 avr_ssrc_ %d avr_slrc_slrc_ %d ch->limit_of_q %d\n",ssrc_,slrc_,cur_q);
}
if(strcmp(check_name,"tcp")==0)
{
ssrc_=4;
slrc_=2;
// printf("\nTCP 42 avr_ssrc_ %d avr_slrc_slrc_ %d ch->limit_of_q %d\n",ssrc_,slrc_,cur_q);
}
}
else if(42<=cur_q&&cur_q<49)
{
if (strcmp(check_name,"ack")==0)
{
ssrc_=7;
slrc_=4;
// printf("\nACK 49 avr_ssrc_ %d avr_slrc_slrc_ %d ch->limit_of_q %d\n",ssrc_,slrc_,cur_q);
}
if(strcmp(check_name,"tcp")==0)
{
ssrc_=6;
slrc_=3;
// printf("\nTCP 49 avr_ssrc_ %d avr_slrc_slrc_ %d ch->limit_of_q %d\n",ssrc_,slrc_,cur_q);
}
}
else if(49<=cur_q)
{
if (strcmp(check_name,"ack")==0)
{
ssrc_=7;
slrc_=4;
// printf("\nACK over avr_ssrc_ %d avr_slrc_slrc_ %d ch->limit_of_q %d\n",ssrc_,slrc_,cur_q);
}
if(strcmp(check_name,"tcp")==0)
{
ssrc_=7;
slrc_=4;
// printf("\nTCP over avr_ssrc_ %d avr_slrc_slrc_ %d ch->limit_of_q %d\n",ssrc_,slrc_,cur_q);
}
}
}
}*/
'Network > Simulation' 카테고리의 다른 글
NS2의 802_11에 대한 의문점.. (0) | 2009.02.03 |
---|---|
모니터링 시스템 구현을 위한 동작 (0) | 2009.02.03 |
필요하면 어디서든 선언해 놓아야 한다... ns2 WLAN (0) | 2009.02.03 |
DIFS제어 방법 ns2 (0) | 2009.02.03 |
NS2에서 802_11의 재전송 수 포기에 따른 카운터를 세고 싶을 때 (0) | 2009.02.03 |
double up_sum,down_sum;
struct hdr_cmn *ch = HDR_CMN(p);//패킷 정보
struct hdr_mac802_11* dh = HDR_MAC802_11(p);//맥 정보
struct hdr_ip *iph =HDR_IP(p); //ip 정보
//접근자에 정보를 직접 수정할 수 있게 만들어 나가는 작업은 힘들다..
해당 단말만 되는것인지에 대한 신뢰를 하기도 힘들다.
하지만 항상 디테일한 테스트 범위를 구성해 나가면 이러한 문제는 시간이
해결해 준다.
int src = Address::instance().get_nodeaddr(iph->saddr());
int dst1 = Address::instance().get_nodeaddr(iph->daddr());
int sport = Address::instance().get_nodeaddr(iph->sport());
int dport = Address::instance().get_nodeaddr(iph->dport());
int seq=dh2->seqno();
char *check_name = (char *)packet_info.name(ch->ptype()); //패킷 종류
double now = Scheduler::instance().clock();
//시뮬레이션 시간 가져온다 알뜰 살뜰 참 다양하게 썼다.
'Network > Simulation' 카테고리의 다른 글
모니터링 시스템 구현을 위한 동작 (0) | 2009.02.03 |
---|---|
재전송 수를 구간별로 적용시키기 위해 NS2 WLAN (0) | 2009.02.03 |
DIFS제어 방법 ns2 (0) | 2009.02.03 |
NS2에서 802_11의 재전송 수 포기에 따른 카운터를 세고 싶을 때 (0) | 2009.02.03 |
ns2 코드에서 재전송 수를 직접 제어할 때! (0) | 2009.02.03 |
802_11헤더의 class PHY_MIB를 확인하면
getDIFS()가 있다. 나는 AP의 DIFS만을 변경해주기 위해
해당 함수를 하나더 만들었다.
SIFSTime은 10마이크로 세컨드..
슬롯타임은 20마이크로 세컨드..
DIFS는 슬롯타임 * 2 + SIFS 시간이다. 즉 50마이크로 세컨드....
테스트 할 때는 그냥 수작업하였지만..
모니터링을 만들기 위해 파라미터를 선언했다. APDIFS 더블형으로..
초기화 할때 같이 밀어넣어준다. 일단 초기값으로..
문제는...
cc파일 안의 내용이다.
getDIFS()호출부를 그대로 찾아서..
add() 결과시 0 즉 AP이면 GETDIFS1()를 호출하고 아니면 일반적인 함수를
호출하도록 만들었다.
귀찮다 ㅡㅡㅋ
'Network > Simulation' 카테고리의 다른 글
재전송 수를 구간별로 적용시키기 위해 NS2 WLAN (0) | 2009.02.03 |
---|---|
필요하면 어디서든 선언해 놓아야 한다... ns2 WLAN (0) | 2009.02.03 |
NS2에서 802_11의 재전송 수 포기에 따른 카운터를 세고 싶을 때 (0) | 2009.02.03 |
ns2 코드에서 재전송 수를 직접 제어할 때! (0) | 2009.02.03 |
지금까지 실험한 결과들의 엑셀 파일 (0) | 2009.02.03 |
retransmitRTS()
retransmitDATA()
구문을 읽다보면 retrylimit나 쓰레숄더 값과 비교하는 구문이 있다.
디스카드 하기 전에 입력한다.
double now = Scheduler::instance().clock();
if(200.0 <= now)
{
if(addr()==0)
{
AP++;
printf("%lf AP : %d\n",now,AP);
}
else
{
client++;
printf("%lf client : %d client number %d\n",now,addr(),client);
}
}
헤더파일에 802 클래스를 찾아서
퍼블릭 선언부에 AP와 client를 선언하고
cc파일에서 초기화 할때 같이 0으로 선언해 줄 수 있도록 하자.
'Network > Simulation' 카테고리의 다른 글
필요하면 어디서든 선언해 놓아야 한다... ns2 WLAN (0) | 2009.02.03 |
---|---|
DIFS제어 방법 ns2 (0) | 2009.02.03 |
ns2 코드에서 재전송 수를 직접 제어할 때! (0) | 2009.02.03 |
지금까지 실험한 결과들의 엑셀 파일 (0) | 2009.02.03 |
WLAN에서 업스트림과 다운스트림의 시뮬레이션을 위한 강좌 (0) | 2009.02.02 |
public 선언부에
u_int32_t CWMin;
u_int32_t CWMax;
각각 선언한다. 물론 다른 위치에 존재하는 동일 선언자는 삭제하거나 주석처리..
send() 함수에 아래와 같이 구현한다.
화면이 미치도록 올라가는 것을 확인할 수 있다
참고로 AP는 Node 넘버가 0번이다. 훗..
if(addr()==0)
{
phymib_.CWMin=7;
phymib_.CWMax=7;
}
printf("\nnode number= %d cwmin= %d cwmax= %d ",addr(),phymib_.CWMin,phymib_.CWMax);
'Network > Simulation' 카테고리의 다른 글
필요하면 어디서든 선언해 놓아야 한다... ns2 WLAN (0) | 2009.02.03 |
---|---|
DIFS제어 방법 ns2 (0) | 2009.02.03 |
NS2에서 802_11의 재전송 수 포기에 따른 카운터를 세고 싶을 때 (0) | 2009.02.03 |
지금까지 실험한 결과들의 엑셀 파일 (0) | 2009.02.03 |
WLAN에서 업스트림과 다운스트림의 시뮬레이션을 위한 강좌 (0) | 2009.02.02 |
'Network > Simulation' 카테고리의 다른 글
필요하면 어디서든 선언해 놓아야 한다... ns2 WLAN (0) | 2009.02.03 |
---|---|
DIFS제어 방법 ns2 (0) | 2009.02.03 |
NS2에서 802_11의 재전송 수 포기에 따른 카운터를 세고 싶을 때 (0) | 2009.02.03 |
ns2 코드에서 재전송 수를 직접 제어할 때! (0) | 2009.02.03 |
WLAN에서 업스트림과 다운스트림의 시뮬레이션을 위한 강좌 (0) | 2009.02.02 |
미국 유머 시리즈.. '부부싸움...'. 직접 해석...15금
좀 다른 분위기의 미국 유머.. 힘들지만 직접 해석해 보앗습니다 T_T 어쨌거나 의역이 꽤 많고 오역의 가능성도 있다는 걸 염두에 두세요.
(오역이 많았는데, 오유 여러분의 힘으로 거의 수정이 된 듯 하네요. 하하)
My wife and I were watching Who Wants To Be A Millionaire while we were in bed. I turned to her and said, "Do you want to have sex?" "No," she answered.
아내와 난 침대에서 함께 퀴즈쇼를 보고 있었다. 그러다가 난 아내에게 돌아누어 물었지 '한 번 어때?' 아내는 '싫어' 라고 했다.
(Who wants to be a millionair 는 미국의 유명 퀴즈쇼)
I then said, "Is that your final answer?" She didn't even look at me this time, simply saying "Yes."
그래서 난 물었지 '그게 당신의 마지막 대답이야?' 아내는 날 이번엔 쳐다보지도 않고 간단히 대답하더군 응'
('그게 당신의 마지막 대답이야?' 는 보통 퀴즈쇼에서 많이 쓰는 말. 대부분이 'Yes'라고 대답한다고 합니다.)
So I said, "Then I'd like to phone a friend."
그래서 난 말했어 '그래.. 그럼 전화 챤스를 써 보아야겠군'
And that's when the fight started....
그래서 부부싸움은 시작되었어.
I asked my wife, "Where do you want to go for our anniversary?"
난 아내에게 물었어 '우리 결혼기념일에 어디 가고 싶어?'
It warmed my heart to see her face melt in sweet appreciation.
난 아내가 고마워 하며 흐뭇해 하는 얼굴을 볼 생각에 기뻤어.
"Somewhere I haven't been in a long time!" she said.
아내는 이렇게 대답했어 '오랫동안 가보지 못한 곳에 가고 싶어'
(오랫동안 가 보지 못한 곳은 '오르가즘'을 빗대어 말한 것으로 보입니다)
So I suggested, "How about the kitchen?"
그래서 난 제안했어 '부엌에 가 보는 건 어때?'
And that's when the fight started....
그래서 부부싸움은 시작되었어.
Saturday morning I got up early, quietly dressed, made my lunch, grabbed the dog, and slipped quietly into the garage.
토요일 아침에 난 일찍 일어나서 조용히 옷을 챙겨입고 점심 도시락을 싸고 개를 데리고 차고로 갔어.
I hooked up the boat up to the truck, and proceeded to back out into a torrential downpour.
그러고 보트를 차에 걸어매고 소나기가 쏟아지는 가운데 밖으로 나갔지.
The wind was blowing 50 mph, so I pulled back into the garage, turned on the radio, and discovered that the weather would be bad all day.
바람이 엄청나게 불어서 (대략 시속 80키로) 난 그냥 차고로 다시 들어가서 라디오를 켰더니 날씨가 하루종일 나쁠거라네.
I went back into the house, quietly undressed, and slipped back into bed. I cuddled up to my wife's back, now with a different anticipation, and whispered, 'The weather out there is terrible.'
그래서 난 집으로 다시 들어가서 조용히 옷을 벗고 침대로 슥 들어갔어. 난 아내의 등을 끌어안고 이제 좀 다른 기대를 가지고 (대략 이것도 한 번) 속삭였지 '밖에 날씨가 정말 나빠'
My loving wife of 10 years replied, 'Can you believe my stupid husband is out fishing in that?'
10년동안 같이 살아왔던 나의 사랑스런 아내는 이렇게 대답하더군 '당신은 우리 멍청한 남편이 이런 날씨에도 낚시하러 간 걸 믿을 수가 있어?'
And then the fight started ...
그래서 부부싸움은 시작되었어.
A man and a woman were asleep like two innocent babies.
아기처럼 평온하게 자고있는 한 남자와 한 여자가 있었습니다.
Suddenly, at 3 o'clock in the morning, a loud noise came from outside.
갑자기 새벽 3시에 시끄러운 소리가 밖에서 들렸죠.
The woman, bewildered, jumped up from the bed and yelled at the man 'Holy Shit. That must be my husband!'
그 여자는 깜짝 놀라서 침대에서 뛰쳐나와 그 남자에 대고 소리쳤어요 '이런 젠장. 저 소리는 남편이 틀림없어!'
So the man jumped out of the bed; scared and naked jumped out the window. He smashed himself on the ground, ran through a thorn bush and to his car as fast as he could go.
그래서 그 남자는 침대 밖으로 뛰쳐나와 놀라 옷도 입지 못한 채 창밖으로 점프했죠. 땅에 쿵 하고 부딛치고 가시 덤불을 마구 달려서 차에 탄 후 전속력으로 달렸어요.
A few minutes later he returned and went up to the bedroom and screamed at the woman, 'I AM your husband!'
몇 분 후에 그 남자는 다시 도망갔던 그 집으로 돌아와서 침실로 올라가 그 여자에게 소리쳤어요. '난 네 남편이 맞다구!'
The woman yelled back, 'Yeah, then why were you running?'
그 여자가 다시 소리질렀어요. '그래 맞아. 그런데 왜 그렇게 도망갔어?'
And then the fight started.....
그래서 부부싸움은 시작되었어.
I told my wife to buy me a case of Miller Light for $14.95.
난 아내에게 맥주 한 박스를 2만원에 사라고 이야기했어.
Instead, she bought a jar of cold cream for $7.95.
하지만 내 아내는 만원짜리 화장품을 사더군.
I told her the beer would make her look better than the cold cream.
난 아내에게 그 화장품을 쓰는 것보단 차라리 내가 맥주를 마시면 당신이 더 보기 좋아질 거라고 이야기했지.
And then the fight started....
그래서 부부싸움은 시작되었어.
A woman was standing nude, looking in the bedroom mirror. She was not happy with what she saw and said to her husband, 'I feel horrible; I look old, fat and ugly. I really need you to pay me a compliment.'
한 여자가 옷을 벗은 채 침실의 거울을 바라보고 있었어. 그녀는 거울 속의 자신의 모습이 못마땅해서 남편에게 말했어 '기분이 별로 안좋아. 늙어보이고 뚱뚱하고 못생겼어. 당신이 나한테 좀 좋은 소리 좀 해줄 수 있어?'
The husband replies, 'Your eyesight's damn near perfect.'
남편은 대답햇지, '음... 당신 시력 하나는 끝내주는데?'
And then the fight started.....
그래서 부부싸움은 시작되었어.
I took my wife to a restaurant. The waiter, for some reason, took my order first.
난 내 아내를 식당에 데려갔어. 웨이터가 내 주문을 먼저 받게 되었어.
"I'll have the strip steak, medium rare, please."
"난 스테이크를 먹겠습니다. 살짝 익혀서요."
He said, "Aren't you worried about the mad cow?""
웨이터는 말했어 '광우병이 무섭지 않나요?' (저 미친 소가 주문할 것은 신경쓰이지 않나요? 라고 들릴수도 있군요)
Nah, she can order for herself."
난 이렇게 말했지 '내 아내는 자기가 직접 주문할 거에요'
And then the fight started...
그래서 부부싸움은 시작되었어.
(반응에 감사하며 다시 번역 시작합니다.)
My wife and I were sitting at a table at my high school reunion, and I kept staring at a drunken lady swigging her drink as she sat alone at a nearby table.
아내와 나는 고교 동창회에 가서 같이 앉아있었습니다. 나는 근처 테이블에서 혼자 않아서 술을 마구 들이키고 있는 취한 여자 하나를 계속 바라보았죠.
My wife asked, 'Do you know her?'
아내가 물었어요 '당신 저 여자 알아?'
'Yes,' I sighed, 'She's my old girlfriend. I understand she took to drinking right after we split up those many years ago, and I hear she hasn't been sober since.'
'응'. 난 한숨을 쉬며 말했어요. '내 옛날 여자친구야. 내가 알기로는 저 여자는 우리 헤어지고 나서 그 이후로 계속 저렇게 마셔대기만 했어. 듣기론 지금껏 한번도 제정신인 적이 없었대'
'My God!' said my wife, 'who would think a person could go on celebrating that long?'
내 아내는 듣고 이렇게 말했어요 '오 맙소사, 저렇게 오랫동안이나 축배를 들며 기뻐하고 있다니!'
And then the fight started...
그래서 부부싸움은 시작되었어.
After retiring, I went to the Social Security office to apply for Social
Security. The woman behind the counter asked me for my driver's license to verify my age. I looked in my pockets and realized I had left my wallet at home. I told the woman that I was very sorry, but I would have to go home and come back later.
난 은퇴하고 나서 사회보장국에 가서 연금 신청을 하러 갔어. 사무원 여자는 내 나이를 알기 위해 운전면허증이 필요하다고 했지. 난 주머니를 뒤적여 보고 지갑을 두고 온 것을 알았어. 난 그여자에게 미안하다고 하면서 다시 집에 가서 가져와야겠다고 했어.
The woman said, 'Unbutton your shirt.' So I opened my shirt revealing my curly silver hair. She said, 'That silver hair on your chest is proof enough for me' and she processed my Social Security application.
그 여자는 이렇게 말하더군 '상의 단추를 열어보세요' 그래서 난 상의 단추를 열었고 그만 백발이 된 내 가슴털이 보여지게 되었지. 그여자는 그걸 보더니 '그 백발 가슴털은 나이를 증명하기에 충분하군요' 하며 바로 연금 신청을 접수해 주었지.
When I got home, I excitedly told my wife about my experience at the Social Security office.
난 집에 가서 흥분하면서 거기서 있었던 일을 내 아내에게 말해주었어.
She said, 'You should have dropped your pants. You might have gotten disability, too.'
아내는 이렇게 말하더군 '차라리 바지를 내리지 그랬어요. 그럼 장애인 연금도 같이 받을 수 있었을텐데'
And then the fight started...
그래서 부부싸움은 시작되었어.
When I got home last night, my wife demanded that I take her someplace expensive... so, I took her to a gas station.
내가 어젯밤에 집에 갔을때 아내가 좀 비싼곳에 데려가 주지 않겠냐고 하더군... 그래서 난 아내를 주유소에 데려갔어.
And then the fight started...
그래서 부부싸움은 시작되었어.
My wife was hinting about what she wanted for our upcoming anniversary. She said, 'I want something shiny that goes from 0 to 150 in about 3 seconds.'
내 아내는 돌아오는 결혼기념일에 무엇을 원하는지 힌트를 주려고 했어. 그녀가 말하길 '난 0부터 150까지 3초에 도달할 수 있는 뭔가 반짝이는 것을 원해 (대략 페라리 포르쉐 코르벳트 등등...)
I bought her a scale.
그래서 난 줄자를 하나 사 주었어.
(사실 '그래서 난 체중계를 하나 사 주었어' 가 맞는 번역인데.. 왠지 줄자가 중독성이 있는 듯... 참고로 줄자는 tape measure 이.. 맞죠?)
(추가로... 미국에선 마일을 거리계산에, 파운드를 무게에 사용하니 대충 0에서 240키로미터의 시속, 혹은 0에서 68키로그램의 무게가 되겠네요)
And then the fight started...
그래서 부부싸움은 시작되었어.
My wife sat down on the couch next to me as I was flipping channels.
She asked, 'What's on TV?'
내가 소파에서 채널을 돌려가며 티비를 보고 있는데 아내가 옆에 않아서 묻더군 '티비에 뭐 있어?'
(영어 표현 상 What's on TV? 는 '티비에서 뭐 하고 있어?' 혹은 '티비 위에 뭐가 있어?' 두 가지로 모두 해석이 가능해 보입니다.)
I said, 'Dust.'
내가 대답했어 '먼지'
And then the fight started...
그래서 부부싸움은 시작되었어.
나중에도 이런 유머 있으면 해석에서 올려야 겠네요. 저도 오유 여러분 답글로 더 정확히 숨겨진 뜻을 배우고, 이거 보시는 분들도 생활 영어 공부할 수 있게요.
즐거운 하루 되시길~
전 이런 개그가 좋습니다...
ㅎㅎㅎ
써먹어야지...ㅎㅎㅎㅎㅎㅎ
아~
난 애인이 없구나...
CWmin,CWmax를 7로 하였을 경우 다운스트림의 전송 BW는 이미 업스트림의 BW보다 훨씬 높은 상태이다.
이 상태에서 재전송 수 감소는 AP의 다운스트림 BW제어가 아닌 전송률을 감소시키는 것이므로 당연한 성능 하락의 결과를 초래한 것이다.
DIFS의 제어는 AP의 BW를 더 높여주는 꼴이 되어 버렸다.
결론: 낮은 BW의 버퍼에서 손실이 발생하지 않은 상태에서 높은 BW의 전송률을 낮춰야지만 공평성을 제공할 수 있다. (WLAN에서...)
방법: ON->OFF->.......
ON=AP의 전송량을 절대적으로 보장해주는 구간
OFF=무선 단말기만 전송을 하거나, 일반적인 경쟁 구간
문제: T1, T2의 시간적 할당량이 얼만인지 계산해야 한다. 지금으로서는 알 수 없다.
'My_life > Discussion' 카테고리의 다른 글
2009.1.16 교수님과의 대화 (0) | 2009.01.19 |
---|